zoukankan      html  css  js  c++  java
  • tp5.1 Auth类实现权限管理

    了解来这么久权限控制权限的知识,却不知道如何写代码,网上的代码多数并没有多少完整的源码能提供参考。偶然看到官网的例子,现在终于也把源码的实现也弄得明白了一点。

    tp5框架的Auth类可以实现页面的访问权限,还可以精确到页面上的按钮。页面访问主要靠rule表的name字段。附加条件权限主要看condition字段。

    源码下载:https://files.cnblogs.com/files/mzzone/D.zip,数据库配置在database.php.数据库名为tp5_db.

    源码是从官网的一篇权限管理文章下的,他那里提到了对节点(路由)进行权限管理,但没有具体源码。又查阅了其他几篇文章,加了一些代码,

    仅仅是实现了

    1.除开放页面,要求用户登录才能继续访问其他页面。

    2.规定哪些用户可以访问哪些页面。

    着重控制是访问页面的权限,按钮点击是否有效的权限官网的也有示例。

    • 权限控制分为几个情况

    // 1.首先判断是否为超级管理员
    // --管理员直接放行
    // --非管理员再次判断
    // 2.如果是非管理员,再次判断访问的节点是否在开放的数组列表中
    // --节点在属于开放权限,直接放行
    // --节点不属于开放权限,再次判断
    // 3.不属于开放权限,判断有没有登录
    // --用户已经登录,继续使用auth类检查有无权限
    // -----用户有权限,直接放行
    // -----用户无权限,可以选择不做动作,也可以让它跳转到首页。
    // --用户未登录,提示并跳转到登录页面。

    • Auth类实现权限控制的原理就是增加一个基础控制器Base继承Controller,其他需要进行权限控制的控制器继承Base。
    • Base控制器中的_initialize方法就是这个技术点的核心了。凡是继承自Base的控制器都会优先执行这个方法。
    • 这里面的过程分为几个步骤,下面是他的代码及其图解。
    • 源码放到根目录之后,将sql导入数据库,数据库名为tp5_db,没有的话,先新建一个。

    <?php
    namespace appindexcontroller;
    use thinkRequest;
    use thinkController;
    use thinkauthAuth;
    class Base extends Controller
    {
        public function _initialize()
        {
             //获得当前页面的控制器 / 方法   
            $request=Request::instance();
            $moudle=$request->module(); //获取当前控制器名称
            $con=$request->controller(); //获取当前控制器名称
            $action=$request->action();  //获取当前方法名称
            // $this->assign(array(
            //         'con'=>$con,
            //         'action'=>$action,
            // ));
            $rules=$con.'/'.$action;  //组合  控制器/方法
            $auth=new Auth(); //实例化auth类
            $notCheck=array('Index/index','Index/login','Index/dologin','Index/logout');  //都可以访问的页面
            if(session('uid')!=2){  //不是超级管理员才进行权限判断
               if(!in_array($rules,$notCheck)){  // 是否在开放权限里面
    
                if(!session('uid')){  
                   $this->error('请先登陆系统!','index/login');
                 }
                   if(!$auth->check($rules,session('uid'))){   // 第一个参数  控制/方法     第二个参数:当前登陆会员的id
                      $this->error('没有权限','index/index');
                    };
                } 
             }
    
    
        }
     }

    • 未登录用户演示过程(首页属于开放权限,未登录用户不能访问index/addGoods节点)

    • 未登录用户访问addGoods

    •  登录用户首页

    •  登录用户访问addGoods,并且他是有权限访问的。

  • 相关阅读:
    操作数据库系统(OLTP)和联机分析处理系统(OLAP)的区别
    BI笔记-SSAS部署的几种方式及部署后的SSAS刷新
    概念-数据仓库与元数据
    零基础学Python 3之环境准备
    OFBiz进阶之HelloWorld(五)创建新实体
    OFBIZ bug_create-component ERROR
    OFBIZ bug_ControlServlet.java:233:ERROR
    OFBiz进阶之HelloWorld(三)CRUD操作
    OFBiz进阶之HelloWorld(二)创建热部署模块
    OFBIZ bug_ControlServlet.java:239:ERROR
  • 原文地址:https://www.cnblogs.com/mzzone/p/12080987.html
Copyright © 2011-2022 走看看