django管理站点中的URL阻止给员工用户

时间:2015-10-18 14:57:08

标签: django django-admin django-urls django-permissions

我有一个应用' app_name'它有一个配置文件对象,通过OneToOne字段方式链接到User对象。现在登录时,我使用他的个人资料对象ID将用户重定向到管理网站上的编辑个人资料页面。我已按预期授予is_staff访问权限和编辑配置文件的权限。

现在我不想阻止他访问其他个人资料对象。我现在有两种方式,我可以这么认为 - 1.制作一个自定义权限,授予只有登录用户的个人资料的编辑权限。 2.阻止不涉及个人资料对象ID的网址。

超级用户应该能够正常访问,因为它是默认可用的。

我不知道如何执行其中一种方式。任何其他可能的方式都受到欢迎。请帮忙!

1 个答案:

答案 0 :(得分:0)

覆盖ModelAdmin.get_queryset()可以排除其他对象:

class ProfileAdmin(ModelAdmin):
    # current user can only see his profile
    def get_queryset(self, request):
        qs = super(ProfileAdmin, self).get_queryset(request)
        if not request.user.is_superuser:
            qs = qs.filter(id=request.user.id)
        return qs

如果您只想控制更改权限,请覆盖ModelAdmin.has_change_permission()

class ProfileAdmin(ModelAdmin):
    # current user can only edit his profile
    def has_change_permission(self, request, obj=None):
        # user has permission to edit a obj
        if not obj or request.user.is_superuser:
            return True
        # user ONLY has permission to edit his obj
        return request.user.id == obj.user.id