2016-09-27 3 views
1

Я создаю экземпляр объекта User. Само создание является стандартным вызовом User.objects.create_user и работает нормально - пользователь создан. После этого я пытаюсь добавить несколько разрешений для него или ее:Добавление разрешений при сохранении пользователя в Django Rest Framework

for name in ('view_restaurant', 'change_restaurant', 'delete_restaurant', 
      'view_meal', 'add_meal', 'change_meal', 'delete_meal', 
      'view_order', 'delete_order', 
      'view_historicalorder', 'add_historicalorder', 'change_historicalorder', 
      'view_orderitem', 
      'view_historicalorderitem', 
      'view_restaurantemployee', 'add_restaurantemployee', 'change_restaurantemployee', 'delete_restaurantemployee'): 
    permission = Permission.objects.get(codename=name) 
    print(permission is None) 
    user.user_permissions.add(permission) 
    user.save() 
    print(user.has_perm(permission)) 

Как вы можете видеть, в последней строке я проверка, был ли пользователь назначен с соответствующим разрешением и несколько строк выше, я проверяю, разрешено ли None. В результате объект разрешения никогда не бывает нигде, но вызов user.has_perm всегда возвращает значение false. Что я здесь делаю неправильно?

ответ

1

Вы звоните по телефону has_perm. Он ожидает строку в этом формате

"<app label>.<permission codename>" 

Как в стороне, я могу рекомендовать, чтобы упростить ваш код так:

codenames = 'view_restaurant', 'change_restaurant', ... 
perms = Permission.objects.filter(codename__in=codenames) 
user.user_permissions.add(*perms) 
+0

Спасибо за оба предложения! –

Смежные вопросы