RBAC权限控制

RBAC权限控制

1、建表:用户表 角色表 权限表 根据关系分析出另外两张关系表 这是最基本的五张表 只要是RBAC一般都是五张表注:权限表的p_path字段代表的是父级权限id,可以这么说:当前记录的p_path就是父级记录的p_id

2、初始化好表数据,例如用户信息,角色信息,基本的权限信息

3、搭建tp框架,首先做登录(防非法登录,即存session的问题,引入第三方类判断session)

4、登录完成后可以获取到刚登陆的用户的id,根据用户id查询出对应的权限菜单,SQL如下:

select power.p_id,p_name,method,p_path from u_r inner join r_p on u_r.r_id=r_p.r_id inner join power on power.p_id=r_p.p_id where u_r.u_id=".登陆后的用户id

5、查询后的结果是一个无序的二维数组,此时需要调用递归函数,处理成有序的菜单,代码如下:

解释:$data为第四步sql返回的结果,$path代表从第一级开始找,$flage用来标志是第几级权限public function digui($data,$path=0,$flage=0){static $arr=array();foreach($data as $key=>$val){if($val['p_path']==$path){$val['flage']=$flage;$arr[]=$val;$this->digui($data,$val['p_id'],$flage+1);}}return $arr;}再将递归后的数组转换成一维数组,存入session//处理成一维数组放入session中for($i=0;$i

{$val.p_name}
{$val.p_name}

7、创建公共类,即为Common类,作用是继承Controller类,和Index类一样,非Index类继承Common类,这里边写上判断时候登录和是否有权限的代码:public function __construct(){parent::__construct();//获取当前URL请求的控制器名字$controller=CONTROLLER_NAME;//获取当前URL请求的方法名$action=ACTION_NAME;//取出session中的权限$power=session("power");//取出session中的登录姓名$name=session("name");if(!empty($name)){//判断请求的地址,是不是他的权限if(!in_array($controller."/".$action,$power)){$this->error("对不起,没有权限!");die;}}else{$this->success("请先登录!",U("Index/index"));die;}}8、自己手动再创建几个类,都要继承Common类,然后通过更改URL地址栏来测试,权限控制是否成功!

8.简单的子查询:select DISTINCT quan.* from quan where quan_id in(select quan_id from
r_q where role_id in(select role_id from u_r where user_id=$user_id))";

9、根据要求,继续完成你的业务   思想很重要

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值