Django Назначение группы «для каждого проекта» - PullRequest
2 голосов
/ 04 июня 2010

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

Итак, у меня может быть проект A: пользователь «Джон» в группе «менеджер», а пользователь проекта «B» «Джон» в группе «работник».

Как я могу использовать модель аутентификации пользователя Django для этого?

С точки зрения SQL, я хотел бы иметь возможность добавить "project_id" в первичный ключ для таблицы "auth_user_groups".

Я не думаю, что профиль здесь вам поможет. Любой совет ?

ОБНОВЛЕНИЕ: «работник» и «менеджер» - это всего лишь два примера группы разрешений (или «ролей»), которые определяет мое приложение. Там будет больше в будущем. Например, у меня, вероятно, также будет «admin», «report» и т. Д.

Ответы [ 2 ]

0 голосов
/ 04 июня 2010

Если вы можете жить без нее в своей модели User и можете иметь ассоциированную модель профиля пользователя, как насчет чего-то вроде:

from django.contrib.auth.models import User
from foo.models import Project

class UserProfile(models.Model):

  auth_user = models.ForeignKey('User')
  projects_where_manager   = models.ManyToManyField('Project', 
                                                     related_name="managers_for_project")
  projects_where_worker   = models.ManyToManyField('Project', 
                                                     related_name="workers_for_project")
0 голосов
/ 04 июня 2010

Если вы действительно нуждаетесь в этой информации в группах, я думаю, что лучшее решение состоит в том, чтобы выделить подклассы необходимых моделей и создать из этого свой собственный auth application / auth backend!

Я не знаю, нужно ли связывать проекты с группами, вы также можете создать профиль пользователя, который имеет отношение 1: 1 к пользователю и am: n к проектам, чтобы вы могли назначать проекты пользователю, а затем проверьте в своих приложениях, с какими проектами связан пользователь?

Третье решение, которое мне приходит на ум, - это модель с одним внешним ключом для проекта и другим для группы, которая также может работать для вас, но, вероятно, не имеет хорошего юзабилити!

Самый грязный способ, вероятно, состоит в том, чтобы добавить посторонний ключ в группу, используя monkey-patching (add_to_class), но я думаю, что это рекомендуется только в том случае, если вы не нашли другого способа спуска, и это как-то ваше последнее средство, но первый выбор!

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