在 Django Rest Framework 中保存用户时添加权限

Adding permissions when user is saved in Django Rest Framework

我正在创建一个 User 对象的实例。创建本身是一个标准的 User.objects.create_user 调用并且工作正常 - 用户已创建。在那之后,我正在尝试为他或她添加一些权限:

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 调用总是 returns false。我在这里做错了什么?

你打错了has_perm。它需要一个这种格式的字符串

"<app label>.<permission codename>"

顺便说一句,我可以建议像这样简化您的代码:

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