ThinkPHP5ACL用户权限模块用法详解

来源:中文源码网    浏览: 次    日期:2018年8月30日

【下载文档:  ThinkPHP5ACL用户权限模块用法详解.txt 】

(友情提示:右键点上行txt文档名->目标另存为)

thinkPHP5 ACL用户权限模块用法详解 本文实例讲述了thinkPHP5 ACL用户权限模块用法。分享给大家供大家参考,具体如下:

最近学习thinkphp5,和以前3.X版本是完全不是一个概念。学习thinkphp5的朋友要注意命名空间思想。

最近做的一个项目,一个检测管理系统,由于为了以后做APP需要,才切换到thinkphp5作为以后的扩展API用的。今天完成的是用户权限控制模块。我把这个mark下来

数据库:

role数据库表:

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`name` varchar(20) NOT NULL COMMENT '角色名称',

`pid` smallint(6) DEFAULT NULL COMMENT '父角色ID',

`rule_name` text COMMENT '规则唯一英文标识,全小写',

`type` varchar(50) DEFAULT '' COMMENT '权限规则分类,请加应用前缀,如admin_',

`status` tinyint(1) unsigned DEFAULT NULL COMMENT '状态',

`remark` varchar(255) DEFAULT NULL COMMENT '备注',

`create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间',

`update_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间',

`listorder` int(3) NOT NULL DEFAULT '0' COMMENT '排序字段',auth_rule数据库表:

`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '规则id,自增主键',

`module` varchar(20) NOT NULL COMMENT '规则所属module',

`type` varchar(30) NOT NULL DEFAULT '1' COMMENT '权限规则分类,请加应用前缀,如admin_',

`name` varchar(255) NOT NULL DEFAULT '' COMMENT '规则唯一英文标识,全小写',

`param` varchar(255) DEFAULT NULL COMMENT '额外url参数',

`title` varchar(20) NOT NULL DEFAULT '' COMMENT '规则中文描述',

`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否有效(0:无效,1:有效)',

`condition` varchar(300) NOT NULL DEFAULT '' COMMENT '规则附加条件',用户表里面增加:

`pools` varchar(20) DEFAULT '' COMMENT '权限池',

`roleId` smallint(5) NOT NULL DEFAULT '0' COMMENT '权限id',代码如下:

iAuth.php 权限认证的公共库文件

class iAuth{

public $user = null;

//默认配置

protected $_config = array(

);

public function __construct() {

}

/**

* 检查权限

* @param name string|array 需要验证的规则列表,支持逗号分隔的权限规则或索引数组

* @param uid int 认证用户的id

* @param relation string 如果为 'or' 表示满足任一条规则即通过验证;如果为 'and'则表示需满足所有规则才能通过验证

* @return boolean 通过验证返回true;失败返回false

*/

public function check($uid,$name,$relation='or') {

if(empty($uid)){

return false;

}

if($uid==1){

return true;

}

if (is_string($name)) {

$name = strtolower($name);

if (strpos($name, ',') !== false) {

$name = explode(',', $name);

} else {

$name = array($name);

}

}

$list = array(); //保存验证通过的规则名

//获取用户信息

$this->getUserInfo($uid);//获取用户信息,一维数组

$groups= $this->user['roleId'];

if(in_array(1, $groups)){

return true;

}

if(empty($groups)){

return false;

}

$rules = self::get_rules($this->user['roleId']);

if(in_array($name,$rules))

{

return true;

}

return false;

}

/**

* 获得用户资料

*/

private function getUserInfo(&$uid) {

if(!isset($this->user)){

$user = new Users($uid);

$this->user = $user->fields;

}

return $this->user;

}

/**

* 获取验证规则

* @param int $id

*/

public static function get_rules($id)

{

if(empty($id)) return false;

$rules = Cache::get(self::$cache_prefix . $id);

if(empty($rules))

{

$model = Db::name('role');

$model->where('id',$id);

$rules = $model->find();

$rules['rule_name'] = explode(',',strtolower($rules['rule_name']));

//设置缓存

Cache::set(self::$cache_prefix,$rules);

}

return $rules;

}

}Common.php 通用函数类库

/**

* 检测用户id

* @param name string|array 需要验证的规则列表,支持逗号分隔的权限规则或索引数组

* @param uid int 认证用户的id

*/

function sp_auth_check($uid, $name=null)

{

if(empty($uid)) return false;

if(empty($name)){

$name=strtolower(MODULE_NAME."/".CONTROLLER_NAME."/".ACTION_NAME);

}

$iAuth_obj = new \app\Common\Lib\iAuth();

return $iAuth_obj->check($uid);

}AdminbaseController.php 后台管理的父控制器类

class AdminbaseController extends Controller

