Question

Quel est le meilleur schéma de base de données pour suivre les contrôles d'accès basés sur les rôles pour une application Web?

J'utilise Rails, mais le plug-in RBAC lié par Google n'a pas l'air d'être maintenu (seulement 300 commits sur SVN; le dernier en date remonte à presque un an).

Le concept est assez simple à mettre en œuvre à partir de zéro, mais complexe et suffisamment important pour que cela vaille la peine d'être réalisé.

Alors, comment les autres architectes et implémentent-ils leur modèle RBAC?

Était-ce utile?

La solution

Selon mes connaissances assez élémentaires dans ce domaine, les acteurs de base d’un CCR sont:

  • Ressources.
  • Autorisations.
  • utilisateurs.
  • Rôles (groupes).

Ressources < - require - > ( un ou plusieurs ) Autorisations .

Les rôles < - sont des collections de - > ( un ou plusieurs ) Autorisations .

Les utilisateurs < - peuvent avoir - > ( un ou plusieurs ) Rôles .

Les tables pour un tel modèle seraient:

  • permission
  • rôle
  • utilisateur
  • role_permission
  • rôle utilisateur

Maintenant, vous pouvez également inclure des ressources si vous souhaitez que les utilisateurs de votre application puissent configurer les autorisations nécessaires à une ressource. Mais je n'ai jamais eu besoin de ça. J'espère que ça aide.

Autres conseils

Voici un diagramme simple pour illustrer l'excellente réponse d'Amr Mostafa

.

entrer la description de l'image ici

Je travaille sur le sous-système RBAC ici au travail à leur moment ... quelle coïncidence.

Mon modèle est basé sur les blocs de construction des différentes entités du système nécessitant des autorisations, qu'il s'agisse d'attributs à afficher / mettre à jour ou d'actions à effectuer. Il existe également, bien sûr, différents rôles dans le système (qui peuvent être attribués aux utilisateurs), et le lien qui unit l'ensemble est la règle d'accès , qui connecte un rôle spécifique, une entité nécessitant une autorisation spécifique et l'autorisation accordée. Une règle d'accès pourrait ressembler à ceci:

rule 14: guest role + page name + read permission
rule 46: approver role + add column + execute permission

et ainsi de suite. Je laisserai la DRE comme un exercice au lecteur ;-) si vous avez des questions, laissez un commentaire.

Yuval = 8 -)

Vous pouvez utiliser le plug-in Restful ACL Rails .

Je pense que la réponse à votre question va aussi loin que vous le souhaitez. Si vous envisagez de placer des rôles dans des groupes puis d'associer des groupes à des utilisateurs, cela ne suffit pas. Vous devrez éventuellement donner des autorisations spécifiques à un utilisateur sur un objet spécifique (un forum, une vidéo, etc.).

Je suis plus proche de la réponse de Yuval, tout ce dont nous avons besoin est d’associer objets + actions + utilisateurs à l’échelle du projet. Pour fournir ceci; un objet de base (Entity) est parfaitement logique. Tout objet héritant de Entity peut facilement être associé à une action utilisateur + de cette façon.

Comme vous souhaitez également garder les choses simples; Ma suggestion serait:

  • Tout objet en raison de restrictions rbac doit provenir d'une entité de base.
  • Il devrait y avoir une liste de rôles, qui sont en relation directe avec une entité.
  • Il devrait exister une liste de relations entre les utilisateurs et les rôles.

Pour aller un peu plus loin, je recommanderais également ce qui suit (pour un rbac automatisé)

  • J'utilise un accès basé sur le service à mes objets. C'est; Je crée des répertoires d’objets (qui me servent d’accès à la base de données) et j’accède aux référentiels via des fonctions de service.
  • J'utilise un attribut personnalisé au début de chaque fonction de service. Ceci définit le rôle requis pour accéder à cette fonction.
  • J'utilise le paramètre User pour accéder à toutes mes fonctions de service. Chaque fonction de service effectue une vérification de rôle avant de s'exécuter. La réflexion m'aide à comprendre quelle fonction j'appelle et quel type de rôle elle a (via des attributs personnalisés)
  • J'exécute également un initialiseur au démarrage de mon application. Cette dernière vérifie toutes les fonctions (et leurs attributs) et vérifie si j'ai ajouté un nouveau rôle requis. S'il y a un rôle que je viens d'ajouter et qui ne semble pas être sur la base de données, il le crée sur la base de données.

