2016-09-27 69 views
1

我正在创建一个User对象的实例。创建本身是一个标准的User.objects.create_user调用,并且工作正常 - 用户已创建。在那之后,我想了几个权限添加到他(她):当用户保存在Django Rest框架中时添加权限

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。结果是权限对象从不是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

感谢两项建议! –