精华内容
下载资源
问答
  • tp5权限控制.rar

    2021-08-11 11:59:45
    tp5权限控制Auth,里面包含项目和SQL,拿去直接可以使用
  • tp5权限管理Demo

    2019-04-11 22:47:51
    tp5权限管理Demo, 权限控制的比较细腻,包含每个控制器的增删改查,还对应博文的讲解
  • TP5 RBAC权限控制

    千次阅读 2018-09-11 08:03:12
    *给组授权(给角色分配权限) *@param $id:组id */ public function privilege($id) { $group = AuthGroupModel::get($id);//根据组id获取组的相关信息 if(request()->...

    我自己的目录
    这里写图片描述

    这是权限所用到的表
    这里写图片描述
    其中base_auth_rule为权限表,bage_auth_group为分组表,为分组设置权限之后生成新表auth_group_rule
    这里写图片描述
    这里写图片描述
    这里写图片描述

     /**
        *给组授权(给角色分配权限)
        *@param $id:组id
        */
        public function privilege($id)
        {
    
            $group = AuthGroupModel::get($id);//根据组id获取组的相关信息
    
            if(request()->isGet()){
    
                $rules = AuthRuleModel::select();//获取所有的权限
    
                //读取相应的组权限
                $rulesCheck = AuthGroupRuleModel::where(['group_id'=>$id])->column('rule_id');
    
                return $this->fetch('privilege',[
    
                    'group' => $group->getData(),
    
                    'rules' => $rules,
    
                    'rulesCheck' => $rulesCheck,
    
                ]);
            }elseif(request()->isPost()){
    
                $rules = input('rules/a',[]);//获取相应的权限
            #修改权限
                $rulesCheck = AuthGroupRuleModel::where(['group_id'=>$id])->column('rule_id');//获取相应的组权限
    
                $deletes = array_diff($rulesCheck,$rules);//得到原来相应的组权限
    
                $inserts = array_diff($rules,$rulesCheck);//生成新的相对应的组权限
    
                AuthGroupRuleModel::where(['group_id'=>$id,'rule_id'=>['in',$deletes]])->delete();
    
                //删除原来相对应得权限
                $authrule = new AuthGroupRuleModel();//实例化角色权限表模型
    
                $row = [];//定义一个空的数组
    
                foreach($inserts as $rule_id){
    
                    $row[] = ['group_id'=>$id,'rule_id'=>$rule_id,];
                }
    
                $authrule->saveall($row);
    
                $this->redirect('index');
            }
    
        }
    
    

    在给组设置完权限之后,我们要对用户进行权限设置,首先我们要把用户分组,分组之后,我们对组所设置的权限就是用户的权限
    所用的到表位以下三个,其中bage_auth_admin为用户表,bage_auth_group组表,bage_auth_group_admin为设置权限之后的表
    此表位bage_auth_admin
    此表为组表
    这里写图片描述

    /**
        *对用户进行分组(权限分配)
        *
        *@param
        *
        */
        public function privilege($id)
        {
    
           $group = AdminModel::get($id);
    
           if(request()->isGet()){
    
                $rules = AuthGroupModel::select();
    
                $rulesCheck = AuthGroupAdminModel::where(['admin_id'=>$id])->column('group_id');
    
                return $this->fetch('privilege',[
    
                    'group' => $group->getData(),
    
                    'rules' => $rules,
    
                    'rulesCheck' => $rulesCheck,
                ]);
    
           }elseif(request()->isPost()){
    
                $rules = input('rules/a',[]);  //获取相应的权限
    
        /*---------------------修改分组-------------------------------------------*/
    
                $rulesCheck = AuthGroupAdminModel::where(['admin_id' => $id])->column('group_id');//获取相应的分组
    
                $deletes = array_diff($rulesCheck,$rules); //原来分组
    
                $inserts = array_diff($rules,$rulesCheck);  //新分组
    
                /*删除原来的分组*/
                AuthGroupAdminModel::where(['admin_id' => $id,'group_id' => ['in',$deletes]])->delete();
     
                $authrule = new AuthGroupAdminModel();//实例化用户角色表模型
    
                $row = [];
    
                foreach($inserts as $group_id){
    
                    $row[] = ['admin_id' => $id,'group_id' => $group_id];
    
                }
    
                $authrule -> saveall($row);
    
                $this->redirect('index');
           }
            
        }
    

    设置完成之后,我们可以查看用户所拥有的权限
    在查看用户权限时,我们需要进行连表查询,查询用户所拥有的权限,下图为试验sql
    试验sql
    执行这个sql之后,返回的结果:
    返回结果

    **此段代码是控制器中的方法,在控制其中调用extend目录中的auth类**
     //查看权限
        public function ShowAcc($id){
    
            $id = input('id');
    
            $auth = new Auth();
    
            $re = $auth->getUserRules($id);
    
            return $this->fetch('access',['re'=>$re]);
        }
    
    **此段代码是tp5框架中extend目录下的代码**
    <?php
    
    namespace auth;
    
    use think\Db;
    class Auth{
    
    	public function getUserRules($id)
    	{
    
    		//查看用户的权限
    		$data=Db::table('bage_auth_group_admin')
    
            ->alias('a')
    
            ->join('bage_auth_group_rule g','a.group_id = g.group_id')
    
            ->join('bage_auth_rule r','g.rule_id = r.id')
    
            ->where(['a.admin_id' => $id])
            
            ->select();
    
            return $data;
            
    	}
    	
    }
    

    此时我们可以看到权限
    这张图则是用户所拥有的权限

    展开全文
  • tp5权限管理系统,含数据库,权限分组,权限管理,添加修改权限,排序,分配权限
  • 基于开发框架ThinkPHP5写的权限控制网站demo。规则表(think_auth_rule) 用户组表(think_auth_group) 用户组明显表(think_auth_group_access) 我们在规则表中定义权限规则, 在用户组表中定义每个用户组有哪些...
  • tp3.2.3权限控制一之详解及demo

    千次阅读 2018-02-25 16:23:03
    一、首先需明确TP3.2.3的权限控制是怎么实现的 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说...

    一、首先需明确TP3.2.3的权限控制是怎么实现的

          RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有多个角色,每一个角色拥有多个权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。

    这部分大家可以百度一下TP的RBAC,会有很多专业的说明,我这边就不一一陈述了。

    二、基本步骤

    1、用户登录,此时获取用户的id,以及所属的权限组
    2、查询用户此时权限组对应的控制器以及方法。并且把查询结果拿出来。
    3、用户登录之后,我们根据用户对应的权限组中的方法,只显示用户拥有权限的列表部分。无权限的模块不显示。
    4、在用户每访问一个方法的时候,我们就判断此时,用户对应的权限组有没有该方法,没有的话就提示用户无权限。(需要用公用控制器,类似于Base这种)
    5、由以上可知。做权限控制,也需要做权限管理,用户管理等模块。
    

    三、准备工作

    1、首先是找到TP给出的权限方法

    在ThinkPHP/Library/Think/Auth.class.php,打开即可
    这里写图片描述

          这个地方是需要我们自己配置的。首先是开启权限控制。其次是选择实时验证的方式,用户每点击一个方法,我们都验证一下。然后根据注释再配置对应的表。

    2、数据库新建四个表
    1)如图
    这里写图片描述

    2)admin也就是我们的用户表,即管理员表

    3)用户组表
    这里写图片描述

          这里对应的就是后台的人员分类。具体的参考自己的逻辑来进行分类。status=1代表是可用的状态。 rules里面的数字代表这个用户组对应的权限id,也就是控制器方法的id

    4)用户组合用户的映射表
    这里写图片描述

          这里主要是用户和对应用户组之间的关系。当我们新增管理员的时候,需要选择该管理员对应的用户组,相当于给他分配一个权限范围

    5)权限规则表
    这里写图片描述

          这个表就需要我们把每个控制,以及控制器上面对应的方法写出来。name字段对应的格式就是“控制器-方法名称”。

    title代表方法名称。
    status代表该方法是否可用
    direct_jump代表该方法是否可跳转
    sort代表该方法对应的优先度。排序时候用的。
    condition,这个字段不为0就代表该方法可验证
    

    四、具体代码

    1、用户登录,登录之后记得存储一个用户id

      session('adminId', $arr['id']);

    2、BaseController是每个控制器都要继承的一个方法,目的是判断用户是否登录,没登录的就跳到登录页,登陆成功的就开始进行权限验证

    class BaseController extends Controller{
      public function _initialize()
      {
        session_start();
        $adminId     = session('adminId');         // 管理员用户id
        if(!isset($adminId))
        {
          $this->success("您还没有登录",__APP__.'/Login/login');
          exit;
        }else{
          R('Public/auth', array($adminId));
        }
      }
    }

    这里使用了tp自带的R方法来访问我们的权限控制部分的代码。R方法可以直接访问控制器中的具体方法,并且可以带参数。

    具体的R方法,请参考这个链接

    3、登录之后,访问我们的public控制器下的auth方法。把用户id传过去

    下面是auth部分的代码

     public function auth($adminId) {
        $auth        =  new \Think\Auth();
    
        // 普通用户得到权限列表
        $getAuthList = $auth->getAuthList($adminId, 1);
    
        if ( empty($getAuthList) ) {
          session(null);
          $this->error('你的账号没任何操作权限!', U('Login/login'));
        }
    
        session('authList', $getAuthList);
    
        if ( !$auth->check(CONTROLLER_NAME.'-'.ACTION_NAME , $adminId) ) {
    
          // 无访问权限的时候才跳转
          $white = in_array(CONTROLLER_NAME.'-'.ACTION_NAME, array(
            'Login-login','Index-index'
          ));
    
          $preJumpUrl = session('preJumpUrl');
    //             if(session('adminId')==1) return true;
          if ( $white || empty($preJumpUrl) ) {
            // 找出可直接跳转的权限地址
            $canJumpList = M('smj_auth_rule')->where(array('direct_jump'=>'1'))->order('sort DESC')->getField('name', true);
            foreach ($getAuthList as $value) {
              foreach ( $canJumpList as $jumpValue ) {
                if ( strtolower($value) == strtolower($jumpValue) ) {
                  $url = str_replace('-', '/', $jumpValue);
                  session('preJumpUrl', $url);
                  header('LOCATION:' . U($url));
                  exit();
                }
              }
            }
          } else {
            header("Content-type:text/html;charset=utf-8");
            exit('你没有足够的权限访问该地址!<a href="' . U($preJumpUrl) . '">跳转到可访问页面</a>');
          }
        }
      }

    这部分的主要意思就是:
    1)获取传过来的用户id
    2)根据TP自带的Auth.class.php中的方法,获取用户对应的权限信息
    3)判断是可用方法之后,读取规则表中的控制器方法,并且替换成标准的,可跳转的”控制器/方法”形式。
    4)进行跳转
    5)一些表名需要替换成你自己的表名。用户无权限部分的代码可以自己美化一下,我这边是很简单的。

          以上就是TP3.2.3的权限控制部分代码。以上代码可以实现简单的权限控制,但是要知道,权限控制是环环相扣的,我们需要做的还有给用户添加权限,修改权限等。具体的请看下篇。

    权限管理第二篇传送门

    end

    展开全文
  • TP5权限管理笔记(RBAC)

    千次阅读 2019-09-19 15:53:35
    权限管理之前自己写的比较简单,都是用123代替,然后页面的html判断角色是什么数字,然后决定显示还是隐藏元素,当然效果是有了,但是如果...首先还是先建5张表,我们后面主要是从数据获取权限范围判断是否有访问权; 我...

    说明一下:
    登录模块不在权限管理之内,也就是说登录模块是单独的模块。打开登录页面不需要验证权限。当用户登录后台后跳转后台首页,这时候需要把用户的信息存到session或者cookie里面。进入后台之后你点击的每一个页面或者每一个操作都是访问某个方法。
    说白了用户权限控制就是验证当前用户有没有当前访问的模块,控制器,以及方法的权利的验证,如果有打开页面,如果没权限提示没权限。
    权限验证可以建立BaseController写构造函数验证,也可以使用路由中间件验证,原理都一样,不过是一个把验证方法写在base类一个把验证方法写在中间件里面而已。

    权限管理之前自己写的比较简单,都是用123代替,然后页面的html判断角色是什么数字,然后决定显示还是隐藏元素,当然效果是有了,但是如果用户打开浏览器开发环境,把display:none去掉,所有功能都显示出来,这就尴尬了,所以,这次abrc模式改写了一下,既保留了元素的隐藏显示,又不用担心去掉display:none;

    首先还是先建5张表,我们后面主要是从数据获取权限范围判断是否有访问权;
    在这里插入图片描述
    我英语比较烂,所以表名起的都比较随意,勿吐槽!

    我是用TP5写的,所以只讲tp5下的情况

    表建好后,表的关联请看上图,完成添加权限,添加角色,添加管理员的功能,我们默认已经写好了
    在这里插入图片描述
    我的控制器有一个base.php用于其他控制器继承,在base里写一个权限判断的函数,(权限表一定要写清楚模块名,控制器名,方法名,我们就是用 这些名字判断的)
    在这里插入图片描述
    用常量保存当前模块,控制器,方法的名字,然后根据session里管理员的id和前面保存的模块,控制器,方法名做条件,到数据库查询,我是用count查询,如果返回1就是找到了,如果返回0就是false,就会输出没有访问权限,要判断一下超级管理员,我是用id为1判断的,直接拥有全部权限,但是后面关于菜单和功能按钮隐藏显示的时候需要判断下角色权限名,建议还给1添加一个超级管理员的角色,把所有的功能都打上,最后还判断了一下,让用户都可以进入首页,

    这个函数放到base的初始化函数里执行,其他控制器都继承了base,所以进入每个页面都会执行
    在这里插入图片描述
    现在添加一个普通管理员,只有商品权限,没有品牌管理和分类管理权限,
    在这里插入图片描述
    把普通管理员分配给当前的账号,然后刷新后,品牌管理和分类管理还在,但是点击品牌的模块已经限制访问了
    在这里插入图片描述
    在这里插入图片描述
    没有权限的,直接让它隐藏掉,接下来我们在base里两个函数,一个判断控制名,用来显示或隐藏菜单栏,一个判断方法名,隐藏,显示功能按钮
    在这里插入图片描述
    我用的方法比较笨,写了好多代码,我自己都觉得量大了,以后多写几次就好了,第一次就是这样,最重要实现功能

    现在再在base里面写两个数组,一个控制器的,把所有控制名都写进去,一个方法的,把所有的方法名也写进去,
    在这里插入图片描述
    然后在各个控制器的进入首页的方法中把上面的方法和数组渲染到页面,menu和controller是判断菜单栏显示的,btn和action是判断页面的功能按钮的
    在这里插入图片描述
    用管理员页面菜单为例,箭头最上面标的是大菜单,截取controllers下面的3个小菜单返回的新数组(控制器名)与menus数组(开通的权限的控制器)做对比,然后获取返回数组的长度,如果大于0,就显示,等于0,就是小菜单的模块权限都没有开,就隐藏

    箭头2,3,4就是直接拿controllers里面的对应的菜单的名字看下是不是在menus中,如果有就显示小菜单,没有就隐藏
    在这里插入图片描述
    大菜单就是一级菜单,小菜单就是展开后的二级菜单,也是各个控制器模块的入口
    在这里插入图片描述
    前面没有隐藏品牌菜单栏和分类栏现在已经隐藏了,就剩下开启权限的商品管理(产品管理),如果产品权限也关掉,一级菜单产品管理也会同时隐藏,只有二级菜单有显示它才会有
    在这里插入图片描述
    最后是页面的功能按钮,用每个功能按钮的名字判断是否在权限的方法名字数组里 a c t i o n [ 对 应 的 方 法 名 ] 和 action[对应的方法名]和 action[]btns做比较,方法和上面菜单栏是一样的

    在这里插入图片描述
    用户tom的分类管理没有开通添加,编辑和删除,只开启状态改变,所以只有一个按钮
    在这里插入图片描述
    管理员admin拥有所有权限,所以添加和编辑删除都在
    在这里插入图片描述

    展开全文
  • 主要讲了rbac数据表的设计 以及tp6对角色权限管理用户的管理 实现对菜单栏以及页面按钮权限的动态显示隐藏
  • &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...上篇记录了一下权限控制部分...第一篇文章传送门:tp3.2.3权限控制详解一 一、用户管理,以及权限管理部分 1、管理员管理 这部分是比较简单的,需要注意的...

          上篇记录了一下权限控制部分的实现过程,以及实现的代码。但那些只是实现了简单的权限控制,具体的后台当然要有用户的管理,用户组的管理,规则管理等。这篇主要是写后台部分,和上篇凑成一个完整的环。

    第一篇文章传送门:tp3.2.3权限控制详解一

    一、用户管理,以及权限管理部分

    1、管理员管理

    这里写图片描述

    这部分是比较简单的,需要注意的是,添加管理员的时候,要添加对应的分组信息。

    2、权限管理

    这里写图片描述

          这部分是对应权限组的列表信息。在添加管理员的时候,要同时往auth_group_access表中加上管理员对应的权限组。可以考虑使用数据库的事务。

    3、添加和修改权限组对应的权限

    这里写图片描述

          在新增权限组的时候,我们需要选择赋予的权限。这里是把所有控制器对应的方法都给列出来,超级管理员可以选择赋予普通管理员权限。

    这里需要注意,超级管理员是权限最大的,不要限制超级管理员。

    二、左边的菜单显示方式

    就像之前说的,我们需要根据用户对应的权限来显示菜单栏目。如果用户没有对应的权限,我们就不显示该栏目。

    1、线查询用户对应的所有规则id,也就是控制器方法的id

    function getRules($adminId)
    {
      $ruleArr = M('smj_admin')->where('id='."'$adminId'")->find();
      $type = $ruleArr['type'];
      $ruleStr1 = M('smj_auth_group')->where('id='."'$type'")->find();
      $ruleStr = $ruleStr1['rules'];
      //var_dump($ruleStr);
      $ruleArr = explode(',',$ruleStr);
      return $ruleArr;
    }

    这个方法是写在Common控制器的,作为一个公用方法。根据传过来的用户id,查询对应的瑞泽信息,并且转化成数组。

    2、把获取到的规则数组传递给视图,在视图页进行判断

    这里写图片描述

          我这里就是采用最笨的方法。把每个列表页在规则表中对应的id,专门找出来。然后判断这个列表页的id在不在用户对应的权限数组中。在的话就显示,不在的话就不显示。

          比如这个图片,我用户信息在auth_rule表中对应的id是12,那我就判断一下,这个12在不在用户的权限数组中。

          以上配合上第一篇文章,基本就完成一个闭环。注意把所有的方法,包括JS异步请求的方法,都加入到auth_rule表中。这样就基本OK了。

    我这边做的比较简单。如果有更好的方案或者问题,请留言,谢谢。

    end

    展开全文
  • 根据tp5.0,进行拓展,带权限控制,登录,角色管理,管理员管理,菜单管理,token验证,参数过滤与校验,带sql脚本的纯api Demo
  • TP5权限功能的实现(含源码) 下面为大家讲解如何实现Auth权限功能(测试网址http://qx.wangzhuoe.cn/admin/login/login超级管理员:账号密码都是admin 管理员账号密码都是cs) 第一步将权限验证插件Auth.php放到控制器...
  • tp5.1 权限模块 -- 权限实现

    千次阅读 2019-06-11 09:44:20
    转载:tp5.1 权限模块 – 权限实现 思路:用户登录验证的时候将用户权限路由存储session,定义方法执行前行为,行为验证当前访问的方法路由是否属于用户所拥有的权限路由。 一、在制作站点权限之前我们需要准备...
  • tp5Auth权限实现

    万次阅读 2018-01-23 11:08:01
    下面本人为大家讲解一下如何实现auth权限, 第一步,新建Auth.php,复制下面的代码,把注释中的表都创建一下。把文件放到extend新建文件夹org放进去即可, // +-----------------------------------------------...
  • <?php /** * Created by PhpStorm. * User: jianyivip * Date: 2019-07-26 * Time: 16:10 */ namespace app\index\controller; use think\facade\Env;...//获取模块下所有的控制器和方法写入到权限表 ...
  • tp5权限管理

    千次阅读 2021-08-06 11:06:25
    tp5权限管理第一步首先创建用户表添加字段角色权限等级第二步在config.php配置中定义权限数据第三步添加判断中间控制器(实现RBAC权限代码) 今天跟大家分享一下tp5权限管理 首先创建一张用户表:id name auto(保存...
  • Tp3.2 auth后台权限管理

    2017-08-30 15:36:12
    Tp3.2 auth后台权限管理Tp3.2 auth后台权限管理Tp3.2 auth后台权限管理Tp3.2 auth后台权限管理Tp3.2 auth后台权限管理
  • 超级简单易懂的auth权限管理的demo,适合小白学习,数据库还有说明文档都有只要不嫌枯燥认真看完说明文档就会话不多说直接链接走起,小白自行下载访问演示,不懂的...git:https://github.com/Net-insect/tp5-auth ...
  • Common里面验证权限 代码: public function __construct() { parent::__construct(); if (!session('admin_id')) { $this->error('请先登录!', 'login/login'); } //获得当前页面的控制器 / 方法 $...
  • tp5权限管理流程

    2021-08-06 14:07:21
    首先创建一张用户表:id name auto(保存格式为:控制器-方法)然后在后台中创建一个基类控制器,控制器里封装一个构造方法,当用户登陆成功后,使用TP框架中封装好的session函数获取保存在服务器中的session id,然后实例化...
  • tp5 Auth权限认证方法与步骤

    千次阅读 2018-11-06 17:58:29
    RBAC是按节点进行认证的,如果要控制比节点更细的权限就有点困难了,比如页面上面的操作按钮, 我想判断用户权限来显示这个按钮, 如果没有权限就不会显示这个按钮; 再比如我想按积分进行权限认证, 积分在0-100时...
  • tp5 RBAC权限管理

    千次阅读 2021-08-06 14:54:02
    今天小编跟大家分享一下tp的RBAC权限登录管理; 首先呢我们需要在用户表里面添加一个字段(用户的权限等级); 第二步在config.php配置中定义权限数据: //定义角色权限数组 RBAC_ROLES => array( 1 =>'超级...
  • 我们先在admin模块controller目录下创建并自定义一个基础控制器类, 它继承think的controller类: &lt;?php namespace app\admin\controller; use think\Controller; use think\Db; use think\Session; ...
  • 没有目录权限 没有写入权限 先附上错误信息 thrown in /usr/local/nginx/html/diaodu/thinkphp/library/think/log/driver/File.php on line 245" while reading response header from upstream, client: 192.168.0...
  • tp5控制器中使用layer提示 <?php /** * $msg 待提示的消息 * $url 待跳转的链接 * $icon 这里主要有两个,5和6,代表两种表情(哭和笑) * $time 弹出维持时间(单位秒) */ function alert_success($msg = ''...
  • 1、composer安装JWT github地址:https://github.com/firebase/php-jwt composer require firebase/php-jwt 2、生成token $objToken = new \Token(); $token_data = [ 'user_id' =>... .
  • 今天我下决心用一天到两天的时间一定一步一步在tp5里面实现。 RBAC 1、rbac的实现依赖以下几个composer组件 composer require gmars/tp5-nestedsets composer require gmars/tp5-rbac 由于RBAC组件需要数据库...
  • tp5 删除上传的原文件出现权限问题

    千次阅读 2017-10-15 02:04:36
    tp5关于对上传文件的操作中,根据项目的业务需求,将上传的图片进行缩略或裁剪后,保存缩略图并需要删除原图片。此时相信很多朋友在删除原图时就遇到了权限这个问题! 权限如果有问题,我们想到的肯定是修改文件的...
  • 一:日志需求,需要一个表记录所有的 模块名/控制器命/方法...//获取模块下所有的控制器和方法写入到权限表 public function initperm() { $modules = array('admin'); //模块名称 $i = 0; foreach ($modules as...
  • 设置session的最大的目的就是进行权限的判断,判断用户是否有进入某个页面的权限,例如:如果没有登陆就什么页面都不能访问。 方法为在父类控制器base.php的构造函数中添加对当前session进行判断,所以的控制器...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,766
精华内容 3,506
关键字:

tp5权限控制