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 app\index\controller;
use think\Request;
use think\Controller;
use think\auth\Auth;
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,并且他是有权限访问的。

tp5.1 Auth类实现权限管理的更多相关文章
- RBAC在thinkphp中有Auth类 可以很好的实现权限控制
import('ORG.Util.Auth');//加载类库 $auth=new Auth(); if($auth->check('show_button',1)){// 第一个参数是规则名称, ...
- 比RBAC更好的权限认证方式(Auth类认证)
Auth 类已经在ThinkPHP代码仓库中存在很久了,但是因为一直没有出过它的教程, 很少人知道它, 它其实比RBAC更方便 . RBAC是按节点进行认证的,如果要控制比节点更细的权限就有点困难了, ...
- 潭州课堂25班:Ph201805201 django框架 第十三课 自定义404页面,auth系统中的User模型,auth系统权限管理 (课堂笔记)
当 DEBUG=True 时,django 内部的404报错信息, 自带的报错信息, 要自定义404信息,要先把 DEBUG=False , 之后要自定义4040页面,有两种方法, 方法1,在创建40 ...
- thinkphp Auth认证类 比RBAC更好的权限认证方式(Auth类认证)
thinkphp Auth认证类 比RBAC更好的权限认证方式(Auth类认证) Auth 类已经在ThinkPHP代码仓库中存在很久了,但是因为一直没有出过它的教程, 很少人知道它, 它其实比 ...
- ThinkPHP 提供Auth 权限管理、支付宝、微信支付、阿里oss、友盟推送、融云即时通讯、云通讯短信、Email、Excel、PDF 等等
多功能 THinkPHP 开源框架 项目简介:使用 THinkPHP 开发项目的过程中把一些常用的功能或者第三方 sdk 整合好,开源供亲们参考,如 Auth 权限管理.支付宝.微信支付.阿里oss. ...
- thinkphp 比RBAC更好的权限认证方式(Auth类认证)
Auth 类已经在ThinkPHP代码仓库中存在很久了,但是因为一直没有出过它的教程, 很少人知道它, 它其实比RBAC更方便 . RBAC是按节点进行认证的,如果要控制比节点更细的权限就有点困难了, ...
- Linux---用户及权限管理类命令
1.Linux用户 分为三类: 超级用户:拥有最高权限 系统用户:与系统服务相关,但不能用于登录 普通用户:由超级用户创建并赋予权限,只能操作其拥有权限的文件和目录,只能管理自己启动的进程 2.用户管 ...
- DRF内置权限组件之自定义权限管理类
DRF内置权限组件permissions 权限控制可以限制用户对于视图的访问和对于具体数据对象的访问. 在执行视图的dispatch()方法前,会先进行视图访问权限的判断 在通过get_object( ...
- ASP.NET 开发必备知识点(2):那些年追过的ASP.NET权限管理
一.前言 在前一篇文章已经为大家介绍了OWIN和Katana,有了对他们的了解之后,才能更好地去学习Asp.net Identity,因为Asp.net Identity的实现集成了Owin.其实在A ...
随机推荐
- 论文阅读笔记(二十一)【CVPR2017】:Deep Spatial-Temporal Fusion Network for Video-Based Person Re-Identification
Introduction (1)Motivation: 当前CNN无法提取图像序列的关系特征:RNN较为忽视视频序列前期的帧信息,也缺乏对于步态等具体信息的提取:Siamese损失和Triplet损失 ...
- Linux进程间通信-管道深入理解(转)
原文地址:https://www.linuxidc.com/Linux/2018-04/151680.htm Linux进程通信系列文章将详细介绍各种通信方式的机制和区别 1.进程间通信 每个进程各自 ...
- Visual Studio 2017中使用gulp编译sass/scss
在Visual Studio 2017中使用gulp编译sass/scss文件 需要的环境:Visual Studio 2017.Node.js.npm 在vs2017中 [视图]-[其他窗口]-[任 ...
- babel环境安装与编译
babel:将浏览器不支持的ES6语法转为javascript 查看node是否安装: npm -v node -v 实例演示:在桌面新建part5目录在cmd命令行中 cd desktop cd p ...
- sublime—text终端无法输入,不支持scanf、input等语法问题的解决
sublimetext是个很好用的轻量编辑器,,支持多语言语法高亮,自动补全,快捷键编译运行,而且ui也不错挺简洁,我一直在用.我之前浏览帖子时候看到有些人也在用这个编辑器. 但是吧,这个编辑器的的编 ...
- Java第二节课总结
Java的基本运行单位是类.类由数据成员和函数成员组成.变量的类型之间可以相互转换.String是一个类.static代表静态变量. 运行结果: false false ...
- P1282 多米诺骨牌【dp】
P1282 多米诺骨牌 提交 20.02k 通过 6.30k 时间限制 1.00s 内存限制 125.00MB 题目提供者洛谷 难度提高+/省选- 历史分数100 提交记录 查看题解 标签 查看算 ...
- AI算法:1. 决策树
今天,我们介绍的机器学习算法叫决策树. 跟之前一样,介绍算法之前先举一个案例,然后看一下如何用算法去解决案例中的问题. 我把案例简述一下:某公司开发了一款游戏,并且得到了一些用户的数据.如下所示: 图 ...
- 题解 AT3717 【[ABC081A] Placing Marbles】
题目传送门. 分析 我们可以把字符串中所有数加起来输出,那么到底怎么把一个字符变成一个数字呢.我们只需要减去字符\(0\)就可以了. 详细步骤 定义字符串\(s\)并将其输入. string s; c ...
- JS绑定事件处理函数及处理流程
一.事件绑定的几种方式: 1.1 ele.on+“事件名“:如div.onclick = function(event){ }; 1.1.1这种方式兼容性非常好,但一个元素的同一个事件上只能绑定一个处 ...