個人認為的PHP MVC框架中實現(xiàn)RBAC的原理 順序:
數(shù)據(jù)表
1.tb_user(id,uname,roleid)
2.tb_role(roleid,rolename)
3.tb_module(moduleid,moudulename,mvc_url)
4.tb_access(accessid,roleid,mouduleid)
實現(xiàn)原理
1.根據(jù)$uid得到$roleid喂窟。
2.根據(jù)當前MVC參數(shù)__CLASS____METHOD__拼接成路由網址$mvc_url
3.根據(jù)$mvc_url去表 tb_module中查詢磨澡,得到$moduleid
4.根據(jù)$roleid,$mouduleid查詢表 tb_access中是否有此條記錄
5.如果 有,可以訪問稳摄;如果沒有,禁止訪問該動作 action 方法
缺點
假如有一個模塊尉共, class Article,方法function lists();弃锐。
如果當前用戶只有查看權限卻沒有修改、添加剧蚣、刪除權限旋廷,那么lists頁面中關于 添加 修改 刪除 按鈕如何判斷?
另外一個方法
數(shù)據(jù)表
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實現(xiàn)流程
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這種權限。