Как мне настроить CakePHP ACL, учитывая 3 уровня пользователей?

У меня есть такая настройка базы данных (я знаю, что это не лучшая настройка, но я не в силах ее изменить :-(

В основном есть 3 уровня пользователей - Администратор - Менеджеры - Персонал

Несколько замечаний: -Каждый сотрудник принадлежит к отделу -Если в таблице менеджеров отображается код входа в систему персонала, он является менеджером, в противном случае он является сотрудником -Если код входа в систему персонала отображается в таблице менеджеров, а для параметра SystemAdmin установлено значение 1, они администратор

Как мне настроить ACL/Auth для этого? Любые идеи?

CREATE TABLE tblStaff ( StaffID int(11) NOT NULL auto_increment, dept_id varchar(5) по умолчанию NULL, 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) unsigned default NULL, PRIMARY KEY (ManagerID) );

CREATE TABLE tblDepartment ( dept_id varchar(5) NOT NULL, sect_id varchar(50) по умолчанию NULL, subsect_id varchar(50) по умолчанию NULL, sect_name varchar(50) по умолчанию NULL, sect_abbr varchar(50) по умолчанию NULL, subsect_name varchar(50) по умолчанию NULL, ПЕРВИЧНЫЙ КЛЮЧ (dept_id) );


person Jenski    schedule 03.06.2009    source источник


Ответы (1)


Честно говоря, я не понимаю, почему tblStaff и tblManager должны быть разделены в вашем примере. Разве они не все "сотрудники" то есть "персонал" в некотором роде?

Почему нет:

создать таблицу tblUsers (UserID, logon_code, dept_id, SystemAdmin, имя, фамилия и т. д.)

Ведь независимо от того, будут ли они «сотрудниками» или «менеджерами», они будут «пользователями» вашего приложения.

Кроме того, если вам нужно больше их разделить, вы можете добавить еще одно поле (например, user_level_id), которое будет определять роль каждого пользователя. После этого Auth/ACL должны быть довольно простыми.

person dr Hannibal Lecter    schedule 04.06.2009
comment
Таблица tblManager необходима, потому что сотрудник может отвечать за более чем один отдел. Но полезно знать, что staffid и user_level_id должны быть где-то - person Jenski; 04.06.2009
comment
Это можно решить с помощью отношения HABTM между вашими tblUsers и tblDepartments, нет необходимости хранить две таблицы. Ключевое слово здесь — нормализация. - person dr Hannibal Lecter; 04.06.2009
comment
Теоретически не является ли tblManager таблицей ссылок в отношениях HABTM? 1 сотрудник может иметь 2 или более менеджеров 1 отдел может иметь 2 или более менеджеров Системные разрешения хранятся в таблице менеджеров, чтобы определить, к чему они могут/не могут иметь доступ - person Jenski; 04.06.2009
comment
На самом деле, это кажется очень хорошей идеей (если это то, что вам нужно), но вам понадобится много кода, когда дело дойдет до ACL позже. Если вам также необходимо определить ACL для сотрудников, проблема с ACL будет заключаться в том, что узел ACL не может иметь двух родителей, но в вашем случае один сотрудник может иметь двух менеджеров. Если это не так (т. е. вы определяете ACL только для менеджеров), то персонал принадлежит к отделам со многими менеджерами. - person dr Hannibal Lecter; 04.06.2009
comment
У меня есть отношения сотрудников, принадлежащих к отделам, имеет много менеджеров, как мне теперь связать ACL? Поскольку у меня нет групповой таблицы как таковой, но есть tblManagers с определенными разрешениями... - person Jenski; 09.06.2009