今天晚上把ThinkPHP的权限分配弄明白了,心里的包袱立刻放下了,感觉那个爽啊!稍微记录一下。

背景:CMS系统开发(17do)。

项目分组:Admin(后台管理)、Home(前台显示)。
Admin组中包含ManagerAction、UserActin、ArticleAction三个控制器

第一部分:表关系对应(箭头是指数据来源)


其中表结构式根据RBAC规定的结构创建的。

定义结果:站长1能访问项目用户和文章的所有操作,管理员3只能对文章模块操作不能访问用户模块。

第二部分:项目配置
项目的config.php文件中添加

//权限分配设置
     'USER_AUTH_ON'=>true, //是否需要认证
    'USER_AUTH_TYPE'=>1, //认证类型
    'USER_AUTH_KEY'=>'userId',  // 认证识别号
    'USER_AUTH_MODEL'=>'user',//模型实例(用户表名)
    'REQUIRE_AUTH_MODULE'=>'User',  //需要认证模块
    'NOT_AUTH_MODULE'=>'',   //无需认证模块
    'USER_AUTH_GATEWAY'=>'/Public/login', //认证网关
    //RBAC_DB_DSN  数据库连接DSN
    'RBAC_ROLE_TABLE'=>'do_role', //角色表名称
    'RBAC_USER_TABLE'=>'do_role_user', //用户和角色对应关系表名称
    'RBAC_ACCESS_TABLE'=>'do_access', //权限分配表名称
    'RBAC_NODE_TABLE'=>'do_node',  // 权限表名称

第三部分:权限信息写入控制器

