如何防止Django Admin用户更改其他管理员用户的个人资料数据?

时间:2010-02-17 07:29:02

标签: django django-models django-admin django-forms

我有教师类扩展/子类化的管理员用户。

如何防止教师查看和更改其他教师的个人资料数据,教师只能更改自己的记录/行?提前谢谢!

3 个答案:

答案 0 :(得分:6)

我不确定我到底知道您要做什么,但如果您认为内置用户管理页面对教师用户的工作方式略有不同,那么我相信您只需要扩展{ {1}},并覆盖UserAdmin方法。

queryset

这将禁止教师编辑或删除其他记录,因为如果您查看class TeacherSpecificUserAdmin(UserAdmin): def queryset(self, request): if request.user.is_teacher(): return Teacher.objects.filter(pk=request.user.pk) return UserAdmin.queryset(self, request) 代码,ModelAdminchange_view方法将使用{{1}返回的查询集获取要更改或删除对象的方法。

还需要进行一次调整,因为用于更改delete_view中密码的视图不会使用与其他视图相同的系统来更改对象。只需在新课程中覆盖它:

queryset

之后,您只需要阻止教师添加新用户或删除他们自己的记录。使用默认django's permission framework或覆盖UserAdmin... def user_change_password(self, request, id): if request.user.is_teacher() and request.user.pk != int(id): # PermissionDenied is in django.core.exceptions raise PermissionDenied return UserAdmin.user_change_password(self, request, id) ... 方法来执行此操作。

如果您需要更多信息(has_add_permission),请查看has_delete_permission源代码。

答案 1 :(得分:3)

可能没有建立这样做的方法。

请参阅permission docs

  

每个对象类型全局设置权限,而不是按特定对象实例设置。例如,可以说“玛丽可能会改变新闻报道”,但目前还不能说“玛丽可能会改变新闻报道,但只会改变自己创作的故事”或“玛丽只能改变具有某种地位的新闻报道” ,出版日期或身份证明。“后一种功能是Django开发人员目前正在讨论的内容。

然而,显然object level permissions即将来临。

答案 2 :(得分:1)

目前没有简单的方法可以做到这一点,但是object level permissions即将在Django 1.2中推出 - 尽管你必须做一些工作才能让它在管理中工作。

幸运的是,Django Advent article解释了你需要做什么。