如何在 Django 中以编程方式批准所有已安装的应用程序权限
How to approve all installed apps permission programmatically in Django
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
# Local apps
'users.apps.UsersConfig',
# Third party apps
'allauth',
'allauth.account',
'allauth.socialaccount',
]
views.py
@user_passes_test(lambda u: u.is_superuser)
def create_group(request):
groups = Group.objects.all()
if request.method == 'POST':
group_name = request.POST.get('group_name')
group = Group.objects.create(name=group_name)
return HttpResponse(group.name)
else:
ctx = {'groups': groups}
return render(request, 'users/admin/create_group.html', ctx)
在这里,我创建了一个用于以编程方式创建用户组的视图。现在我想让用户像 django-admin 仪表板一样批准权限。喜欢 select 一些权限,然后按提交按钮将这些权限添加到 selected 组。
一定有某种方法可以这样做,因为 django admin 本身就是这样做的。我想知道如何完成这项工作。
Django 自己通过 Group
and Permission
. The Permission
object makes use of a content_type
field to refer to the ContentType
model [Django-doc] 之间的 ManyToManyField
实现了这一点,它指定了所有模型。
如果您因此想要将具有给定 codename
的权限添加到 Group
,您可以使用:
from django.contrib.auth.models import Permission
permission = Permission.odocumentenbjects.get(codename='<i>add_mymodel</i>')
<i>mygroup</i>.permissions.add(permission)
或者,如果您想要为给定模型 Foo
添加所有权限,您可以使用:
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
permissions = Permission.objects.filter(
content_type=ContentType.objects.get_for_model(<i>Foo</i>)
)
<i>mygroup</i>.permissions.add(*permissions)
当然,您也可以创建额外的权限,就像为另一个模型创建对象并将它们添加到组中一样。
您还可以添加所有权限:
from django.contrib.auth.models import Permission
permissions = Permission.objects<b>.all()</b>
<i>mygroup</i>.permissions.add(*permissions)
settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
# Local apps
'users.apps.UsersConfig',
# Third party apps
'allauth',
'allauth.account',
'allauth.socialaccount',
]
views.py
@user_passes_test(lambda u: u.is_superuser)
def create_group(request):
groups = Group.objects.all()
if request.method == 'POST':
group_name = request.POST.get('group_name')
group = Group.objects.create(name=group_name)
return HttpResponse(group.name)
else:
ctx = {'groups': groups}
return render(request, 'users/admin/create_group.html', ctx)
在这里,我创建了一个用于以编程方式创建用户组的视图。现在我想让用户像 django-admin 仪表板一样批准权限。喜欢 select 一些权限,然后按提交按钮将这些权限添加到 selected 组。 一定有某种方法可以这样做,因为 django admin 本身就是这样做的。我想知道如何完成这项工作。
Django 自己通过 Group
and Permission
. The Permission
object makes use of a content_type
field to refer to the ContentType
model [Django-doc] 之间的 ManyToManyField
实现了这一点,它指定了所有模型。
如果您因此想要将具有给定 codename
的权限添加到 Group
,您可以使用:
from django.contrib.auth.models import Permission
permission = Permission.odocumentenbjects.get(codename='<i>add_mymodel</i>')
<i>mygroup</i>.permissions.add(permission)
或者,如果您想要为给定模型 Foo
添加所有权限,您可以使用:
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
permissions = Permission.objects.filter(
content_type=ContentType.objects.get_for_model(<i>Foo</i>)
)
<i>mygroup</i>.permissions.add(*permissions)
当然,您也可以创建额外的权限,就像为另一个模型创建对象并将它们添加到组中一样。
您还可以添加所有权限:
from django.contrib.auth.models import Permission
permissions = Permission.objects<b>.all()</b>
<i>mygroup</i>.permissions.add(*permissions)