{

public $uid = 0;

//用户实例

public $userObj = null;

/**

* 构造函数

* Adminbase constructor.

*/

public function __construct()

{

parent::__construct();

}

public function _initialize()

{

$this->uid = Session::read('AdminId');

if(!empty($this->uid ))

{

//检测过已经登录了

$this->userObj = Db::name('users')->where('uid',$this->uid)->find();

if(!$this->check_access($this->uid))

{

$this->error("您没有访问权限!",Url::build('admin/index/login'));

exit();

}

$this->assign('admin',$this->userObj);

}

else

{

//没有登录的

$this->error("您还没有登录!",Url::build('admin/index/login'));

exit();

}

}

/**

* 检测权限

* @param $uid

*/

private function check_access(&$uid)

{

if($uid == 1)

{

//超级管理员

return true;

}

$request = Request::instance();

//如果不是这个应用池的账户也不通过

$pools = explode(',',$this->userObj['pools']);

if(!in_array(strtolower($request->module()), $pools)) return false;

$rule = $request->module() . '_' . $request->controller() . '_' . $request->action() ;

$no_need_check_rules = Config::get('inc_auth.no_need_check_rules');

if(!in_array(strtolower($rule),$no_need_check_rules))

{

//验证权限

return sp_auth_check($uid);

}

else

{

return true;

}

}

}inc_auth.php 认证配置文件

$config['no_need_check_rules'] = array('admin_index_index','admin_index_login');更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

亲,试试微信扫码分享本页! *^_^*

用户权限框架php,ThinkPHP5ACL用户权限模块用法详解相关推荐

  1. Python re模块用法详解

    Python re模块用法详解 在 Python 爬虫过程中,实现网页元素解析的方法有很多,正则解析只是其中之一,常见的还有 BeautifulSoup 和 lxml,它们都支持网页 HTML 元素的 ...

  2. python bs4模块_python爬虫之Beautifulsoup模块用法详解

    什么是beautifulsoup: 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.(官方) beautifulsoup是 ...

  3. python中inspect模块用法详解

    获取函数签名对象.函数签名包含了一个函数的信息,包括函数名.它的参数类型.它所在的类和名称空间及其他信息). inspect模块主要提供了四种用处: 对是否是模块.框架.函数进行类型检查 获取源码 获 ...

  4. python ssl模块用法详解_一看就懂,Python 日志模块详解及应用!

    日志概述 百度百科的日志概述: Windows网络操作系统都设计有各种各样的日志文件,如应用程序日志,安全日志.系统日志.Scheduler服务日志.FTP日志.WWW日志.DNS服务器日志等等,这些 ...

  5. python中sys模块有什么用_Python sys模块用法详解

    sys 模块代表了 Python 解释器,主要用于获取和 Python 解释器相关的信息. 在 Python 的交互式解释器中先导入 sys 模块,然后输入 [e for e in dir(sys) ...

  6. python subprocess使用_Python subprocess模块用法详解

    在 Python 2.7 及 Python 3 中,系统自带了 subprocess 模块,该模块主要用来管理子进程. 在使用该模块之前需要将其引入,方法如下: import subprocess 在 ...

  7. python中elasticsearch_dsl模块用法详解

    elasticsearch-dsl是基于elasticsearch-py封装实现的,提供了更简便的操作elasticsearch的方法. 安装: pip install elasticsearch_d ...

  8. python defaultdict 类属性_Python collections.defaultdict模块用法详解

    Python中通过Key访问字典,当Key不存在时,会引发'KeyError'异常.为了避免这种情况的发生,可以使用collections类中的defaultdict()方法来为字典提供默认值. 语法 ...

  9. python zipfile模块分卷_python zipfile模块用法详解

    python对zip格式的支持很简单,且好用. 1)简单应用 用python来做压缩和解压缩的简单用法. 代码示例: import zipfile f = zipfile.ZipFile('filen ...

  10. linux useradd(adduser)命令参数及用法详解(linux创建新用户命令)

    linux useradd(adduser)命令参数及用法详解(linux创建新用户命令) useradd可用来建立用户帐号.帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号 ...

最新文章

  1. java基础 第九章(设计模式 单例模式)
  2. Bio->Nio->Selector->Epoll->Netty
  3. AngularJS快速入门指南09:SQL
  4. 软件结构B/S和C/S
  5. 人机交互,加速机器人拟人化
  6. springboot整合curator实现分布式锁
  7. pod配置Liveness和Readiness探针
  8. docker下配置linux7.2
  9. 松下PLC项目实例,两台CPU间通过RS485通讯,10轴定位控制
  10. CDlinux使用与安装
  11. unity响应键盘的组合键
  12. Python 随机切换桌面背景图
  13. 2020华师计算机基础客观作业,华师13春计算机基础作业
  14. RroductFlavors 多渠道打包 配置不同的包名、桌面图标、引导页、java代码等
  15. Google PR 劫持方法
  16. 通过RK3568实现的NVR方案
  17. 如果再回到2013年
  18. 【ROE】(2)ROE协议
  19. 产品经理必懂的技术知识
  20. 四轮两驱小车(一):STM32驱动AS4950

热门文章

  1. MAVEN项目标准目录结构
  2. 【动态规划】最大子段和问题,最大子矩阵和问题,最大m子段和问题
  3. 1.1 计算机网络组成与分类
  4. VC 项目支撑文件解释
  5. mysql官网下载页面
  6. 2014 - 2015
  7. JSP项目《教师年终个人成果统计系统的设计与应用》实战(一)——密码加密算法...
  8. decimal简单问题
  9. php使用referer,PHP利用REFERER根居访问来地址进行页面跳转
  10. 超分20220225讨论