Django管理员索引列表权限

时间:2014-10-06 20:53:59

标签: python django django-admin

假设我的Bar模型带有owner字段。我希望用户能够编辑obj.owner == request.user

的所有实例

模型在超级用户和我明确分配了权限change_baradd_bar的用户的管理面板中正确显示,如here所述:

  

假设您有一个app_label foo和模型的应用程序   名为Bar,用于测试您应该使用的基本权限:

add: user.has_perm('foo.add_bar')
change: user.has_perm('foo.change_bar')
delete: user.has_perm('foo.delete_bar')

如何在未向用户明确分配Barfoo.change_bar的情况下在管理员索引列表中显示模型foo.add_bar

到目前为止,我尝试了以下操作,期望Bar模型出现在索引列表页面中,但它不起作用。

class BarAdmin(admin.ModelAdmin):
    def get_queryset(self, request):
        qs = super(BarAdmin, self).get_queryset(request)
        if request.user.is_superuser:
            return qs        
        return qs.filter(owner=request.user)

    def has_add_permission(self, request):
        return True

    def has_change_permission(self, request, obj=None):
        if obj is None:
            return True
        if obj.owner == request.user:
            return True
        return False

    def has_delete_permission(self, request, obj=None):
        if obj is None:
            return True
        if obj.owner == request.user:
            return True
        return False

    def has_module_permission(self, request):
        return True

访问链接admin/foo/bar/并返回Bar个实例的列表,obj.owner == request.useradmin/foo/bar/add允许用户添加新对象。 这些链接虽然未显示在管理员索引页面中。 admin/foo/会返回403 Forbidden

我正在使用Django 1.7。 适用于Django 1.8。

0 个答案:

没有答案