public function checkUser(){
        //表单数据不能为空
        if($this->_post('username')&&$this->_post('password')&&$this->_post('verifycode')){
            $pwd=  $this->_post('password');
            $username=  $this->_post('username');
            //验证码是否正确
            $verify=  $this->_post('verifycode');
            if($this->_session('verify')!=  md5($verify)){
                $this->error("验证码错误");
            }else{
                //创建数据库对象
                $user=M('user');
                //根据用户名查询               
                $cond['username']=$username;
                $cond['active']=array('gt',0);
                //加载RBAC类
                import('ORG.Util.RBAC');
                //通过authenticate读取用户信息
                $result=RBAC::authenticate($cond);
                //dump($result);
                if($result){
                    if($result['password']==md5($pwd)){
                        $_SESSION[C('USER_AUTH_KEY')]=$result['id'];
                        $_SESSION["name"]=$result['name'];
                        //使用saveAccessList缓存访问权限
                        RBAC::saveAccessList();
                        $this->display('Manager:index');
                    }else{
                        $this->error("用户密码错误");
                    }
                }else{
                    $this->error("用户名不存在或已经被禁用");
                }

}

第四部分:创建验证权限控制器

class CommonAction extends Action{

//_initialize()方法是ThinkPHP提供的入口方法,类似于原PHP中__condition()构造函数。可以存放所有公用信息。
    function _initialize(){
        //判断是否开启认证,并且当前模块需要验证
        if(C('USER_AUTH_ON')&&!in_array(MODULE_NAME, explode(',', C('NOT_AUTH_MODULE')))){
            //导入RBAC类,开始验证
            import('ORG.Util.RBAC');
            //通过accessDecision获取权限信息
            if(!RBAC::AccessDecision()){
                //没有获取到权限信息时需要执行的代码
                //1、用户没有登录
                if(!$_SESSION[C('USER_AUTH_KEY')]){
                    $url= U('Public/login');
                    $this->error("您还没有登录不能访问",$url);
                }
                $this->error("您没有操作权限");
            }
        }
    }
}

第五部分:验证控制器调用

只要需要权限验证的控制器继承CommonAction就可以啦!

使用admin账号登陆能正常访问


使用xiaoxiao账号登陆后不能访问用户列表页面

转载于:https://www.cnblogs.com/zoupufa/p/4097646.html

thinkphp rabc权限总结相关推荐

  1. thinkphp mysql权限管理_TP thinkphp 权限管理 权限认证 功能

    目前,在tp框架中做权限管理 分rbac(老)与auth(推荐)认证方式: 老的tp版本中封装的是rbac认证: 新一点的都开始使用auth方式管理了.推荐使用此方式: 实现步骤一:引入类库Auth. ...

  2. crontab fastadmin thinkphp 定时任务权限不足

    项目场景: 项目正常运行,测试突然反馈说出现异常,程序闪退,界面闪退 问题描述: 查看日志报错 Permission denied 权限不足 问题原因,定时是用root执行,项目运行是www用户执行 ...

  3. 一个页面区分管理者和普通用户如何设计_产品经理要做的操作权限/数据权限设计...

    产品经理在工作中还需要知道一个:用户权限设计能力.权限设计理念贯穿于后台产品.以及用户前端产品. 权限能力包括两类:数据权限.系统操作权限 有的人会好奇,为什么前端产品会有有权限管理的要求?接下来我将 ...

  4. Thinkphp中Auth认证

    权限管理在thinkphp有两种方式,比较常见用是RBAC,也是比较人用,容易理解,是基于节点的权限管理,Auth也可以做权限管理基于规则的权限管理,下面分别说说 1,Thinkphp RBAC权限管 ...

  5. 爆破专栏丨Spring Security系列教程之Spring Security的四种权限控制方式

    原创:一一哥 前言: 在前面的章节中,一一哥 已经给大家介绍了Spring Security的很多功能,在这些众多功能中,我们知道其核心功能其实就是认证+授权. 在前面我们分别基于内存模型.基于默认的 ...

  6. 李炎恢+php+下载,李炎恢thinkphp视频教程

    课程目标: 学习ThinkPHP3.2.1的使用方法. 适合对象: 适合有一定PHP基础,对ThinkPHP框架感兴趣的用户. 学习条件: 有面向对象基础,有MVC基础等. 课程目录 框架入门 01. ...

  7. ThinkPHP RBAC如何自动获取所有模块的函数

    之前我写过一个例子,关于ThinkPHP RBAC权限控制的,后来又研究了下,发现在真实的情况中,很多crm,cms等,有需要去获取RBAC所有模块,然后进行权限分配等操作,或者增加删除模块. 所以就 ...

  8. 收藏这几个开源管理系统做项目,领导看了直呼牛X!

    项目 SCUI Admin 中后台前端解决方案 Vue + .NetCore 前后端分离的快速发开框架 next-admin 适配移动端.pc的后台模板 django-vue-admin-pro 快速 ...

  9. 【工具】开发环境之vagrant

    vagrant遭遇macOS bug看图 分析问题 mac的vagrant虚拟机ubuntu14.04开发环境,thinkphp没有权限创建文件,怎么搞? 在windows使用vagrant是没有遇到 ...

最新文章

  1. 简单易懂棒棒哒的视频传输工具!
  2. boost::range模块uniqued相关的测试程序
  3. JavaScript基础总结(五)——Math对象
  4. nginx学习之详细安装篇(二)
  5. mysql 上级组织参数值_MYSQL组织结构设计构思(快速查上级和下级)
  6. 思考XSS攻击和跨站伪造请求CSRF
  7. 原 matplotlib命令与格式:系统字体与显示中文
  8. 转: 技巧/诀窍:在ASP.NET中重写URL
  9. GB28181国标协议
  10. IIS DNS服务器搭建
  11. TCPUDP调试工具 Linux 版
  12. 线性方程组求解——基于MTALAB/Octave,Numpy,Sympy和Maxima
  13. sparknbsp;项目启动的时候报出如下错误
  14. 批量更改Excel数据透视表字段汇总方式
  15. java数据结构与算法之双链表设计与实现
  16. UnityMesh 博文收藏
  17. linux安装及配置mycat eye可视化监控界面
  18. 半导体测试机ATE简介
  19. 独立站社交媒体运营策略
  20. Error in nextTick: “NotFoundError: Failed to execute ‘insertBefore‘ on ‘Node‘: The node before which

热门文章

  1. uniapp 原生安卓开发插件(module),以及android环境本地调试(一)
  2. 基于Flutter开发网站转换成APP源代码 网站生成APP源代码带控制端
  3. 【树莓派不吃灰】IO篇① GPIO 开发环境
  4. 考研英语阅读关于计算机课堂教学,2016考研英语阅读真题逐句拆分解析(165)...
  5. 一文带你看懂菜鸟程序员和大神的区别!
  6. java 静态类 new_Java中为静态内部类不能被new呢?
  7. HTML5怎么创建第一个步骤,创建网站的一般步骤是什么,流程有哪些?
  8. Ueeshop产品整体说明
  9. Android仿微信选择图片
  10. 扁平化设计配色参考网站:FlatUIColors