Есть ли простой способ добавить разрешения для пользователя или группы в Django? - PullRequest
0 голосов
/ 21 декабря 2011

Я сейчас добавляю права доступа для пользователей и групп, например:

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 Ответ

3 голосов
/ 21 декабря 2011

В этом решении меньше символов:

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)
...