Как создать пользовательское разрешение (роль пользователя) в Django? - PullRequest
6 голосов
/ 30 октября 2010

У меня простой вопрос.Как создать роль пользователя в Django, не создавая ее вручную в БД?

РЕДАКТИРОВАТЬ: Мне нужно создать определенное разрешение.Таким образом, только пользователи с этим разрешением могут изменять конкретное поле модели.Мне просто нужно сделать одно поле «только для чтения» для некоторых пользователей.Возможно ли это в Django?

Ответы [ 2 ]

7 голосов
/ 22 мая 2013

Создание разрешения без использования БД означает, что вы не хотите использовать систему разрешений django.В этот момент я хотел бы спросить, почему вы не хотите его использовать?

Если можно использовать разрешение django sywstem, вы можете создать разрешение и проверить его, переопределив метод сохранения администратора ... Как:

в вашей models.py

class SomeModel(Model):
    your_spec_field = FieldType(...)
    class Meta:
        permissions = (
            ("some_perm", u"A name for your default permission"),
        )

В вашей связанной admin.py

class SomeModelAdmin(ModelAdmin):
    def save_model(self, request, obj, form, change):
        if change:
            curr_value = SomeModel.objects.get(pk=obj.id)
            if not request.user.has_perm('<your_app>.some_perm'):
                obj.your_spec_field = curr_value.your_spec_field
        else:
            if not request.user.has_perm('<your_app>.some_perm')
                obj.your_spec_field = '' # or the default value according to your field type
        obj.save()

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

0 голосов
/ 31 октября 2010

Вы можете проверить Джанго-авторитет .Это позволяет реализовывать разрешения на уровне объектов и даже логические проверки.Логические проверки не хранятся в базе данных, но являются функциями, которым можно передавать значения и возвращать True или False.Бесстыдный плагин: мой форк реализует бэкэнд разрешений объектов django 1.2, поэтому вы можете использовать его как:

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