Django 中基于行的权限
Row based permissions in Django
我有一个简单的 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)
数据库中会有几百万行table。
应该实现 django 管理界面的基于行的权限。
如果当前用户在"responsible_group",则允许他查看和修改。
AFAIK django guardian 不太适合这个。请参阅此相关页面:https://django-guardian.readthedocs.io/en/stable/userguide/performance.html
连解"Direct foreign keys"都不匹配。当前模型已包含过滤行所需的所有内容。
如何为django启用基于行的权限并使用Log模型进行权限检查?
使用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())
我有一个简单的 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)
数据库中会有几百万行table。
应该实现 django 管理界面的基于行的权限。
如果当前用户在"responsible_group",则允许他查看和修改。
AFAIK django guardian 不太适合这个。请参阅此相关页面:https://django-guardian.readthedocs.io/en/stable/userguide/performance.html
连解"Direct foreign keys"都不匹配。当前模型已包含过滤行所需的所有内容。
如何为django启用基于行的权限并使用Log模型进行权限检查?
使用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())