【发布时间】:2013-02-25 08:37:33
【问题描述】:
我目前正在为多个用户构建一个应用程序,并且已经进入了用户权限部分。
该应用程序包含大约 20 个子菜单项,应根据用户权限授予/拒绝每个用户访问每个子菜单项。
这意味着用户 A 可以访问子菜单 1、4 和 21,用户 B 可以访问子菜单 2、3、9、11、20 等
这意味着不可能将每个组合都变成用户角色,所以我考虑了一个简单的解决方案。
我的第一个想法是将访问级别保存到一个字符串中。
这样,我可以在每个子菜单的字符串中使用一个字符索引来测试。
虽然这可能有效,但我会说它会很快变得混乱,所以我的问题是。
解决此问题的最佳方法是什么?我正在寻找无需数据库上一百万个新表的可维护且直观的东西。
提前致谢!
【问题讨论】:
-
您可以将十六进制与 OR 操作混合使用。结果将是权限字符串。一旦你需要添加另一个权限,你只需添加另一个十进制就可以了。你必须构建像这样的十六进制 0x1000000, 0x2000000, 0x4000000, 0x8000000
-
在你得到像字符串索引这样低级之前......逻辑是什么?!真的是一对一的个人用户到项目的权限级别吗?那么一个合适的多对多关系数据库表可能就是答案。
-
你在寻找某种ACL吗?
-
axel - 不知道该怎么做,只需将十六进制保存在数据库中并根据用户请求检查它们? deceze - 如果我理解正确,是的,用户权限是个人的,范围从无到每个用户的所有复杂857 - 这样做的传统方式的问题,我必须为每一个可能的选项创建一个角色,这将太多了
-
是的,例如
const PERMISSION_1 = 0x1000000; const PERMISSION_2 = 0x2000000;const PERMISSION_3 = 0x4000000;/ 然后你用 OR 操作符$sPermissionUser = PERMISSION_1 | PERMISSION_2;保存用户的权限 / 然后你检查用户是否有权限if($sPermissionUser & PERMISSION_2)
标签: php privileges