我有一个对象数据库,每个对象都具有查看,编辑等权限。以下示例是完整模型的简化版本。
class Warehouse(models.Model):
...
view_permission = models.ForeignKey(Permission, ...)
edit_permission = models.ForeignKey(Permission, ...)
...
创建对象后,将发送pre_save信号以创建和填充这些权限字段。信号处理程序还会创建一个具有创建的某些权限的组。
我的问题是,当我将用户设置为这些动态创建的组之一时,我不知道如何检查用户是否具有该特定权限。
我一直在尝试执行以下操作:
> from django.contrib.auth.models import User
> from myapp.models import Warehouse
> w = Warehouse.objects.get(pk=1) # get the first object
> u = User.objects.get(username='jhon') # get a user
用户john
属于设置w
权限的组。
如果我使用user.get_all_permissions()
,它将返回一组字符串。
如果我使用user.has_perm(w.view_permission)
,它将返回false。
我管理它的唯一方法是输入
> p = w.view_permission
> user.has_perm('%s.%s' % (p.content_type.app_label, p.codename))
True
但这很丑,某种程度上似乎是错误的。
你们是否有更正确的方法来检查这些权限?