【问题标题】:php - very granulated user privilegesphp - 非常细化的用户权限
【发布时间】: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


【解决方案1】:

我可能在这里遗漏了要点,但是,不能每个子菜单都有一个 ID,然后在 ID 和用户 ID 之间有一个连接表来确定访问权限,您可以和另一个列到该连接表的访问级别(阅读 -仅限、编辑、管理等)。

根据所需的性能,您可以在第一次访问请求后为用户缓存该响应,或者您可以在每个子菜单请求中查找它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 2018-04-07
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多