Système de gestion de droits complexe
Bonjour,
je ne sais pas si ce sujet à plus sa place ici ou sur le forum PHP Général. Merci de le déplacer si besoin.
Je travaille sur un projet, qui demande une gestion des droits très complexe. J'ai déjà développé de tels systèmes, mais jamais aussi complexe que celui que je dois faire actuellement.
Description :
Il s'agit d'un extranet, pour une association, que l'on va appeler A. A gère de nombreuses entités, que l'on va nommer B. Tous les B sont indépendants les uns des autres, leur seul point commun est d'être membre/client de A.
Les membres de chaque entité B sont classés en niveaux : Admin, membre, ancien membre.
Les membre de A sont classés en niveaux : Admin, membre. A est divisé en plusieurs pôles (Administration, Finances, Communication). Un membre de A peut cumuler les pôles, ou être à la fois Admin, et membre d'un pôle.
En se connectant sur l'extranet, les membres d'une entité B ont accès à la gestion de leur entité, et de leur compte perso. Et des droits différents sur l'ensemble des infos de leur entité, en fonction de leur niveau :
- Un admin aura des droits en lecture/écriture sur les informations de l'entité
- Un simple membre aura seulement les droits en lecture sur les informations de son entité.
- Un simple membre pour s'inscrire à des évènements
- Un admin pourra inscrire n'importe quel membre de son entité à un évènement, et pourra également valider les inscriptions des simples membres.
- Un ancien membre aura seulement les droits de lecture/écriture sur son profil perso.
- Un admin aura les droits en lecture/écriture sur l'ensemble des profils perso des membres de son entité.
Voilà en gros pour le fonctionnement du système, lorsque c'est un membre d'une entité B qui se connecte.
On en rajoute une couche :
chaque membre de A peut également se connecter sur l'interface. A la connexion, on lui demande si il souhaite se logger en tant que membre de A, ou bien en tant que B, et si il souhaite se logger en tant que B, il doit choisir sur quel B il souhaite se connecter. Il a alors les droits en lecture (et peut être en écriture), sur l'ensemble des données de l'entité B choisie.
Si il se connecte en tant que membre de A :
en fonction du groupe de persmissions auquel il appartient, il aura : aucun accès/accès en lecture/accès en lecture+écriture aux différents modules du système (gestion des évènements, gestion des audits, gestion des membres, gestion des visites qualité, etc). Si le membre a part exemple les droit en écriture sur le module Audits, il peut créer un nouvel audit, ou éditer un audit existant.
Important : un membre de A peut cumuler différents groupes de permissions. Dans le cas ou il appartient à 2 groupes dont les permissions sont en conflict, il prend les droits les plus permissifs de chaque groupe. Exemple : un membre appartient aux groupe 1 (lecture seule sur le module Audits, lecture/écriture sur le module Evènements), et au groupe 2 (lecture/écriture sur le module Audits, et lecture seule sur le module Evénements), il aura au final les droits suivants : Lecture/écriture sur Audits, lecture/écriture sur Evénements.
Voilà, j'espère avoir résumer le fonctionnement du système à mettre en place, sans avoir été trop compliqué.
Je suis preneur de tout conseil, toute proposition, pour mettre en place un tel système : scripts tout fait, ou desquels s'inspirer , architecture SQL à mettre en place, etc.
Merci d'avance