2009-06-03 20 views
0

J'ai une configuration de base de données comme celui-ci (je sais que ce nest pas la meilleure configuration, mais son de mon pouvoir de changer :-(Comment configurer CakePHP ACL pour 3 niveaux d'utilisateurs?

Fondamentalement, il existe 3 niveaux d'utilisateurs - Admin - Gestionnaires - Personnel

Quelques notes: membre du personnel -Chaque appartient au département -si le logon_code états-majors apparaît dans le tableau de gestion qu'ils sont un gestionnaire, sinon ils sont un membre du personnel les états-majors logon_code -Si apparaît dans le gestionnaire table et SystemAdmin est se t à 1, ils sont Admin

Comment diable puis-je régler ACL/Auth pour cela? Des idées?

CREATE TABLE tblStaff ( StaffID int (11) auto_increment NOT NULL, dept_id varchar (5) NULL par défaut, logon_code char (10) NOT NULL, forename char (50) NOT NULL, surname char (50) NOT NULL, PRIMARY KEY (StaffID), );

CREATE TABLE tblManager ( ManagerID varchar (15) NOT NULL, logon_code varchar (15) NOT NULL, dept_id varchar (5) NOT NULL, SystemAdmin tinyint (1) NULL par défaut non signé, PRIMARY KEY (ManagerID );

CREATE TABLE tblDepartment ( dept_id varchar (5) NOT NULL, sect_id varchar (50) NULL par défaut, subsect_id varchar (50) NULL par défaut, sect_name varchar (50) NULL par défaut, sect_abbr varchar (50) par défaut NULL, subsect_name varchar (50) par défaut NULL, PRIMARY KEY (dept_id) );

Répondre

1

Honnêtement, je ne vois pas pourquoi tblStaff et tblManager doivent être séparés dans votre exemple. Ne sont-ils pas tous des «employés», c'est-à-dire des «employés» d'une manière ou d'une autre?

Pourquoi ne pas:

créer tblUsers de table (UserID, logon_code, dept_id, SystemAdmin, nom, prénom, etc.)

Après tout, indépendamment du fait qu'ils seront "personnel" ou "gestionnaire", ils sera "utilisateurs" de votre application. En outre, si vous avez besoin de plus de séparation, vous pouvez ajouter un autre champ (tel que user_level_id) qui déterminera le rôle de chaque utilisateur. Après cela, Auth/ACL devrait être assez simple.

+0

La table tblManager est nécessaire car il est possible qu'un membre du personnel soit en charge de plus d'un département. Mais cela aide à savoir que staffid et un "user_level_id" doivent être quelque part – Jenski

+0

Cela peut être résolu par une relation HABTM entre vos tblUsers et tblDepartments, pas besoin de garder deux tables. Le mot clé ici est la normalisation. –

+0

En théorie, le tblManager n'est-il pas la table de liens dans la relation HABTM? 1 Le membre du personnel peut avoir 2 ou plusieurs directeurs 1 département peut avoir 2 ou plusieurs gestionnaires Autorisations système stockées sur la table des gestionnaires pour déterminer à quoi ils peuvent/ne peuvent pas accéder – Jenski