Невозможно установить пользовательские разрешения в Django

Я пытаюсь настроить некоторые пользовательские разрешения для приложения Django, но, похоже, не могу его получить за работой. Официальная документация немного скудна, и не упоминает (по крайней мере, что я могу найти), как на самом деле установить разрешение? Основываясь на нескольких сторонних уроках, которые я нашел, я расширил класс User, и он, кажется, работает нормально:

from django.db import models
from django.contrib.auth.models import User,UserManager

    class CustomUser(User):
        custom_field = models.CharField(max_length=250)
        objects = UserManager()

        class Meta:
            permissions = (
                ('is_custom','Has a Custom Permission'),
            )

Когда я пытаюсь установить разрешение, оно не работает:

>>> from project.custauth.models import CustomUser
>>> from django.contrib.auth.models import User, Permission
>>> user = CustomUser.objects.get(username='new.user')
>>> user
<CustomUser: new.user>
>>> custom_permission = Permission.objects.get(codename="is_custom")
>>> custom_permission
<Permission: custauth | custom user | Has a Custom Permission>
>>> custom_permission.save()
>>> user.user_permissions.add(custom_permission)
>>> user.save()
>>> user.has_perm(custom_permission)
False
>>> user.get_all_permissions()
set([])

Любые идеи о том, что я я делаю неправильно? Я использую Django 1.2.1 с Python 2.4.3. Весь вклад приветствуется ...

7
задан Sparky 22 August 2010 в 02:12
поделиться

2 ответа

Я протестировал ваш код (Python 2.6.2, Django 1.2.1), и все заработало, как ожидалось. Можете ли вы написать модульный тест для проверки того же фрагмента кода?

Кстати, user.has_perm (custom_permission) не вернет True . Попробуйте user.has_perm ('app.is_custom') .

Обновление

Следующий фрагмент кода:

In [1]: from app.models import CustomUser

In [2]: from django.contrib.auth.models import User, Permission

In [3]: user = CustomUser.objects.get(username = 'new.user')

In [4]: custom_permission = Permission.objects.get(codename='is_custom')

In [5]: user.user_permissions.add(custom_permission)

In [6]: user.save()

In [7]: user.has_perm(custom_permission)
Out[7]: False

In [8]: user.has_perm('app.is_custom')
Out[8]: True

In [9]: user.get_all_permissions()
Out[9]: set([u'app.is_custom'])
1
ответ дан 7 December 2019 в 20:32
поделиться

Я провел еще несколько тестов на другой платформе и смог воспроизвести ваши результаты. После дополнительных поисков я обнаружил, что это проблема с серверной частью аутентификации, а не с самими разрешениями.

Спасибо за помощь, Манодж.

0
ответ дан 7 December 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: