2010-07-21 6 views
2

Il existe de nombreux plugins d'autorisation basés sur les rôles. Ils fonctionnent bien quand vous savez à l'avance quels seront les rôles. Par exemple, si je sais que je vais avoir des administrateurs, super_users et not_so_super_users.Rails Plugin d'autorisation dynamique basé sur les rôles?

Ce que je veux vraiment, c'est pouvoir créer des rôles personnalisés et attribuer ce rôle à un utilisateur. À ce stade, je souhaite simplement bloquer l'accès aux contrôleurs/actions en fonction du rôle personnalisé d'un utilisateur. Les rôles seront constitués d'autorisations. Par exemple, Jane Doe peut ajouter et afficher des widgets, mais elle ne peut pas les supprimer ni les modifier. John Doe peut ajouter, afficher et modifier. Le Boss peut ajouter, afficher, modifier et supprimer. Je veux être en mesure de vérifier si l'utilisateur est autorisé à accéder à un contrôleur/action en une ligne:

user.is_authorized? 

is_authorized (ou quoi que ce soit appelé) doit être suffisamment intelligent pour déterminer si l'utilisateur est autorisé basé sur leur rôle assigné et l'ensemble d'autorisations de ce rôle.

Ai-je un sens? Y at-il quelque chose là-bas qui fait cela?

+0

Et si vous utilisiez user.is_authorized_to? (: Add, @widget) .... de cette façon, cette méthode pourrait vérifier en fonction des règles que vous définissez. Tout est personnalisé, mais semble lisible –

+0

J'aime vraiment la syntaxe de cela, mais vous devez connaître les mots-clés pour votre premier paramètre (probablement un par opération CRUD). Je veux appliquer cette logique à n'importe quelle action, y compris les actions qui interagissent avec zéro ou plusieurs modèles différents. Dans le contrôleur, vous pouvez utiliser before_filter pour vérifier si user.is_authorized? et rediriger si nécessaire. est autorisé? pourrait éventuellement vérifier par rapport à une liste d'itinéraires que l'utilisateur est en mesure d'accéder. Juste un brainstorming ici ... Ce que je cherche vraiment, c'est une autorisation de routage basée sur le rôle, pas une autorisation de modèle basée sur le rôle –

+0

Pas sûr qu'il y ait beaucoup de logique qui justifierait un plugin. Vous devez faire correspondre chaque action du contrôleur à un rôle d'une façon ou d'une autre, c'est là que se trouve la viande. – aceofspades

Répondre

0

Veuillez essayer le plugin acl9 pour l'application basée sur les rôles.

acl9

+0

Cela ressemble à un plugin décent, mais pas tout à fait ce que je cherche. Je suis à la recherche de quelque chose d'un peu plus simple et aussi qui pourrait facilement avoir des configurations d'affichage afin que l'utilisateur puisse créer et assigner des rôles. –

0

J'utiliser declarative_authorization et simplement créer des rôles multiples pour chaque fonction.

Vous avez donc un rôle spécifique à modifier, mettre à jour, créer, détruire un widget (4 rôles différents). Ensuite, il suffit d'associer l'utilisateur à plusieurs rôles pour éviter de réimplémenter la roue.

0

Peut-être essayer canard https://rubygems.org/gems/canard il utilise toute l'autorisation dynamique de cancan et y ajoute des rôles. Je l'ai écrit spécifiquement pour résoudre ce problème.

Questions connexes