Bonjour,
Je tente de réaliser un système de permissions avancé pour mon portail.
Je suis un peu bloqué sur la structure à adopter.
J'ai créé mon portail à partir de la formation "La POO en PHP".
Toutes les pages de mon portail nécessitent que les utilisateurs soient authentifiés.
Du coup j'utilise la class "DBAuth" pour tous les controlleurs :
AppController.php :
class AppController extends Controller
{
public function __construct()
{
$app = App::getInstance();
$auth= new DBAuth($app->getDb());
if(!$auth->logged())
{
$this->forbidden();
}
}
}
Et dans le constructeur de mes controlleurs :
public function __construct()
{
parent::__construct();
}
Jusque là tout se passe bien.
Tout se compléxifie à partir d'ici. Chaque utilisateur dispose de trois paramètres qui déterminent ce qu'il a le droit de faire / voir sur le portail :
-
De quel bureau il fait partie :
-
bureau administratif
-
bureau cadre
-
bureau maîtrise 1
-
bureau maîtrise 2
-
etc.
-
De quel équipe il fait partie :
-
équipe de nuit
-
équipe préventive
-
équipe curative
-
équipe d'intervention
-
etc.
-
La qualification de l'utilisateur :
-
cadre
-
agent de maîtrise
-
technicien
-
etc.
J'ai créé un table SQL qui contient les différentes combinaisons de droits :
- table : useraccess
- id
- group_name
- desk
- team
- qualification
Lorsque l'utilisateur se connecte les informations desk + team + qualification sont placées dans la session "Auth".
Je ne veux pas créer une "administration" pour les actions que peuvent effectuer uniquement certains utilisateurs, je souhaite que des boutons ainsi que les menus s'adaptent directement aux possibilités de chaque utilisateur.
Pour être plus clair, voici un exemple :
J'ai deux tables :
- chantier
- chantier_rapport
La table chantier contient le nom de tous les chantiers.
La table chantier_rapport contient le contenu de chaque intervention sur un chantier.
Les différentes pages de mon portail pour le controller "chantier" sont :
- voir la liste des chantiers
- ajouter un chantier
- modifier un chantier
- supprimer un chantier
- voir les interventions sur un chantier
- ajouter une intervention pour chantier
- modifier une intervention pour un chantier
- supprimer une intervention d'un chantier
Pour chacune de ces pages les permissions sont différentes.
Par exemple pour les pages :
- voir la liste les chantiers : accés pour (desk : CADRE / MAIT1 / MAIT2 --- team : NUIT / CURA / INTER --- qualification : CADRE / MAIT / TECH)
- ajouter un chantier : accés pour (desk : CADRE / MAIT1 / MAIT2 --- team : NUIT / CURA / INTER --- qualification : MAIT)
Je suis preneur des différentes solutions que je peux envisager pour développer ce système de permission.
J'étais parti pour créer une table qui contient toutes les restrictions pour chaque méthode d'un controlleur mais au final c'est imbitable.