PHP复杂的基于角色的访问控制列表

我已经制作了实现这个自定义ACL系统所需的数据库PHP代码.现在我必须’授权’当前用户,这就是我需要你的建议的地方.

该系统基于对系统用户和系统模块的灵活权限分配.它还有一些预定义的,比如用户组,也可以制作完全自定义的组.全局规则也可以应用于ACL之上,但它的优先级低于分配了权限的组或用户.

更好地描绘它:

预定义组:

>有限(无法访问)
>基本用户
>高级用户
>管理员
>访客(定制组的样本)

以下是访问级别(名称/值对):

>不允许/ 0
>允许/ 1
>拒绝/ 2
>如果拥有者/ 3允许

注意:’允许’在’禁止’上具有更高的优先级,因此如果您在组A上有用户X’禁止’,但在某个访问中有B组’允许’,那么他最终会’允许’.另一方面,如果用户X通过成为“管理员”组的成员而具有“完全访问权限”,但如果他只是在某个访问权限上“拒绝”,则他最后没有访问权限,这意味着“拒绝”优先于’允许’.

在顶层你可能有类似这样的东西:

>“Administrator”*“1”,表示管理员对系统具有完全访问权限
>“访客”*“0”,表示访客不得进行任何操作

我的问题是如何处理这类检查?想象一下,我们有一个简单的授权机制.我们在$_SESSION [‘user’]中会有一些索引,比如$_SESSION [‘user’] [‘login’] = true;和$_SESSION [‘user’] [‘id’] = $row [‘user_id’],对吗?

现在,如果你想在你的脚本上实现这个机制,你将如何做到这一点?

我可能会首先检查全局访问规则.然后我会查看用户是否已登录.如果是,只需获取所有组,然后查看权限表以查看为其组分配了哪些权限及其用户ID,然后将其存储在用户会话中.然后,当模块说这是我需要运行的权限时,我会查看用户是否有足够的权限访问所请求的模块.

看起来很复杂!任何帮助或建议都非常感谢!

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...