在Django中,有没有一种简单的方法可以向用户或组添加权限?

2024-04-26 12:57:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我当前正在向以下用户和组添加权限:

permissions = list(
  Permission.objects.filter(
    Q(codename='add_server', content_type=ContentType.objects.get(app_label='bildverteiler', name='server'))
    | Q(codename='change_server', content_type=ContentType.objects.get(app_label='bildverteiler', name='server'))
    | Q(codename='delete_server', content_type=ContentType.objects.get(app_label='bildverteiler', name='server'))
    | Q(codename='change_group', content_type=ContentType.objects.get(app_label='bildverteiler', name='group'))
    | Q(codename='add_group', content_type=ContentType.objects.get(app_label='bildverteiler', name='group'))
    | Q(codename='delete_group', content_type=ContentType.objects.get(app_label='bildverteiler', name='group'))
    | Q(codename='change_user', content_type=ContentType.objects.get(app_label='auth', name='user'))
    | Q(codename='add_user', content_type=ContentType.objects.get(app_label='auth', name='user'))
    | Q(codename='delete_user', content_type=ContentType.objects.get(app_label='auth', name='user'))
  )
)
some_user_obj.user_permissions = permissions

有更好的方法吗?也许没有询问?在


Tags: nameaddapppermissionsgetobjectsservertype
1条回答
网友
1楼 · 发布于 2024-04-26 12:57:22

此解决方案的特点较少:

query=Q()
for app_labe, name in [
  ('bildverteiler', 'server'),
  ('bildverteiler', 'group'),
  ('auth', 'user')]:
   query|=Q(content_type__app_label=app_label, content_type__name=name, codname__in=['%s_%s' % (perm_name, name) for perm_name in ['change', 'add', delete'])

Permission.objects.filter(query)

相关问题 更多 >