Джанго: Полностью настраиваемый вопрос об авторизации. Пожалуйста помоги - PullRequest
1 голос
/ 18 февраля 2010

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

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

1 Ответ

3 голосов
/ 18 февраля 2010

Вам определенно следует использовать систему аутентификации 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% доверенных пользователей, таких как системные администраторы и персонал внутренней поддержки.

...