Как ограничить доступ к определенным строкам в Django

Я использую Django Admin Tool и у меня очень простая модель. Я хочу ограничить доступ к определенному паролю для конкретного пользователя или конкретной группы. Как я могу сделать 3 условия для доступа "Да / Нет / Никогда" и когда у пользователя есть Да + его группа Нет, тогда он получает доступ, но когда Да + Никогда, то нет. И как я могу заставить его работать с системой разрешений django-admin-tools.

from django.db import models
from passwords.objects.labels.models import Label

class Password(models.Model):
    class Meta:
        db_table = 'passwords'

    name = models.CharField(max_length=32)
    username = models.CharField(max_length=32)
    password = models.CharField(max_length=32)
    labels = models.ManyToManyField(Label)

    def __unicode__(self):
        return self.name

2 ответа

Из коробки django поддерживает только разрешения уровня класса (иными словами, разрешения для таблицы).

Существует поддержка разрешений на уровне объектов (на уровне строк), но django не поставляется с ней, реализованной "из коробки":

Разрешения на уровне объекта

Была добавлена ​​основа для указания разрешений на уровне объекта. Несмотря на то, что в ядре нет реализации этого, пользовательский бэкэнд аутентификации может обеспечить эту реализацию, и она будет использоваться django.contrib.auth.models.User. Посмотрите документы аутентификации для получения дополнительной информации.

Следовательно, есть сторонние приложения, такие как django-guardian, которые включают эту функцию.

Поскольку вы работаете с администратором, вы можете переопределить has_add_permission, has_change_permission а также has_delete_permission методы на ModelAdmin, Но я не могу помочь вам в дальнейшем, не зная, как ваши полномочия "Да / Нет / Никогда" прикреплены к пользователю / группе.

ОБНОВИТЬ

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

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

Другие вопросы по тегам