Джанго:Полностью индивидуальный вопрос авторизации.Пожалуйста помоги

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

Вопрос

Я создаю многопользовательское приложение, которое не будет использовать стандартный администратор Django (за исключением внутреннего использования, которое будет иметь доступ ко всем арендаторам...это достаточно просто).Я пытаюсь создать собственную систему авторизации, и меня не интересует использование стандартной модели пользователя (или модели любого встроенного приложения).В моем приложении будут учетные записи, и у каждой учетной записи будут администраторы (пришлось использовать «Администратор против пользователя» в целях конфликта имен).Эти пользователи будут проходить аутентификацию с использованием моей собственной, полностью настраиваемой системы.Это все неправильно?Должен/могу ли я по-прежнему использовать систему аутентификации Django в ситуации с несколькими арендаторами, в которой используется мой собственный пользовательский интерфейс (как упоминалось ранее, я не позволю владельцам учетных записей использовать интерфейс администратора по умолчанию).Есть ли последствия для безопасности при использовании моей собственной системы или меня защищают стандартные элементы безопасности Django, такие как предотвращение перехвата сеанса?

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

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

Решение

Вам определенно следует использовать систему аутентификации Django, она по-прежнему делает 90% того, что вам нужно.

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

Вот структура модели, которую я использовал:

class Account(models.Model): # represents copporate customer
    admin = models.ForeignKey(User)
    # other fields ...

class UserProfile(models.Model):
    user = models.ForeignKey(User)
    account = models.ForeignKey(Account)

И несколько примеров обеспечения требований авторизации на уровне представления с помощью пользовательских декораторов:

@account_access_required # request.user.get_profile().account == account
def account_page(request, account_id):
    # ...

@account_admin_required # request.user == account.admin
def account_users(request, account_id):
    # ...

На самом деле мы использовали поддомены для учетных записей, поэтому не было необходимости в явном account_id параметр.

Очень разумно использовать собственный интерфейс для администраторов учетной записи.Интерфейс администратора Django предназначен только для пользователей со 100% доверенностью, таких как системные администраторы и сотрудники внутренней службы поддержки.

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