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

时间:2011-12-21 11:28:47

标签: python django permissions authentication

我目前正在向用户和群组添加权限,如下所示:

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

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

1 个答案:

答案 0 :(得分:3)

此解决方案的字符较少:

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)