3

我有一个简单的 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 模型进行权限检查?

4

1 回答 1

2

使用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())
于 2018-09-25T12:34:26.180 回答