2010-09-14 7 views
0

Actuellement, j'utilise Devise & CanCan qui me permet de créer Utilisateurs avec rôles en utilisant une table (Roles_Users).Rôles qui sont utilisateur <> Basé sur le projet

C'est bien, mais ce que je veux est d'avoir des projets dans mon application et pour chaque projet pour un utilisateur d'avoir peut-être un rôle comme (Admin, Viewer, etc.) IE, les rôles ne sont pas attribués aux utilisateurs mais utilisateurs en fonction de quels projets ils sont membres.

Exemples:

  • utilisateur X appartiennent au projet A avec un rôle d'administrateur
  • utilisateur X appartiennent au projet B avec un invité Rôle
  • utilisateur Y appartiennent au projet B avec un observateur Rôle

Quel type de modèle fonctionnerait pour cela?

modèles

Utilisateurs has_many: projets projets ? Rôles ?

Users_Roles_Projects (user_id, project_id, ROLE_ID)

Que pensez-vous? Je suis un débutant et pourrait utiliser la compréhension et en pensant à vous bien les gens expérimentés. Merci!

+0

Etes-vous en train d'essayer de vous faire une idée de ce à quoi devraient ressembler les modèles et les associations ou de voir comment les configurer dans CanCan ou les deux? –

+0

Les deux si possible :) – AnApprentice

Répondre

1

Vous devriez jeter un oeil à has_many: through. Ce Railscast devrait vous lever et courir: http://railscasts.com/episodes/47-two-many-to-many

Par exemple, vous pourriez avoir des projets has_many utilisateur par Membre (! Je suis sûr que vous pouvez trouver un meilleur nom)

Votre modèle utilisateur contiendrait la les détails de l'utilisateur standard, le modèle Projects contiendrait les détails du projet et probablement vous avez quelque modèle Roles quelque part (je n'ai utilisé aucune des bibliothèques que vous avez mentionnées, donc je ne peux pas commenter sur leur fonctionnement). La clé est le modèle d'adhésion.

Le modèle d'appartenance contiendrait l'ID utilisateur, l'ID projet et un ID rôle. Dans la base de données, il ne devrait y avoir qu'une seule instance d'une paire d'identificateurs userID et projectID donnée, donc en stockant le roleID à côté de cette association, vous pouvez assigner le rôle à cet utilisateur sur le projet spécifié.

+0

C'est génial. Connaissez-vous CanCan? Je suis curieux de savoir comment utiliser CanCan avec le modèle d'adhésion ci-dessus. Des idées? – AnApprentice

+0

Je n'ai jamais utilisé CanCan auparavant, mais avoir un coup d'œil rapide sur le Railscast ne me semble pas pouvoir l'utiliser. Pour autant que je sache, la méthode initialise ne prend qu'un utilisateur. Sans référence à un projet, je ne vois pas comment vous pouvez appliquer des autorisations spécifiques au projet. Bien sûr, je peux me tromper - mon expérience avec Cancan est ~ 15 minutes! :-) – Ash

Questions connexes