Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果有3个级别的用户,如何设置CakePHP ACL?_Php_Cakephp_Installation_Acl - Fatal编程技术网

如果有3个级别的用户,如何设置CakePHP ACL?

如果有3个级别的用户,如何设置CakePHP ACL?,php,cakephp,installation,acl,Php,Cakephp,Installation,Acl,我有一个这样的数据库设置(我知道这不是最好的设置,但是 我无力改变它:-( 基本上有3个级别的用户 -管理员 -管理者 -职员 几点注意: -每个员工都属于该部门 -如果员工登录代码出现在经理表中,则他们是 经理,否则他们就是员工 -如果员工登录代码出现在manager表和SystemAdmin中 设置为1时,它们是管理员 我到底该如何设置ACL/Auth呢?有什么想法吗 创建表格tblStaff( StaffIDint(11)非空自动增量, dept\u idvarchar(5)默认为空, l

我有一个这样的数据库设置(我知道这不是最好的设置,但是 我无力改变它:-(

基本上有3个级别的用户 -管理员 -管理者 -职员

几点注意: -每个员工都属于该部门 -如果员工登录代码出现在经理表中,则他们是 经理,否则他们就是员工 -如果员工登录代码出现在manager表和SystemAdmin中 设置为1时,它们是管理员

我到底该如何设置ACL/Auth呢?有什么想法吗

创建表格
tblStaff
(
StaffID
int(11)非空自动增量,
dept\u id
varchar(5)默认为空,
logon\u code
char(10)不为空,
forename
char(50)不为空,
姓氏
字符(50)不为空, 主键(
StaffID
), ))

创建表格
tblManager
(
ManagerID
varchar(15)不为空,
logon\u code
varchar(15)不为空,
dept\u id
varchar(5)不为空,
SystemAdmin
tinyint(1)无符号默认为空, 主键(
ManagerID
) ))

创建表格
tblDepartment
(
dept\u id
varchar(5)不为空,
sect_id
varchar(50)默认为空,
subsect\u id
varchar(50)默认为空,
sect_name
varchar(50)默认为空,
sect_abbr
varchar(50)默认为空,
subsect\u name
varchar(50)默认为空, 主键(
部门id

)

老实说,我不明白为什么在你的例子中tblStaff和tblManager应该分开。他们不是都是“员工”吗?也就是说,在某种程度上都是“员工”

为什么不:

创建表tblUsers(用户id、登录代码、部门id、系统管理员、名字、姓氏等)

毕竟,不管他们是“员工”还是“经理”,他们都是应用程序的“用户”


此外,如果需要对这些字段进行更多分离,可以添加另一个字段(例如用户级别id)这将决定每个用户的角色。在这之后,Auth/ACL应该相当简单。

需要tblManager表,因为一名员工可以负责多个部门。但了解staffid和“用户级别”id确实有帮助需要通过tblUsers和tblDepartments之间的HABTM关系解决此问题,无需保留两个表。这里的关键字是规范化。理论上,tblManager不是HABTM关系中的链接表吗?一名员工可以有两个或多个经理一个部门可以存储两个或多个经理系统权限在Manager表上确定他们实际上可以/不能访问的内容,这似乎是一个非常好的主意(如果您需要的话),但在以后涉及ACL时,您将需要大量的编码。如果您还需要为员工定义ACL,ACL的问题将是一个ACL节点不能有两个父节点,但在您的情况下,一个员工可以有两个经理。如果不是这样(即,您仅为经理定义ACL),则“属于部门的员工拥有多个经理”应该是正确的设置。我有“属于部门的员工拥有多个经理”的关系,我现在如何链接ACL?因为我没有这样的组表,但是有特定权限的TBLManager。。。