Mysql 权限系统的最有效/最简单的方法?

Mysql 权限系统的最有效/最简单的方法?,mysql,database-design,bit-manipulation,cakephp-2.3,Mysql,Database Design,Bit Manipulation,Cakephp 2.3,我正在使用CakePHP创建一个应用程序,在尝试为该应用程序建立权限系统时遇到了心理障碍。我已经把范围缩小到了两种不同的方法,我正在寻找一些关于a)最容易实现和b)最有效的方法的信息(显然这两种方法之间可能存在权衡) 该应用程序有许多不同的模型,但为了简化,我将只使用用户、部门和事件。我希望能够单独控制每个模型上每个用户的CRUD权限 蛋糕ACL 虽然没有很好的文档记录,但我对ACL系统的工作原理有些了解,并考虑按如下方式创建ARO: [1]user create read

我正在使用CakePHP创建一个应用程序,在尝试为该应用程序建立权限系统时遇到了心理障碍。我已经把范围缩小到了两种不同的方法,我正在寻找一些关于a)最容易实现和b)最有效的方法的信息(显然这两种方法之间可能存在权衡)

该应用程序有许多不同的模型,但为了简化,我将只使用用户、部门和事件。我希望能够单独控制每个模型上每个用户的CRUD权限

蛋糕ACL 虽然没有很好的文档记录,但我对ACL系统的工作原理有些了解,并考虑按如下方式创建ARO:

[1]user
    create
    read
    update
    delete
[2]department
    ...
等等。这需要用户在许多不同的组中,从我所看到的,Cake不容易支持这一点。有没有更好的方法可以做到这一点,或者ACL不适合这种情况

数据库中的权限标志 这一个非常简单,显然在用户的记录中有一个标记 <代码> CuraTyPux<代码>,<代码> Read用户> /COD>等。使用4-5个模型,这意味着许可的16-20个字段,这使得我考虑使用位掩码或使用联合表。其中一个比另一个好吗?哪一个更快,开销更少


总的来说,我想我真的很想知道从开发效率和易用性的角度来看,什么方法在应用程序的规模上最有意义。如果你有过去项目的经验,我也愿意接受其他建议。提前谢谢

这通常是我设置权限的方式-您有可以执行的
操作
角色
可以执行那些
操作
和拥有
角色
用户。我在这里举的例子是基于您的要求,尽管我认为您会发现很少有用户除了“创建新用户记录”或“更新部门记录”之外什么都做不了

要确定用户是否具有特定权限,可以执行如下查询:

SELECT COUNT( roles_actions.id )
FROM users
LEFT JOIN users_roles ON users.id = users_roles.user_id
LEFT JOIN roles_actions ON users_roles.role_id = roles_actions.role_id
WHERE roles_actions.action_id = '<action.id>'
选择计数(角色\u actions.id)
来自用户
左加入用户\u用户上的角色。id=用户\u角色。用户\u id
左连接角色\u用户上的操作\u角色.role\u id=角色\u操作.role\u id
其中角色\u actions.action\u id=“”

谢谢,这很有道理。如果我理解正确,我必须为每种可能的组合指定一个角色?我同意你所说的,用户很少有“创建”或“删除”权限。我很难创建硬“组”,但如果我考虑一下应用程序的实际使用方式,我可以将其简化一些。在用户有多个角色的情况下,这也适用吗?@Jason-您的业务规则将决定您需要什么角色,是的,每个用户可以根据需要拥有任意多个角色。
SELECT COUNT( roles_actions.id )
FROM users
LEFT JOIN users_roles ON users.id = users_roles.user_id
LEFT JOIN roles_actions ON users_roles.role_id = roles_actions.role_id
WHERE roles_actions.action_id = '<action.id>'