整个应用程序的Django组权限

时间:2014-01-10 08:42:32

标签: python django permissions

我可以通过编程方式为整个应用程序授予一组权限吗? 当然,我可以为该组添加,更改,删除应用程序中每个特定模型的权限。但是后来,如果我需要添加另一个模型,我需要更改代码,我也可以在其中提供权限 所以我需要找到一个可能在应用程序内授予所有权限的可能性,而不知道他们的名字 Django文档对我没有帮助。

修改
为了向您提供更多详细信息:我提交了RemoteUserBackend并覆盖了configure_user方法以将新用户添加到特定组。如果未创建此组,我创建它并希望为其提供必要的权限:

class MyRemoteUserBackend(RemoteUserBackend):

    def configure_user(self, user):
        group, created = Group.objects.get_or_create(name="mygroup")
        if created:
            pass
            # Give permissions here

        user.groups.add(group)

        group.save()

2 个答案:

答案 0 :(得分:2)

这是管理命令的快速草图,它将应用模型权限与组同步:

# coding=utf-8

from django.core.management.base import BaseCommand, CommandError
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import Permission, Group

class Command(BaseCommand):
    args = '<group_name app_label>'
    help = ('Syncs permissions of group with given name with permissions 
             of all models of app with giver app_label ')

    def handle(self, *args, **options):
        group_name= args[0]
        app_label = args[1]

        group = Group.objects.get(name=group_name)
        cts = ContentType.objects.filter(app_label=app_label)
        perms = Permission.objects.filter(content_type__in=cts)
        group.permissions.add(*perms)

答案 1 :(得分:0)

您可以让群组超级用户的用户,然后当您检查权限时,执行:

if user.is_superuser:
    #allow
else:
    #check permissions