当用户保存在Django Rest框架中时添加权限
问题描述:
我正在创建一个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。我在这里做错了什么?
答
你打电话给has_perm不正确。它需要一个字符串以这种格式
"<app label>.<permission codename>"
顺便说一句,我可能会建议简化,像这样的代码:
codenames = 'view_restaurant', 'change_restaurant', ...
perms = Permission.objects.filter(codename__in=codenames)
user.user_permissions.add(*perms)
感谢两项建议! –