Администратор Django - ограничение доступа пользователем - PullRequest
4 голосов
/ 21 июня 2009

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

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

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

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

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

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

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

Ответы [ 3 ]

15 голосов
/ 21 июня 2009

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

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

[django.com]

0 голосов
/ 18 декабря 2015

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

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

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

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

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

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

0 голосов
/ 21 июня 2009

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

...