Auth权限类使用示例

jerry thinkphp 2015年11月18日 收藏
看了下官网上还没有一个Auth权限类实例应用,今天抽空写了下,希望对大家有所帮助

数据库如下
mc_admin_group

Field Type Allow Null Default Value
id mediumint(8) UNSIGNED No
title char(100) No
status tinyint(1) No 1
rules char(80) No

mc_admin_group_access

Field Type Allow Null Default Value
uid mediumint(8) UNSIGNED No
group_id mediumint(8) UNSIGNED No

mc_admin_menu

Field Type Allow Null Default Value
id smallint(6) No
name char(40) No
title varchar(50) No
condition varchar(60) No
pid smallint(6) No 0
g char(20) No
m char(20) No
a char(20) No
data char(30) No
listorder smallint(6) No 0
display enum('1','0') No '1'
status enum('1','0') No '1'

AdministratorAction.class.php
  1. class AdministratorAction extends Action{
  2.     /**
  3.      * 初始化
  4.      */
  5.     public function _initialize(){
  6.         parent::_initialize();
  7.         if($this->isLogin()){
  8.             $this->checkRule();
  9.         }
  10.     }

  11.     /**
  12.      * 判断是否登录
  13.      * @return bool
  14.      */
  15.     public function isLogin(){
  16.         if(!session(C('ADMIN_KEY'))){
  17.             $this->redirect(C('ADMIN_GATEWAY'));
  18.         }
  19.         return true;
  20.     }

  21.     /**
  22.      * 检测是否有权限
  23.      * @return bool
  24.      */
  25.     public function checkRule(){
  26.         if( in_array(GROUP_NAME,array('Admin')) && in_array(MODULE_NAME,array('Index')) || session(C('ADMINISTRATOR'))) return true;
  27.         $ruleName = '';
  28.         $menu = S('menu')?S('menu'):D('AdminMenu')->cache_menu();
  29.         foreach($menu as $v){
  30.             if(GROUP_NAME == $v['g'] && MODULE_NAME == $v['m'] && ACTION_NAME == $v['a']){
  31.                 $ruleName = $v['name'];
  32.             }
  33.         }
  34.         $auth = new Auth();
  35.         if(!$auth->check($ruleName,session(C('ADMIN_KEY')))){
  36.             $this->error(L('LANG_NO_PERMISSION'),U(C('ADMIN_GATEWAY')));
  37.         }
  38.     }
  39. }