Django: использование django.contrib.auth для SAAS (пользователи, разрешения и т. Д.) - PullRequest
2 голосов
/ 19 февраля 2010

Я делаю SAAS и задаю множество вопросов, связанных со встроенной системой Auth. У меня возникают проблемы с пониманием «почему» и «как». Прежде всего, я не понимаю, как это вписывается в мой SAAS.

Я (знаю) знаю следующее:

  1. Вы можете сделать это: http://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users
  2. Есть много причин использовать встроенную систему аутентификации (например, безопасность) вместо того, чтобы использовать собственную

Я (не) знаю следующее:

class MyUserProfile(models.Model):
    """
    Administrator for an Account. Can edit tickets and other stuff.
    """
    user = AutoOneToOneField(User, primary_key=True)
    account = models.ForeignKey(Account)
    dogs_name = models.CharField(max_length=255)

В предыдущем примере account - это то, что вы ожидаете; организация, которая платит за использование моего программного обеспечения. user моя главная забота. Кто-то заходит на страницу и создает UserProfile с именем пользователя и паролем и т. Д. Когда они это делают, где создается соответствующий пользователь? Нужно ли создавать его в моем представлении вручную на основе request.POST ['username'] и т. Д., А затем выполнить

myuserprof = MyUserProfile.create(user=foo_user_just_created, account=foo_account, dogs_name='Spot')

Не знаю почему, но по какой-то причине я чувствую, что что-то упустил. Идея состоит в том, чтобы попросить кого-нибудь зарегистрировать учетную запись, а затем создать MyUserProfile с формой, запрашивающей пароль, имя пользователя, адрес электронной почты и т. Д., А затем, на мой взгляд, создать 2 разных объекта (MyUserProfile и User) с разными частями. данных формы. Я имею в виду, я не должен иметь форму пользователя, верно? Как я уже сказал, я чувствую, что либо пропускаю шаг, либо я ошибаюсь в парадигме. Я не новичок в Django, но по какой-то причине у меня проблемы с вещами, которые я не создавал (я думаю, что в настоящий момент это может быть психическая проблема).

Может быть, есть хороший пример того, как это делается в каком-то проекте с открытым исходным кодом.

Обновление: Ой, забыл упомянуть, что в приведенном выше коде я пытался использовать AutoOneToOneField из django-раздражает, но я понятия не имею, где установлены все атрибуты пользователя или как решить, какой объект пользователя присоединить к нему. Этот материал сводит меня с ума.

Кроме того, нужно ли мне использовать приложение sites для этого, и, наконец, у «супер пользователя» есть все права на все (я не хочу, чтобы люди из учетной записи «Acme» имели доступ к учетной записи «Microshaft» " объекты)? Или они просто имеют все разрешения для всех видов?

1 Ответ

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

Кто-то заходит на страницу и создает UserProfile с именем пользователя и паролем и т. Д.

UserProfile не имеет поля имени пользователя или пароля. Так что должно быть кто-то заходит на страницу и создает User. Затем он создает UserProfile, связанный с этим вновь созданным User.

Вопрос в том, как и когда вы хотите создать этот UserProfile экземпляр?

  1. Автоматически, при создании нового User: используйте сигналы, как описано в документации
  2. Автоматически при каждом доступе к профилю из пользовательского экземпляра: используйте AutoOneToOneField и получите доступ к профилю, используя user.userprofile вместо user.get_profile()
  3. вручную. Но не забывайте, что пользователь может не иметь связанных UserProfile, поэтому user.get_profile() может вызвать исключение DoesNotExist.

Когда они это делают, где создается соответствующий пользователь?

Это не так. Вы должны создать его явно.

Это идея попросить кого-нибудь зарегистрировать учетную запись, а затем создать MyUserProfile с формой, которая запрашивает пароль, имя пользователя, адрес электронной почты и т. Д., А затем, на мой взгляд, создать 2 различных объекта (MyUserProfile и User) с различными частями данных формы. Я имею в виду, что у меня не должно быть формы пользователя, верно?

Почему бы и нет? Вы хотите здесь создать User и связанный с ним профиль за один раз, верно? В конечном итоге вы можете напрямую использовать данные POST или Form для доступа к полям или, что еще лучше, использовать 2 ModelForm (один для User, один для UserProfile), который вы будете обрабатывать в та же точка зрения (может быть этот вопрос может помочь?)

Может быть, есть хороший пример того, как это делается в каком-то проекте с открытым исходным кодом.

Предлагаю вам проверить django-регистрацию и django-profile .

Примечание

У вас есть другой способ добавить информацию к объекту User, расширяя модель. Это позволит вам поместить ваши дополнительные поля непосредственно в пользовательскую модель и, возможно, будет проще для понимания и использования.

Я не буду вдаваться в подробности, посмотрите этот учебник для получения дополнительной информации.

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

Я пытался использовать AutoOneToOneField из django-раздражает, но я не знаю, где установлены все атрибуты пользователя или как решить, какой объект пользователя присоединить к нему. Этот материал сводит меня с ума

Смотрите выше о том, как его использовать. Если вы чувствуете себя некомфортно, лучше всего следовать документации , в которой рекомендуется использовать ForeignKey с unique=True в профилях пользователей.

Кроме того, нужно ли мне использовать приложение сайтов для этого

Из документов Framework сайта : Используйте его, если ваша одиночная установка Django использует более одного сайта, и вам нужно как-то различать эти сайты.

и, наконец, имеет ли «суперпользователь» все разрешения на все (я не хочу, чтобы люди из учетной записи «Акме» имели доступ к объектам «Микрошафт»)?

Опять же, из документов , Обозначает, что у этого пользователя есть все разрешения без явного присвоения им . Это означает, что везде, где Django использует встроенную систему разрешений (например, страницы администрирования по умолчанию), суперпользователь будет авторизован.

В представлениях вы пишете сами, или если вы настроите немного ModelAdmin, вам решать, как вы собираетесь проверять разрешения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...