Mais hélas, cela n'est disponible que pour .NET, pour autant que je sache, Java n'a pas d'attributs personnalisés, de sorte qu'il n'est pas encore disponible pour Java.

J'aimerais proposer des exemples de code, mais je suis trop paresseux pour le faire. Toujours si vous avez des questions sur ma façon de rbac; vous pouvez demander ici et je vous répondrai sûrement.

Exigence de rôle fonctionne très bien avec l'authentification reposante pour fournir des fonctions d'authentification basées sur les rôles et est bien entretenu.

Pour les applications .net, consultez Visual Guard http: //www.visual-guard. fr / pour éviter de devoir gérer les autorisations et les rôles à partir de zéro.

Également pour .net, vous avez les membres et les fournisseurs de rôles et les autorisations gérés avec la configuration. http://www.odetocode.com/Articles/427.aspx

Essayez https://github.com/ThoughtWorksStudios/piece , c'est un moteur de règles pour vous. gérer le contrôle d'accès basé sur les rôles d'utilisateur:

  1. Définir les règles de contrôle d'accès
  2. Combinez des règles pour construire de nouvelles règles

Vous trouverez un exemple complet de l'application Rails ici: https://github.com/xli/piece-blog

Introduction à RBAC -

Le système de contrôle d'accès basé sur les rôles est une méthode permettant de restreindre l'accès à "certaines sources ou applications ou à certaines fonctionnalités des applications" en fonction des rôles des utilisateurs de l'organisation.

Ici, les restrictions peuvent être définies au moyen de plusieurs autorisations. Celles-ci sont créées par l'administrateur pour limiter l'accès. Ces autorisations représentent collectivement un rôle qui sera attribué à l'utilisateur.

Et si nous allons un peu plus loin dans RBAC, il contient essentiellement 3 fonctionnalités.

1) Authentification - Confirme l'identité de l'utilisateur. Cela se fait généralement via des comptes d'utilisateurs, des mots de passe ou des informations d'identification.

2) Autorisation: définit ce que l'utilisateur peut faire et ne peut pas faire dans une application. Ex. & # 8216; Modification de l'ordre & # 8217; est autorisée mais & # 8216; création d'un nouvel ordre & # 8217; n'est pas autorisé.

3) Audit des actions de l'utilisateur sur les applications. - Il garde la trace des actions des utilisateurs sur les applications, ainsi que des utilisateurs et des utilisateurs autorisés.

C’était une photo très basique de la vue de dessus du système RBAC.

La structure de base du système RBAC peut contenir les composants suivants: Utilisateurs, rôles, autorisations ou restrictions, ressources.

  • Autorisations ou restrictions & # 8211; les autorisations représentent un accès à La ressource de l'application & # 8217; s.
  • Rôle & # 8211; Il contient une collection d'autorisations
  • utilisateur & # 8211; Un ou plusieurs rôles attribués à l'utilisateur, donc finalement utilisateur contient des autorisations via le rôle.

En plus de cela, vous pouvez également avoir une collection d'utilisateurs & # 8211; appelé & # 8211; Vous pouvez affecter des groupes et des rôles à des groupes si vous souhaitez prendre en charge des scénarios complexes. C’était donc des informations très basiques sur la structure du RBAC.

J'aime beaucoup ce billet de blog: https: // content. pivotal.io/blog/access-control-permissions-in-rails

EDIT:

Il semble que ryanb de la diffusion sur rail ait pensé dans le même sens et créé un joyau appelé cancan https: // github. com / ryanb / cancan en utilisant une technique de base similaire à la publication pivotollabs.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top