Многопользовательский вход в Django - лучший подход?

В настоящее время я разрабатываю сайт Django, на котором пользователи могут иметь несколько «учетных записей», чтобы они могли беспрепятственно переключаться между различными общедоступными профилями при взаимодействии с сайтом. То, что я разрабатываю, вероятно, привлечет несколько регистраций на человека (и не будет обескуражен), я просто хотел бы предложить это таким образом, чтобы пользователи могли связывать профили вместе, легко переключаться и должны только войти за один раз.

Два подхода, которые я придумал до сих пор, включают:

  • Одна пара (User модель + SiteProfile модель) и много PublicProfile моделей на человека. AUTH_PROFILE_MODULE указывает на модель SiteProfile. Проблема в том, что я не могу легко использовать разрешения для каждого объекта: они будут установлены для объекта User, а не для общедоступного профиля, поэтому разрешения на просмотр страницы для «PublicProfileA» также будут применяться, когда пользователь маскируется как "Общественный профильB".

  • Одна модель Account и много (модель User + модель UserProfile) пар на человека. AUTH_PROFILE_MODULE указывает на модель UserProfile. Это дало бы дополнительное преимущество в том, что разрешения работают, как предполагалось, и что я могу просто иметь пользовательский бэкэнд, который будет переключать пользователей, аутентифицируя пользователя, если они в настоящее время вошли в систему как другой пользователь, который имеет тот же объект Account, что и внешний ключ. . Однако аутентификация будет происходить путем чтения полей в объекте Account, что означает, что поле password в каждом объекте User будет потрачено впустую.

  • То же, что и выше, но с подклассом Account от User. Хотя мне настоятельно советовали против этого (по неясным причинам).

Есть ли подводные камни или лучшие подходы к этому? В конечном счете, должен ли я использовать встроенную модель User как модель «один на человека», которая идентифицирует группу общедоступных профилей (из которых эти профили имеют FK обратно к объекту User), или использовать ее как сам профиль, ссылаться на один объект Account для каждого человека?


person TC Fox    schedule 08.05.2012    source источник
comment
Интересный вопрос. Можете ли вы предоставить немного больше информации о том, что предлагают эти разные профили? например Если бы вы создавали сайт электронной коммерции, у ваших пользователей могли бы быть личные учетные записи и корпоративные учетные записи. Это повлияет, например, на политику скидок, количество/объем заказа и т. д. Эта информация поможет сделать более обоснованное предложение.   -  person rantanplan    schedule 08.05.2012
comment
Вау, извиняюсь, что так поздно! Это для социального сайта, одной из функций которого является элемент ролевой игры. Все учетные записи «равны» в отношении того, что у них не будет отдельных «типов», нет такой вещи, как корпоративная или личная учетная запись, просто «члены». Кроме того, в любом случае будут написаны пользовательские серверные части аутентификации, поскольку встроенный сервер аутентификации Django не соответствует моим потребностям. Надеюсь, это поможет!   -  person TC Fox    schedule 27.05.2012


Ответы (1)


Да, я думаю, что лучшим подходом было бы иметь одного и только одного пользователя на человека и несколько объектов PublicProfile, между которыми они могли бы «переключаться». Это дает им преимущество только одного имени пользователя/пароля и, кажется, имеет смысл с тем, как обычно работает аутентификация Django.

person Frank Wiles    schedule 08.05.2012