Администратор Django — ограничение доступа пользователя

StackOverflow https://stackoverflow.com/questions/1022635

  •  06-07-2019
  •  | 
  •  

Вопрос

Мне было интересно, можно ли использовать страницу администратора django для внешних пользователей.

Допустим, у меня есть следующие модели:

class Publisher(models.Model):
  admin_user = models.ForeignKey(Admin.User)
  ..

class Publication(models.Model):
  publisher = models.ForeignKey(Publisher)
  ..

Я не совсем уверен, что это будет за admin_user — возможно, это может быть адрес электронной почты пользователя-администратора?

В любом случае.Есть ли способ разрешить пользователю-администратору добавлять/редактировать/удалять только публикации, издатель которых связан с этим пользователем-администратором?

-Спасибо!-Крис

Это было полезно?

Решение

Если вам нужны более детальные разрешения в ваших собственных приложениях, следует отметить, что административное приложение Django поддерживает это с помощью следующих методов, которые можно переопределить в подклассах ModelAdmin.Обратите внимание, что все эти методы получают текущий объект HttpRequest в качестве аргумента, что позволяет выполнять настройку в зависимости от конкретного аутентифицированного пользователя:

  • queryset(self, request): Должен возвращать QuerySet для использования в списке объектов модели администратора.Объекты, отсутствующие в этом QuerySet, отображаться не будут.
  • has_add_permission(self, request): Должен возвращать True, если добавление объекта разрешено, в противном случае — False.
  • has_change_permission(self, request, obj=None): Должен возвращать True, если редактирование объекта разрешено, в противном случае — False.Если obj имеет значение None, должен возвращать True или False, чтобы указать, разрешено ли вообще редактирование объектов этого типа (например, если False будет интерпретироваться как означающее, что текущему пользователю не разрешено редактировать какой-либо объект этого типа).
  • has_delete_permission(self, request, obj=None): Должен возвращать True, если удаление объекта разрешено, в противном случае — False.Если obj имеет значение None, должен возвращать True или False, чтобы указать, разрешено ли вообще удаление объектов этого типа (например, если False будет интерпретироваться как означающее, что текущему пользователю не разрешено удалять какой-либо объект этого типа).

[django.com]

Другие советы

Администратор django может быть в определенной степени ограничен.Для данного пользователя, во-первых, он должен иметь права администратора, чтобы войти на сайт администратора.Любой, у кого установлен этот флаг, может просматривать все страницы администратора.Если вы хотите ограничить просмотр, вам не повезло, потому что это просто не реализовано.Отсюда у каждого пользователя есть множество разрешений на создание, обновление и удаление для каждой модели на сайте администрирования.Самый удобный способ решить эту проблему — создать группы и затем назначить им разрешения.

Я вижу, что ответ Криса был полезен в тот момент, когда был задан вопрос.Но сейчас почти 2016 год, и я думаю, что включить ограниченный доступ к Django Admin panel конечному пользователю.

Система аутентификации Django обеспечивает:

Группы:Общий способ применения меток и разрешений для нескольких пользователей.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top