个人认为的php mvc框架中实现rbac的原理 顺序:
数据表
<code>1.tb_user(id,uname,roleid) 2.tb_role(roleid,rolename) 3.tb_module(moduleid,moudulename,mvc_url) 4.tb_access(accessid,roleid,mouduleid) </code>
实现原理
<code>1. 根据$uid 得到 $roleid。 2. 根据当前MVC参数 __CLASS__ __METHOD__ 拼接成路由网址 $mvc_url 3. 根据 $mvc_url 去表 tb_module中查询,得到 $moduleid 4. 根据 $roleid,$mouduleid 查询表 tb_access中是否有此条记录 5. 如果 有,可以访问;如果没有,禁止访问该动作 action 方法 </code>
缺点
假如有一个模块, class Article,方法function lists();。
如果当前用户只有查看权限却没有修改、添加、删除权限,那么lists页面中关于 添加 修改 删除 按钮如何判断?
数据表
<code>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) </code>
其中 permission 的值有这几种
立即学习“PHP免费学习笔记(深入)”;
<code>{1:查看,2:添加,4:修改,8:删除,16:...}
</code>RBAC实现流程
1.通过用户的 $userid 得到 $roleid
2.通过用户当前的网址去查询tb_module表中对应的link,得到 $moduleid。如果该module有父模块。那么获得他的父模块。比如当前模块MVC网址是 article/add,那么他的真正moduleid是
<code>select moduleid from tb_module
where id=(
select upid from tb_module where link='article/add'
)
</code>3.通过 $roleid 和 $moduleid 去查询 tb_permission,得到记录总和
<code>select sum(permission) as permission from tb_permission where roleid=$roleid and moduleid=$moduleid </code>
4.如果当前访问 article/lst
<code>switch($permission){
case 1: //只有访问权限
break;
case 2://访问、添加权限
break;
case 4://访问、添加、修改权限
break;
case 8://访问、添加、修改、删除权限
break;
case 16:
break;
}
</code>对于第二种方法,说下看法,类似于电脑文件的 0777这种权限。
个人认为的php mvc框架中实现rbac的原理 顺序:
数据表
<code>1.tb_user(id,uname,roleid) 2.tb_role(roleid,rolename) 3.tb_module(moduleid,moudulename,mvc_url) 4.tb_access(accessid,roleid,mouduleid) </code>
实现原理
<code>1. 根据$uid 得到 $roleid。 2. 根据当前MVC参数 __CLASS__ __METHOD__ 拼接成路由网址 $mvc_url 3. 根据 $mvc_url 去表 tb_module中查询,得到 $moduleid 4. 根据 $roleid,$mouduleid 查询表 tb_access中是否有此条记录 5. 如果 有,可以访问;如果没有,禁止访问该动作 action 方法 </code>
缺点
假如有一个模块, class Article,方法function lists();。
如果当前用户只有查看权限却没有修改、添加、删除权限,那么lists页面中关于 添加 修改 删除 按钮如何判断?
数据表
<code>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) </code>
其中 permission 的值有这几种
立即学习“PHP免费学习笔记(深入)”;
<code>{1:查看,2:添加,4:修改,8:删除,16:...}
</code>RBAC实现流程
1.通过用户的 $userid 得到 $roleid
2.通过用户当前的网址去查询tb_module表中对应的link,得到 $moduleid。如果该module有父模块。那么获得他的父模块。比如当前模块MVC网址是 article/add,那么他的真正moduleid是
<code>select moduleid from tb_module
where id=(
select upid from tb_module where link='article/add'
)
</code>3.通过 $roleid 和 $moduleid 去查询 tb_permission,得到记录总和
<code>select sum(permission) as permission from tb_permission where roleid=$roleid and moduleid=$moduleid </code>
4.如果当前访问 article/lst
<code>switch($permission){
case 1: //只有访问权限
break;
case 2://访问、添加权限
break;
case 4://访问、添加、修改权限
break;
case 8://访问、添加、修改、删除权限
break;
case 16:
break;
}
</code>对于第二种方法,说下看法,类似于电脑文件的 0777这种权限。
比RBAC更好的权限认证方式(Auth类认证)
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号