Kar*_*rek 9 python django django-models django-forms django-admin
我在我的模型中添加了Meta类并同步了DB,然后在shell中创建了一个返回false的对象,所以我真的无法理解错误的位置或缺少的是某些其他文件中可能存在某种配置.
class Employer(User):#Employer inherits from User
employer_verified = models.BooleanField(default=False)
class Meta:
permissions = (
("is_member", "Friendly permission description"),
)
emp = Employer.objects.create(blablabla)
emp.save()
emp.has_perm('myappname.is_member')
Run Code Online (Sandbox Code Playgroud)
dge*_*gel 19
在你给出的例子中,我希望emp.has_perm('myappname.is_member')
确实如此False
.除非您明确授予新Employer
对象is_member
权限,否则它将不具备该权限.
以编程方式为其提供获取实际权限对象所需的权限,并将其添加到Employer
's user_permissions
:
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
content_type = ContentType.objects.get_for_model(Employer)
permission = Permission.objects.get(content_type=content_type, codename='is_member')
emp = Employer.objects.create(blablabla)
emp.save()
emp.user_permissions.add(permission)
Run Code Online (Sandbox Code Playgroud)
要在shell中测试它,您可能需要删除为每个用户创建的权限缓存 - 否则has_perm
可能无法反映实际权限:
delattr(emp, '_perm_cache')
Run Code Online (Sandbox Code Playgroud)
回答你的问题:
如果您希望每个Employer
人都拥有is_member
权限,可以选择以下几种方法:
重写save
方法Employer
以检查是否存在self.pk
(这意味着它是一个新对象,并在保存后创建上面显示的权限.不是很漂亮,但它会起作用.
编写自己的身份验证后端.如果权限代码是'is_member'
并且User
有一个Employer
实例,则返回True
不要使用权限.权限系统旨在让您能够动态授予和撤消权限.如果你只关心a是否User
是Employer
- 那么测试.不要使用权限使其复杂化.
归档时间: |
|
查看次数: |
16928 次 |
最近记录: |