Как ограничить доступ к определенным строкам в 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
любой другой пользователь не будет иметь таких разрешений и поэтому даже не увидит его в админе.