课程里面设为/取消管理员的逻辑是否有问题?
来源:9-7 dashboard搭建与管理员模块开发(7)
追蝴蝶的少年ww
2019-12-19
1.在admin.html是通过url参数来向后端传送是否取消管理员的:
% for user in users:
<tr>
<td>${user.username}</td> # 这里的user对象是迭代出循环的每一个user对象
<td>${user.is_superuser}</td>
<td>${user.date_joined}</td>
<td>
% if user.is_superuser:
<td><a href="${reverse('admin_update_status')}?status=off">取消管理员</a></td>
%else:
<td><a href="${reverse('admin_update_status')}?status=on">设为管理员</a></td>
% endif
</td>
</tr>
% endfor2.在后端处理的视图函数,
class UpdateAdminStatus(View):
def get(self, request):
status = request.GET.get('status', 'on')
_status = True if status == 'on' else False
request.user.is_superuser = _status # 这里request.user是当前登录的用户的对象
request.user.save() # 数据库中实际修改的是当前登录用户的user对象的管理员状态
return redirect(reverse('admin_manager'))问题现象:
修改用户的管理员状态,实际修改的时当前用户的管理员状态:


写回答
2回答
-
我没有看代码哈,正确逻辑应该是过去到该管理员的id 然后 他如果是管理员 并且你想注销他,就把他的状态调整为off(是off吗?我忘了哈 你可以对号入座检查下)。肯定不是修改自己管理员的状态。如果可以 那应该是我逻辑上的漏洞,理论上自己无权限取消自己是管理员
012019-12-19 -
隔壁额老余
2019-12-29
% if user.is_superuser:
<td><a href="${reverse('admin_update_status')}?status=off&user_id=${user.id}">取消管理员</a></td>
% else:
<td><a href="${reverse('admin_update_status')}?status=on&user_id=${user.id}">成为管理员</a></td>
% endif
--------------------------------------------------------------------------------
class UpdateAdminStatus(View): def get(self, request): status = request.GET.get('status', 'on') _status = True if status == 'on' else False #request.user.is_superuser = _status #request.user.save() user_id = request.GET.get('user_id') user = User.objects.filter(id=user_id) user.update(is_superuser=_status) return redirect(reverse('admin_manger'))自己写的。可参考
232019-12-31
相似问题