您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 清远分类信息网,免费分类信息发布

PHP MVC中RBAC的最佳实现方案的比较

2024/4/4 5:56:51发布11次查看
个人认为的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_url3. 根据 $mvc_url 去表 tb_module中查询,得到 $moduleid4. 根据 $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 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_permissionwhere 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 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_url3. 根据 $mvc_url 去表 tb_module中查询,得到 $moduleid4. 根据 $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 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_permissionwhere 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这种权限。
比rbac更好的权限认证方式(auth类认证)
清远分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录