【问题标题】:Row based permissions in DjangoDjango中基于行的权限
【发布时间】:2019-03-01 01:41:18
【问题描述】:

我有一个简单的 Django 模型,大致如下:

from django.contrib.auth.models import Group
from mylogapp.models import LogType

class Log(models.Model):
    responsible_group = models.ForeignKey(Group)
    description = models.TextField()
    log_type = models.ForeignKey(LogType)

数据库表中会有几百万行。

django 管理界面的基于行的权限应该得到实现。

如果当前用户在“responsible_group”中,则允许查看和修改。

AFAIK django Guardian 不太适合这个。请参阅此相关页面:https://django-guardian.readthedocs.io/en/stable/userguide/performance.html

即使解决方案“直接外键”也不匹配。当前模型已经包含过滤行所需的所有内容。

如何为django启用row-based-permission并使用Log模型进行权限检查?

【问题讨论】:

    标签: django django-permissions django-guardian


    【解决方案1】:

    使用get_queryset() 有帮助吗?

    class LogAdmin(admin.ModelAdmin):
        def get_queryset(self, request):
            qs = super().get_queryset(request)
            return qs.filter(responsible_group__in=request.user.groups.all())
    

    【讨论】:

    • 看起来不错。这样我们就不需要第三方工具来启用基于行的权限。谢谢你的回答!
    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2011-03-26
    • 2011-01-18
    • 1970-01-01
    • 2019-03-24
    相关资源
    最近更新 更多