php实现RBAC
2016-03-04 14:42
691 查看
个人认为的PHP MVC框架中实现RBAC的原理 顺序:
数据表
实现原理
缺点
假如有一个模块, class Article,方法function lists();。
如果当前用户只有查看权限却没有修改、添加、删除权限,那么lists页面中关于 添加 修改 删除 按钮如何判断?
数据表
全选<button href="javascript:void(0);" _xhe_href="javascript:void(0);" class="copyCode btn btn-xs" data-clipboard-text="" 1.tb_user(userid,username,roleid)"="" data-toggle="tooltip" data-placement="top" title="" style="color: rgb(255, 255, 255); font-style: inherit; font-variant: inherit; font-stretch: inherit; line-height: 1.5; font-family: inherit; margin: 0px 0px 0px 5px; overflow: visible; cursor: pointer; vertical-align: middle; border: 1px solid transparent; white-space: nowrap; padding-right: 5px; padding-left: 5px; border-radius: 3px; -webkit-user-select: none; box-shadow: rgba(0, 0, 0, 0.2) 0px 1px 2px; background-image: none; background-color: rgba(0, 0, 0, 0.74902);">复制放进笔记
其中 permission 的值有这几种
RBAC实现流程
1.通过用户的 $userid 得到 $roleid
2.通过用户当前的网址去查询tb_module表中对应的link,得到 $moduleid。如果该module有父模块。那么获得他的父模块。比如当前模块MVC网址是 article/add,那么他的真正moduleid是
3.通过 $roleid 和 $moduleid 去查询 tb_permission,得到记录总和
4.如果当前访问 article/lst
对于第二种方法,说下看法,类似于电脑文件的 0777这种权限。
数据表
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页面中关于 添加 修改 删除 按钮如何判断?
另外一个方法
数据表全选<button href="javascript:void(0);" _xhe_href="javascript:void(0);" class="copyCode btn btn-xs" data-clipboard-text="" 1.tb_user(userid,username,roleid)"="" data-toggle="tooltip" data-placement="top" title="" style="color: rgb(255, 255, 255); font-style: inherit; font-variant: inherit; font-stretch: inherit; line-height: 1.5; font-family: inherit; margin: 0px 0px 0px 5px; overflow: visible; cursor: pointer; vertical-align: middle; border: 1px solid transparent; white-space: nowrap; padding-right: 5px; padding-left: 5px; border-radius: 3px; -webkit-user-select: none; box-shadow: rgba(0, 0, 0, 0.2) 0px 1px 2px; background-image: none; background-color: rgba(0, 0, 0, 0.74902);">复制放进笔记
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 from tb_module where id=( select upid from tb_module where link='article/add' )
3.通过 $roleid 和 $moduleid 去查询 tb_permission,得到记录总和
select sum(permission) as permission from tb_permission where roleid=$roleid and moduleid=$moduleid
4.如果当前访问 article/lst
switch($permission){ case 1: //只有访问权限 break; case 2://访问、添加权限 break; case 4://访问、添加、修改权限 break; case 8://访问、添加、修改、删除权限 break; case 16: break; }
对于第二种方法,说下看法,类似于电脑文件的 0777这种权限。
相关文章推荐
- PHP 命名空间加载的理解
- 关于PHP中filesize函数为何返回warning
- PHP跳转页面的几种实现方法详解
- 初学php之 href和Action,get和post的区别
- 搞不清FastCgi与PHP-fpm之间是个什么样的关系
- php生成utf-8文件
- 如何查看PHP已安装的扩展
- php中strtotime与mktime的Y2K38漏洞(时间最长为2038年)
- php设计模式 装饰器模式
- Zend Framework教程之模型Model用法简单实例
- 基于PHP实现等比压缩图片大小
- PHP学习手册 字符串(一)
- PHP文件夹管理类
- Zend Framework教程之模型Model基本规则和使用方法
- dotnetperls
- Zend Framework教程之Zend_Layout布局助手详解
- php反射类 ReflectionClass
- PHP进制转换[实现2、8、16、36、64进制至10进制相互转换]
- php代码编码问题
- installing ffmpeg