美文网首页PHP
PHP MVC中RBAC的最佳实现方案

PHP MVC中RBAC的最佳实现方案

作者: 风的飘渺 | 来源:发表于2017-03-12 23:05 被阅读281次

个人认为的PHP MVC框架中实现RBAC的原理 顺序:

数据表

1.tb_user(id,uname,roleid)

2.tb_role(roleid,rolename)

3.tb_module(moduleid,moudulename,mvc_url)

4.tb_access(accessid,roleid,mouduleid)

实现原理

1.根据$uid得到$roleid。

2.根据当前MVC参数__CLASS____METHOD__拼接成路由网址$mvc_url

3.根据$mvc_url去表 tb_module中查询,得到$moduleid

4.根据$roleid,$mouduleid查询表 tb_access中是否有此条记录

5.如果 有,可以访问;如果没有,禁止访问该动作 action 方法

缺点

假如有一个模块, class Article,方法function lists();。

如果当前用户只有查看权限却没有修改、添加、删除权限,那么lists页面中关于 添加 修改 删除 按钮如何判断?

另外一个方法

数据表

1.tb_user(userid,username,roleid)

2.tb_role(roleid,rolename)

3.tb_module(moduleid,moudulename,link,upid)

4.tb_permission(roleid,title,mouduleid,permission)

其中 permission 的值有这几种

{1:查看,2:添加,4:修改,8:删除,16:...}

RBAC实现流程

1.通过用户的 $userid 得到 $roleid

2.通过用户当前的网址去查询tb_module表中对应的link,得到 $moduleid。

如果该module有父模块。那么获得他的父模块。

比如当前模块MVC网址是 article/add,那么他的真正moduleid是

select   moduleid   fromtb_module   where    id=(select   upid   fromtb_module    where     link='article/add');

3.通过 $roleid 和 $moduleid 去查询 tb_permission,得到记录总和

select  sum(permission)  as  permission   fromtb_permission   where    roleid=$roleid   and   moduleid=$moduleid

4.如果当前访问 article/lst

switch($permission)

{case1://只有访问权限break;

case2://访问、添加权限break;

case4://访问、添加、修改权限break;

case8://访问、添加、修改、删除权限break;

case16:break;}

对于第二种方法,说下看法,类似于电脑文件的 0777这种权限。

相关文章

网友评论

    本文标题:PHP MVC中RBAC的最佳实现方案

    本文链接:https://www.haomeiwen.com/subject/dwwxnttx.html