django - 由 django-guardian 分配权限的对象在管理员中不可见

标签 django permissions django-admin django-authentication django-guardian

我正在使用 django-guardian为了管理每个对象的权限。

对于给定的用户,我授予对一个对象的所有权限:

joe = User.objects.get(username="joe")

mytask = Task.objects.get(pk=1)

assign('add_task', joe, mytask)
assign('change_task', joe, mytask)
assign('delete_task', joe, mytask)

正如预期的那样,我得到了:
In [57]: joe.has_perm("add_task", mytask)
Out[57]: True

In [58]: joe.has_perm("change_task", mytask)
Out[58]: True

In [59]: joe.has_perm("delete_task", mytask)
Out[59]: True

在 admin.py 中,我还让 TaskAdmin 继承自 GuardedModelAdmin而不是 admin.ModelAdmin
现在,当我使用 joe 连接到我的网站时,在管理员上我得到:
You don't have permission to edit anything 

我不应该能够编辑对象 mytask 吗?

我是否必须使用内置的基于模型的权限系统来设置一些权限?

我错过了什么吗?

编辑

我尝试添加选项 user_can_access_owned_objects_only ,这应该可以解决我的问题,但我仍然在管理员中看不到任何内容...
class TaskAdmin(GuardedModelAdmin):

    user_can_access_owned_objects_only = True

    pass

admin.site.register(Task, TaskAdmin)

谢谢

最佳答案

为了只看到当前用户拥有的实例,我给了他所有权限

add_task=Permission.objects.get(codename="add_task")
change_task=Permission.objects.get(codename="change_task")
delete_task=Permission.objects.get(codename="delete_task")

joe.user_permissions.add(add_task)
joe.user_permissions.add(change_task)
joe.user_permissions.add(delete_task)

然后我使用 Guardian.shortcuts.assign 对几个实例设置权限,并在管理中过滤查询集:
class TaskAdmin(admin.ModelAdmin):

    def queryset(self, request):
            if request.user.is_superuser:
                return super(TaskAdmin, self).queryset(request)
            return get_objects_for_user(user=request.user, perms=['add_task', 'change_task', 'delete_task'], klass=Task)

它远非完美,但我找不到任何其他解决方案。

关于django - 由 django-guardian 分配权限的对象在管理员中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10928860/

相关文章:

python - 使用 Django 模型权限引发 DoesNotExist 错误

python - Django原始id字段查找有错误的链接

django - 使 Django 管理文档易于访问

Django Rest Framework - 单元测试图像文件上传

iOS Facebook 请求更多权限迫使我再次登录

django - 如何在 django-admin-tools 仪表板上添加自定义菜单项

django-models - Django Admin - 具有外键字段的模型的自定义清理方法

python - 我可以使用 mod_wsgi 使用 apache 部署 python 2 和 3 django 应用程序吗?

javascript - 如何存储 JQuery 提交的变量并在稍后阶段在 Python/Django 项目中重用它?

linux - 尝试运行从另一台计算机复制的程序时权限被拒绝