Джанго - разрешения и профили - PullRequest
2 голосов
/ 04 января 2011

У меня есть несколько разных профилей. Я хочу связать разрешения с этими профилями. Я сделал это так:

class StudentProfile(UserProfile):
    school = models.CharField(max_length=30)
    class Meta:
        permissions = (
            ("is_student","Can access student pages"),
        )

однако, когда я пытаюсь проверить, существует ли это разрешение с использованием has_perm для этого объекта профиля, я получаю сообщение об ошибке «Объект StudentProfile не имеет атрибута has_perm». Разве я не должен проверять разрешения таким образом? Я прочитал документы, и это то, что я должен был сделать

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

print user.get_all_permissions()

Я получаю пустой набор. Должен ли я видеть что-то вроде "appname.is_student"

1 Ответ

3 голосов
/ 04 января 2011

.has_perm - это метод для объекта User, а не для объекта UserProfile.Если вы пытаетесь проверить, что у пользователя есть разрешение has_student, вам нужно будет сделать что-то вроде этого:

user.has_perm('profiles.is_student')

при условии, что ваша модель StudentProfile находится в приложении profiles.

РЕДАКТИРОВАТЬ : Чтобы ответить на перефразированный вопрос, вы должны назначить разрешения обычным способом, либо группе, либо конкретному пользователю, и использовать User.has_perm.Ваш последний пример полностью идет вразрез с системой разрешений Django.

...