个人认为的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 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这种权限。
转载地址:http://segmentfault.com/q/1010000000602407

升级php7.2后,加密函数mcrypt_module_open()被废弃的解决方案。

方案1 直接输入 pecl install mcrypt-snapshot 此方案的好处是不用改代码 方案2 <?php class Encrypt{ //base64_encode(openssl_random_pseudo_bytes...

阅读全文

elasticsearch+kibana+filebeat+headPlugin配置参考

参考链接 filebat: https://www.elastic.co/cn/downloads/beats/filebeat https://www.elastic.co/cn/products/beats/filebeat Elastic Stack : https://www...

阅读全文

使用.env文件区分不同的线上环境数据库配置

有时候本地项目和线上项目需要不同的配置文件,这样就用到了.env文件。 1.首先在你的项目根文件夹下创建.env文件 并写入内容 DB_CONNECTION=mysql DB_HOST=12...

阅读全文

欢迎留言