user.has_perm 是错误的,尽管我可以在管理页面和 user.user_permissions 中看到它
user.has_perm is false even though I can see it both in admin page and user.user_permissions
我正在尝试测试权限。权限代码是这样的
"customAuth.permissions.py"
content_type = ContentType.objects.get_for_model(Soru)
can_see_soru_list = Permission.objects.create(
codename="can_see_soru_list",
name="Can See The List",
content_type=content_type,
)
我有一个与普通用户对象几乎相同的自定义用户模型。
class customUser(AbstractUser):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
问题是,我在shell中添加了对"customUser"实例的权限,并用user.has_perm("can_see_soru_list")
检查了它。这 returned False
。虽然,如果我用 user.user_permissions.all()
检查它,我可以在那里看到权限对象,甚至可以将它调用到 perm = user.user_permissions.all()[0]
.
这样的实例
为什么has_perm()
函数returnfalse是我不明白的地方
这是我在 python manage.py shell
中得到的:
>>> user = customUser.objects.get(username="testuser1")
>>> user.has_perm("can_see_soru_list")
False
>>> user.user_permissions.all()
<QuerySet [<Permission: soruweb | soru | Can See The List>]>
>>> user.user_permissions.all()[0]
<Permission: soruweb | soru | Can See The List>
>>> perm = user.user_permissions.all()[0]
>>> perm.codename
'can_see_soru_list'
>>> p = Permission.objects.get(codename="can_see_soru_list", content_type=c)
>>> p == perm
True
快速编辑:我尝试用 delattr(user,"_perm_cache")
或类似的东西清除缓存,然后我尝试再次从数据库中获取用户对象,首先是在同一个 shell 中,第二次打开新的,然后试过了。也没有运气。
您没有将正确的东西传递给 has_perm
。作为docs状态,需要通过"<app label>.<permission codename>
”。所以:
user.has_perm("soruweb.can_see_soru_list")
我正在尝试测试权限。权限代码是这样的 "customAuth.permissions.py"
content_type = ContentType.objects.get_for_model(Soru)
can_see_soru_list = Permission.objects.create(
codename="can_see_soru_list",
name="Can See The List",
content_type=content_type,
)
我有一个与普通用户对象几乎相同的自定义用户模型。
class customUser(AbstractUser):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
问题是,我在shell中添加了对"customUser"实例的权限,并用user.has_perm("can_see_soru_list")
检查了它。这 returned False
。虽然,如果我用 user.user_permissions.all()
检查它,我可以在那里看到权限对象,甚至可以将它调用到 perm = user.user_permissions.all()[0]
.
为什么has_perm()
函数returnfalse是我不明白的地方
这是我在 python manage.py shell
中得到的:
>>> user = customUser.objects.get(username="testuser1")
>>> user.has_perm("can_see_soru_list")
False
>>> user.user_permissions.all()
<QuerySet [<Permission: soruweb | soru | Can See The List>]>
>>> user.user_permissions.all()[0]
<Permission: soruweb | soru | Can See The List>
>>> perm = user.user_permissions.all()[0]
>>> perm.codename
'can_see_soru_list'
>>> p = Permission.objects.get(codename="can_see_soru_list", content_type=c)
>>> p == perm
True
快速编辑:我尝试用 delattr(user,"_perm_cache")
或类似的东西清除缓存,然后我尝试再次从数据库中获取用户对象,首先是在同一个 shell 中,第二次打开新的,然后试过了。也没有运气。
您没有将正确的东西传递给 has_perm
。作为docs状态,需要通过"<app label>.<permission codename>
”。所以:
user.has_perm("soruweb.can_see_soru_list")