user.has_perm为false,即使我可以在管理页面和user.user_permissions

时间:2018-04-30 08:05:15

标签: django python-3.x 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,
)

我有一个与普通用户对象几乎相同的customUser模型。

class customUser(AbstractUser):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name

问题是,我将权限添加到" customUser"在shell中并使用user.has_perm("can_see_soru_list")进行检查。这返回False。虽然,如果我使用user.user_permissions.all()进行检查,我可以在那里看到权限对象,甚至可以将其称为perm = user.user_permissions.all()[0]之类的实例。

为什么has_perm()函数返回false是我不理解的。

以下是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中,第二次打开新的并尝试使用它。那里也没有运气。

1 个答案:

答案 0 :(得分:0)

你没有把正确的事情传递给has_perm。作为docs州,您需要传递"<app label>.<permission codename>“。所以:

user.has_perm("soruweb.can_see_soru_list")