PHP 角色权限控制

所有的web都是通过资源、css、描述语句、js等展现的一个页面、按钮、链接等等,而这些页面、按钮、链接、只有通过触发才可以进行激活,所以可以看待为是一个面向对象的程序、这个按钮底部实现的逻辑可以是后端、前端来实现、如何控制前端、后端逻辑需要控制模型。常用的控制权限有两种模型可以用:RBAC、AUTH。前者在百度百科上有完整的模型概念,后者是没有的。我也在网络上搜索了一下AUTH,看到有人博客写AUTH2.0,我觉得如果你不理解概念,那就不要去写。容易误导一些没有概念的人,然后这些人又很有理的说给下一个人,久而久之错误的概念会像瘟疫一样散播。搜索AUTH除了看到OAUTH2.0,其余的没有看到。而AUTH和OAUTH2.0是两种完全不同的东西,如果你想了解OAUTH2.0,可以查看rfc6749

概念

RBAC:用于角色权限访问控制,基于判断节点。

AUTH:用于角色权限访问控制,基于规则判断节点。

它们的粒度是一致的,不同的是对节点的判断方式。

例子

例如:有一个类(class)类里有一个函数(function)。现在要限制用户A能够访问到function。建表如下

用户表

idnamenum
1用户A20
节点表

idnode

2class/function
关联表

iduser_idnode_idnode_rule
112num>10

RBAC 判断:首先获取用户A的id为1,然后查找关联表user_id为1的node_id,最后通过node_id来获取到node,获取到的node就是用户A能够访问的节点。有些节点你没有写进节点表,那就代表是公共的,可以随意使用的,所以判断的时候要判断当前节点是否在节点表里,如果不在,就没有必要判断节点了。

AUTH判断:首先获取用户A的num,然后查找关联表node_rule的规则,发现如果num>10则可以获取到node_id为2。最后通过node_id去获取节点表。一样的要判断公共的节点。

上述描述少了一个角色组和角色的分类描述,这些都无关紧要。

如何实现前端控制

MVC结构如果你了解过这种结构的实现方式的话,每一个V层的实现都是需要一个模板引擎的,就像smarty。更重要的是PHP支持HTML混编。要怎么实现一个自己的模板引擎 ?下面其实是一个正常的html。

<!DOCTYPE html>
    <html>
        <head>
            <title></title>
        </head>
        <body>
            {$echo}
        </body>
    </html>

在body节点有一个很特殊的“代码”{$echo},为什么有的模板标签非要有花括号,或者中括号,或者其它的开始结束标签,实际只有一个目的,方便正则替换。原理:读取html文件,php正则提取所有的模板标签,替换模板标签里的语句,或者变量。这也就是为什么有缓存这个模板概念,因为替换完以后是需要输出或者保存后再输出的。有了上述的概念以后,那么前端控制就比较容易了,TP或者微擎都支持自定义模板标签函数,完全可以自己定义一个函数,函数里读取用户的ID,然后获取当前的URL,通过判断当前的URL与你的节点库里的URL进行对比返回一个布尔值来确定是否展示,或者是否可触发即可。


PHP 角色权限控制


本站如无特别说明即为原创,转而告知:(https://www.iwonmo.com/archives/1583.html)

标签: 权限控制, 角色控制

添加新评论