【问题标题】:Django-Guardian - Restrict group access to classDjango-Guardian - 限制组访问类
【发布时间】:2016-11-05 15:47:51
【问题描述】:

我已按照 django-guardian 文档中的用户指南设置 django-guardian。这使我可以控制一个小组是否可以查看特定课程。这是来自 django-guardian 文档的示例,其中添加了字段(客户):

class Task(models.Model):
    summary = models.CharField(max_length=32)
    content = models.TextField()
    customer = models.CharField(max_length=80)
    reported_by = models.ForeignKey(User)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        permissions = (
            ('view_task', 'View task'),
        )

这(以及 django-guardian 文档示例中的其他代码)允许我通过 django 管理员授予特定用户和组“查看任务”的权限。问题是我想根据客户是谁来限制哪些任务组可以看到。例如,只有分配给客户 A 的顾问才能看到 task.customer = 'A' 的任务。有没有办法设置它?

非常感谢任何帮助。

【问题讨论】:

    标签: python django python-3.x django-guardian


    【解决方案1】:

    这可以通过 django-guardian 轻松实现,它只需要代表您进行更多编码。

    例如,限制视图在管理员更改列表中返回哪些记录:

    from django.contrib import admin
    from myapp import models
    from guardian.shortcuts import get_objects_for_user
    
    
    @admin.register(models.Task)
    class TaskAdmin(admin.ModelAdmin):
        # ...
        def get_queryset(self, request):
            qs = super(TaskAdmin, self).get_queryset(request)
            tasks = get_objects_for_user(request.user, 'myapp.view_task', klass=models.Task)
            return qs.filter(task_id__in=tasks.values_list('id'))
    

    类似,您可以在任何常规视图中执行此操作。

    【讨论】:

    • 非常感谢您的回复。不幸的是,我收到一条错误消息:“raise AlreadyRegistered('The model %s is already registered'% model.__name__) django.contrib.admin.sites.AlreadyRegistered: The model Task is already registered”知道是什么原因造成的吗?跨度>
    • 欢迎。这告诉您您已在其他地方为该特定模型注册了 ModelAdmin。您必须修改其中的更改,或者在再次注册之前取消注册。然而,这是完全不同的事情。
    • 我发现了错误。我的错。谢谢。然而,我现在收到另一个错误:“/admin/app/task/ 的 FieldError 无法将关键字 'task' 解析为字段。选择有:摘要、内容、客户、report_by、created_at”
    • 欢迎。附加的代码只是一个示例。在任何情况下,您都需要了解 Django 的基础知识,例如 ORM。例如,它可能应该是task_id__in
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 2014-01-10
    • 2023-03-29
    • 2018-02-28
    • 2013-03-16
    • 2013-04-22
    • 2014-06-21
    相关资源
    最近更新 更多