user.has_perm имеет значение false, хотя я вижу его как на странице администратора, так и в user.user_permissions - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь проверить разрешение. Код для разрешения это в "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, почти такая же, как у обычного объекта User.

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

    def __str__(self):
        return self.name

Проблема в том, что я добавил разрешение для экземпляра «customUser» в оболочке и проверил его с помощью 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") или что-то в этом роде, и я попытался снова получить пользовательский объект из базы данных, сначала в той же оболочке, второй раз открыл новый и попробовал его. Там тоже не повезло.

1 Ответ

0 голосов
/ 30 апреля 2018

Вы не передаете правильную вещь has_perm. В качестве состояния docs вам необходимо передать "<app label>.<permission codename> ". Итак:

user.has_perm("soruweb.can_see_soru_list")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...