了解来这么久权限控制权限的知识,殊不知道如何写代码,网上的代码多数并无多少完整的源码能提供参考。偶然看到官网的例子,如今终于也把源码的实现也弄得明白了一点。php
tp5框架的Auth类能够实现页面的访问权限,还能够精确到页面上的按钮。页面访问主要靠rule表的name字段。附加条件权限主要看condition字段。sql
源码下载:https://files.cnblogs.com/files/mzzone/D.zip,数据库配置在database.php.数据库名为tp5_db.数据库
源码是从官网的一篇权限管理文章下的,他那里提到了对节点(路由)进行权限管理,但没有具体源码。又查阅了其余几篇文章,加了一些代码,数组
仅仅是实现了session
1.除开放页面,要求用户登陆才能继续访问其余页面。app
2.规定哪些用户能够访问哪些页面。框架
着重控制是访问页面的权限,按钮点击是否有效的权限官网的也有示例。ui
// 1.首先判断是否为超级管理员
// --管理员直接放行
// --非管理员再次判断
// 2.若是是非管理员,再次判断访问的节点是否在开放的数组列表中
// --节点在属于开放权限,直接放行
// --节点不属于开放权限,再次判断
// 3.不属于开放权限,判断有没有登陆
// --用户已经登陆,继续使用auth类检查有无权限
// -----用户有权限,直接放行
// -----用户无权限,能够选择不作动做,也可让它跳转到首页。
// --用户未登陆,提示并跳转到登陆页面。this
<?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'); }; } } } }