Джанго разрешения - PullRequest
       45

Джанго разрешения

7 голосов
/ 25 января 2012

Я бы хотел получить более детальное разрешение в моем проекте Django, но не могу решить, какое приложение использовать. Что у меня есть что-то вроде:

class Item(models.Model):
    name = models.CharField(max_length=64, unique=True)
    description = models.CharField(max_length=128, default='')
    logo = ImageField(upload_to=/tmp, blank=True, null=True)

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

Кто-нибудь знает, что лучше всего использовать или как бы я сам это реализовал? Я мог бы также представить, что есть пользователи только для чтения, которые могут получить доступ ко всему / читать все, но не смогут изменять, это также невозможно.

Спасибо за любую помощь.

Ответы [ 3 ]

7 голосов
/ 25 января 2012

Самый гибкий, но способ будет:

  1. написать несколько пользовательских разрешений (т.е. can_modify_descr)
  2. написать свой собственный формы или модель формы
  3. напишите Views для визуализации указанных вами форм.
  4. наконец, вам нужно переопределить некоторые шаблоны администратора django и визуализировать ваши формы в шаблонах, которые расширяют некоторые стандартные шаблоны администратора django .

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

1 голос
/ 25 января 2012

Один простой способ добиться этого - создать множество ModelAdmin для одной и той же модели (по одному для каждой «группы»). Для этого вам нужно создать одну Proxy Models для каждой «группы», например:

models.py

class Item(models.Model):
    name = models.CharField(max_length=64, unique=True)
    description = models.CharField(max_length=128, default='')
    logo = ImageField(upload_to=/tmp, blank=True, null=True)

class ItemGroup1(Item):
    class Meta:
        proxy = True

admin.py

class ItemAdmin(models.ModelAdmin):
    ...

class ItemGroup1Admin(models.ModelAdmin):
    readonly_fields = ('logo', 'description')

И тогда вам просто нужно установить права группы 1, чтобы иметь доступ только к ItemGroup1 и т. Д.

См. Этот пост для получения дополнительной информации: Использование прокси-моделей для настройки администратора Django

0 голосов
/ 03 декабря 2013

Если вы хотите обрабатывать подобные вещи за пределами вашего сайта администратора, взгляните на django-logic-rules , где вы можете написать свои правила в python и получить к ним доступ из представлений или в шаблоне. ;

...