Thinkphp5 Auth权限认证

auth类在thinkphp类库里是原本就有的,thinkphp5里没了,这里是将其修改为thinkphp5适用

auth类的特点是

[php]  view plain  copy
  1. /** 
  2.      * 权限认证类 
  3.      * 功能特性: 
  4.      * 1,是对规则进行认证,不是对节点进行认证。用户可以把节点当作规则名称实现对节点进行认证。 
  5.      *      $auth=new Auth();  $auth->check('规则名称','用户id') 
  6.      * 2,可以同时对多条规则进行认证,并设置多条规则的关系(or或者and) 
  7.      *      $auth=new Auth();  $auth->check('规则1,规则2','用户id','and') 
  8.      *      第三个参数为and时表示,用户需要同时具有规则1和规则2的权限。 当第三个参数为or时,表示用户值需要具备其中一个条件即可。默认为or 
  9.      * 3,一个用户可以属于多个用户组(think_auth_group_access表 定义了用户所属用户组)。我们需要设置每个用户组拥有哪些规则(think_auth_group 定义了用户组权限) 
  10.      * 
  11.      * 4,支持规则表达式。 
  12.      *      在think_auth_rule 表中定义一条规则时,如果type为1, condition字段就可以定义规则表达式。 如定义{score}>5  and {score}<100  表示用户的分数在5-100之间时这条规则才会通过。 
  13.      */  

接着导入数据库表

[php]  view plain  copy
  1. //数据库  
  2. /* 
  3. -- ---------------------------- 
  4. -- think_auth_rule,规则表, 
  5. -- id:主键,name:规则唯一标识, title:规则中文名称 status 状态:为1正常,为0禁用,condition:规则表达式,为空表示存在就验证,不为空表示按照条件验证 
  6. -- ---------------------------- 
  7.  DROP TABLE IF EXISTS `think_auth_rule`; 
  8. CREATE TABLE `think_auth_rule` ( 
  9.     `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, 
  10.     `name` char(80) NOT NULL DEFAULT '', 
  11.     `title` char(20) NOT NULL DEFAULT '', 
  12.     `type` tinyint(1) NOT NULL DEFAULT '1', 
  13.     `status` tinyint(1) NOT NULL DEFAULT '1', 
  14.     `condition` char(100) NOT NULL DEFAULT '',  # 规则附件条件,满足附加条件的规则,才认为是有效的规则 
  15.     PRIMARY KEY (`id`), 
  16.     UNIQUE KEY `name` (`name`) 
  17. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8; 
  18. -- ---------------------------- 
  19. -- think_auth_group 用户组表, 
  20. -- id:主键, title:用户组中文名称, rules:用户组拥有的规则id, 多个规则","隔开,status 状态:为1正常,为0禁用 
  21. -- ---------------------------- 
  22.  DROP TABLE IF EXISTS `think_auth_group`; 
  23. CREATE TABLE `think_auth_group` ( 
  24.     `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, 
  25.     `title` char(100) NOT NULL DEFAULT '', 
  26.     `status` tinyint(1) NOT NULL DEFAULT '1', 
  27.     `rules` char(80) NOT NULL DEFAULT '', 
  28.     PRIMARY KEY (`id`) 
  29. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8; 
  30. -- ---------------------------- 
  31. -- think_auth_group_access 用户组明细表 
  32. -- uid:用户id,group_id:用户组id 
  33. -- ---------------------------- 
  34. DROP TABLE IF EXISTS `think_auth_group_access`; 
  35. CREATE TABLE `think_auth_group_access` ( 
  36.     `uid` mediumint(8) unsigned NOT NULL, 
  37.     `group_id` mediumint(8) unsigned NOT NULL, 
  38.     UNIQUE KEY `uid_group_id` (`uid`,`group_id`), 
  39.     KEY `uid` (`uid`), 
  40.     KEY `group_id` (`group_id`) 
  41. ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
  42.  */  
接着在需要权限验证控制器里创建_initialize方法进行权限认证

[php]  view plain  copy
  1. //权限认证  
  2.         $auth = new \Auth\Auth();  
  3.         $request = Request::instance();  
  4.         if (!$auth->check($request->module() . '-' . $request->controller() . '-' . $request->action(), SID)) {// 第一个参数是规则名称,第二个参数是用户UID  
  5.             /* return array('status'=>'error','msg'=>'有权限!');*/  
  6.             $this->error('你没有权限');  
  7.         }  
其中$request->module();$request->controller();$request->action();分别问获取模块名、控制器名、操作名

可以在这里下载修改好的类 thinkphp5auth类下载 地址下载好后放入extend扩展里Auth文件夹下

猜你喜欢

转载自blog.csdn.net/u012767761/article/details/78442429