Question

Quelqu'un connaît-il de bonnes ressources liées à la configuration de systèmes de compte utilisateur hiérarchiques? J'en prépare actuellement un et je me bats avec certaines des logiques les plus complexes (en particulier pour déterminer les autorisations). J'espérais pouvoir trouver des ressources pour m'aider.

Quelques informations de base: Je construis un système de compte utilisateur pour un CMS Web qui permet une hiérarchie de groupe imbriquée. Chaque groupe peut se voir autoriser / refuser l’accès en lecture, en écriture, en ajout et en suppression (soit explicitement pour ce groupe, soit implicitement de l’un de ses parents). Comme si cela n’était pas assez compliqué, le système permet également aux utilisateurs d’être membres de plusieurs groupes. - C'est ici que je suis coincé. J'ai tout mis en place, mais j'ai du mal à comprendre la logique qui permet de déterminer les pemissions d'un utilisateur donné.

Était-ce utile?

La solution

Le manuel de CakePHP contient une excellente description du fonctionnement des listes de contrôle d'accès.

http: //book.cakephp .org / 2.0 / fr / core-libraries / components / access-control-lists.html

Autres conseils

Représente les autorisations définies pour un groupe donné sous forme de masque binaire. OU-lier les masques de bits ensemble vous donnera le jeu d'autorisations résultant.

Mise à jour pour @Alex:

J'ai écrit cette réponse il y a 3 ans, mais je pense faire allusion à ce qui suit ...

De la question

  

une hiérarchie de groupe imbriquée. L'accès à chaque groupe peut être autorisé / refusé   lire, écrire, ajouter et supprimer (soit explicitement pour ce groupe, soit   implicitement par l’un de ses parents). Comme si ce n'était pas compliqué   assez, le système permet également aux utilisateurs d’être membres de plusieurs   groupes. - C'est ici que je suis coincé. J'ai tout mis en place, mais   Je me bats avec la logique réelle pour déterminer les pemissions pour un   utilisateur donné.

Attribuez un masque binaire correspondant à l'ensemble des autorisations d'un groupe (ou rôle) dans le système:

par exemple. 00 (utiliser deux bits simplifie la procédure ici!)

Le premier bit confère la permission A et le second la permission B .

Disons maintenant que le groupe A confère le jeu d'autorisations suivant: 01 .

... et dites que le groupe B confère le jeu d'autorisations suivant: 10 .

Pour obtenir le jeu d'autorisations résultant pour un utilisateur dans un ensemble arbitraire de groupes, vous pouvez exécuter un OU logique sur les masques de bits du jeu d'autorisations:

Permission set for Group A   01
Permission set for Group B   10 OR 
                             ----
Resultant permission set     11 (i.e. both permission A and B are conferred)

Je ne connais pas les détails du système de l'interrogateur, mais le système décrit ici pourrait être amélioré pour obtenir différents comportements de composition de groupe à l'aide de différents opérateurs logiques.

Examinez les autorisations dans le système de fichiers Andrew . Il permet aux utilisateurs de créer et d’administrer leurs propres groupes, tout en attribuant de manière sélective des droits d’administrateur et des ACL. Vous constaterez peut-être que bon nombre des détails embêtants ont déjà été élaborés pour vous dans leur modèle.

Modifier: , voici un meilleur lien vers la documentation AFS:

http://www.cs.cmu.edu/~help /afs/index.html

Voici la section sur les groupes:

http://www.cs.cmu.edu/~help /afs/afs_groups.html

Je l'ai fait exactement auparavant et sa mise en œuvre n'est pas triviale. Vous allez vouloir regarder la classe SecurityPermission.

[ http: // msdn.microsoft.com/en-us/library/system.security.permissions.securitypermission.aspx][1]

Je l'ai déjà fait auparavant en utilisant XML (ce que je ne suis pas sûr de refaire) et en stockant ce XML sous forme de liste d'autorisations à l'intérieur du serveur SQL dans une colonne XML via un processus stocké CLR. Le XML aurait un élément appelé "autorisation". et alors la permission serait en réalité un ENUM à l'intérieur du code. Chaque autorisation était une nouvelle implémentation de la classe SecurityPermission (lien ci-dessus). Les utilisateurs étaient liés à des groupes définis dans SQL Server. Ensuite, lorsque l'utilisateur était ajouté / supprimé à des groupes, la doc XML était mise à jour pour refléter les groupes qui étaient séparés. de.

Dès que l'utilisateur sera connecté, ses informations d'identification seront chargées dans le magasin d'applications (session), puis accessibles en conséquence. Lorsque l'autorisation devait avoir lieu, le fichier XMl du magasin d'applications était chargé dans SecurityPermission via l'option "FromXML". méthode. À ce stade, j’utiliserais les méthodes suivantes pour déterminer si l’utilisateur avait la permission:

  • Demande
  • Intersection
  • Union
  • Est illimité
  • IsSubSetOf

etc., etc., etc.

À ce stade, après avoir effectué la demande, j'ai pu déterminer si l'appelant avait un accès en fonction de la manière dont j'ai implémenté mes routines de sécurité dans SecurityPermissions.

Encore une fois, cela laisse de côté une tonne de détails, mais cela devrait vous faire prendre le bon chemin.

Examinez également cet espace de noms: [2]: http://msdn.microsoft.com/en-us/library/system.security.permissions.aspx " quot "System.Security.Permissions"

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