1. 程式人生 > >TP thinkphp 許可權管理 許可權認證 功能

TP thinkphp 許可權管理 許可權認證 功能

目前,在tp框架中做許可權管理 分rbac(老)與auth(推薦)認證方式;

老的tp版本中封裝的是rbac認證;

新一點的都開始使用auth方式管理了。推薦使用此方式;

實現步驟一:引入類庫Auth.class.php

實現步驟二:建立資料表

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 a.選單表 CREATE TABLE `wifi_admin_nav` (    `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT  '選單表' ,    `pid` int(11) unsigned DEFAULT 
'0'  COMMENT  '所屬選單' ,    `name` varchar(15) DEFAULT  ''  COMMENT  '選單名稱' ,    `mca` varchar(255) DEFAULT 
''  COMMENT  '模組、控制器、方法' ,    `ico` varchar(20) DEFAULT  ''  COMMENT  'font-awesome圖示' ,    `order_number` int(11) unsigned DEFAULT NULL COMMENT  '排序' ,    PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=43 DEFAULT CHARSET=utf8;   INSERT INTO `wifi_admin_nav` VALUES ( '1' '0' '系統設定' 'Admin/ShowNav/config' 'cog' '1' ); INSERT INTO `wifi_admin_nav` VALUES ( '2' '1' '選單管理' 'Admin/Nav/index' , null, null); INSERT INTO `wifi_admin_nav` VALUES ( '7' '4' '許可權管理' 'Admin/Rule/index' '' '1' ); INSERT INTO `wifi_admin_nav` VALUES ( '4' '0' '許可權控制' 'Admin/ShowNav/rule' 'expeditedssl' '2' ); INSERT INTO `wifi_admin_nav` VALUES ( '8' '4' '使用者組管理' 'Admin/Rule/group' '' '2' ); INSERT INTO `wifi_admin_nav` VALUES ( '9' '4' '管理員列表' 'Admin/Rule/admin_user_list' '' '3' ); INSERT INTO `wifi_admin_nav` VALUES ( '16' '0' '會員管理' 'Admin/ShowNav/' 'users' '4' ); INSERT INTO `wifi_admin_nav` VALUES ( '17' '16' '會員列表' 'Admin/User/index' '' , null); INSERT INTO `wifi_admin_nav` VALUES ( '36' '0' '文章管理' 'Admin/ShowNav/posts' 'th' '6' ); INSERT INTO `wifi_admin_nav` VALUES ( '37' '36' '文章列表' 'Admin/Posts/index' '' , null);   b.使用者組表 CREATE TABLE `wifi_auth_group` (    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,    `title` char(100) NOT NULL DEFAULT  '' ,    `status` tinyint(1) NOT NULL DEFAULT  '1' ,    `rules` text COMMENT  '規則id' ,    PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COMMENT= '使用者組表' ;   INSERT INTO `wifi_auth_group` VALUES ( '1' '超級管理員' '1' '6,96,20,1,2,3,4,5,64,126,21,7,8,9,10,11,12,13,14,15,16,123,124,125,19,104,105,106,107,108,109,110,111,112,117' ); INSERT INTO `wifi_auth_group` VALUES ( '2' '產品管理員' '1' '6,96,1,2,3,4,56,57,60,61,63,71,72,65,67,74,75,66,68,69,70,73,77,78,82,83,88,89,90,99,91,92,97,98,104,105,106,107,108,118,109,110,111,112,117,113,114' ); INSERT INTO `wifi_auth_group` VALUES ( '4' '文章編輯' '1' '6,96,57,60,61,63,71,72,65,67,74,75,66,68,69,73,79,80,78,82,83,88,89,90,99,100,97,98,104,105,106,107,108,118,109,110,111,112,117,113,114' );     c.使用者與使用者組關係表 CREATE TABLE `wifi_auth_group_access` (    `uid` int(11) unsigned NOT NULL COMMENT  '使用者id' ,    `group_id` int(11) unsigned NOT NULL COMMENT  '使用者組id' ,    UNIQUE KEY `uid_group_id` (`uid`,`group_id`),    KEY `uid` (`uid`),    KEY `group_id` (`group_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT= '使用者組明細表' ;   INSERT INTO `wifi_auth_group_access` VALUES ( '1' '1' ); INSERT INTO `wifi_auth_group_access` VALUES ( '211' '2' ); INSERT INTO `wifi_auth_group_access` VALUES ( '203' '4' );   d.許可權表 CREATE TABLE `wifi_auth_rule` (    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,    `pid` int(11) unsigned NOT NULL DEFAULT  '0'  COMMENT  '父級id' ,    `name` char(80) NOT NULL DEFAULT  ''  COMMENT  '規則唯一標識' ,    `title` char(20) NOT NULL DEFAULT  ''  COMMENT  '規則中文名稱' ,    `status` tinyint(1) NOT NULL DEFAULT  '1'  COMMENT  '狀態:為1正常,為0禁用' ,    `type` tinyint(1) unsigned NOT NULL DEFAULT  '1' ,    `condition` char(100) NOT NULL DEFAULT  ''  COMMENT  '規則表示式,為空表示存在就驗證,不為空表示按照條件驗證' ,    PRIMARY KEY (`id`),    UNIQUE KEY `name` (`name`) ) ENGINE=MyISAM AUTO_INCREMENT=127 DEFAULT CHARSET=utf8 COMMENT= '規則表' ;   INSERT INTO `wifi_auth_rule` VALUES ( '1' '20' 'Admin/ShowNav/nav' '選單管理' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '2' '1' 'Admin/Nav/index' '選單列表' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '3' '1' 'Admin/Nav/add' '新增選單' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '4' '1' 'Admin/Nav/edit' '修改選單' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '5' '1' 'Admin/Nav/delete' '刪除選單' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '21' '0' 'Admin/ShowNav/rule' '許可權控制' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '7' '21' 'Admin/Rule/index' '許可權管理' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '8' '7' 'Admin/Rule/add' '新增許可權' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '9' '7' 'Admin/Rule/edit' '修改許可權' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '10' '7' 'Admin/Rule/delete' '刪除許可權' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '11' '21' 'Admin/Rule/group' '使用者組管理' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '12' '11' 'Admin/Rule/add_group' '新增使用者組' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '13' '11' 'Admin/Rule/edit_group' '修改使用者組' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '14' '11' 'Admin/Rule/delete_group' '刪除使用者組' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '15' '11' 'Admin/Rule/rule_group' '分配許可權' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '16' '11' 'Admin/Rule/check_user' '新增成員' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '19' '21' 'Admin/Rule/admin_user_list' '管理員列表' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '20' '0' 'Admin/ShowNav/config' '系統設定' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '6' '0' 'Admin/Index/index' '後臺首頁' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '64' '1' 'Admin/Nav/order' '選單排序' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '96' '6' 'Admin/Index/welcome' '歡迎介面' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '104' '0' 'Admin/ShowNav/posts' '文章管理' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '105' '104' 'Admin/Posts/index' '文章列表' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '106' '105' 'Admin/Posts/add_posts' '新增文章' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '107' '105' 'Admin/Posts/edit_posts' '修改文章' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '108' '105' 'Admin/Posts/delete_posts' '刪除文章' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '109' '104' 'Admin/Posts/category_list' '分類列表' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '110' '109' 'Admin/Posts/add_category' '新增分類' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '111' '109' 'Admin/Posts/edit_category' '修改分類' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '112' '109' 'Admin/Posts/delete_category' '刪除分類' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '117' '109' 'Admin/Posts/order_category' '分類排序' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '123' '11' 'Admin/Rule/add_user_to_group' '設定為管理員' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '124' '11' 'Admin/Rule/add_admin' '新增管理員' '1' '1' '' ); INSERT INTO `wifi_auth_rule` VALUES ( '125' '11' 'Admin/Rule/edit_admin' '修改管理員' '1' '1' '' );

實現步驟三:專案配置檔案config.php中新增

複製程式碼
'AUTH_CONFIG'=>array(
        'AUTH_ON' => true, //認證開關
        'AUTH_TYPE' => 1, // 認證方式,1為時時認證;2為登入認證。
        'AUTH_GROUP' => 'wifi_auth_group', //使用者組表
        'AUTH_GROUP_ACCESS' => 'wifi_auth_group_access', //使用者與使用者組關係表
        'AUTH_RULE' => 'wifi_auth_rule', //許可權表
        'AUTH_USER' => 'wifi_admin'//使用者表
    )
複製程式碼

實現步驟四:建立Common控制器,定義_initialize 方法,檢測當前使用者是否許可權(所有許可權驗證的類都需要繼承這個類),並規避不進行驗證的模組(配置檔案中定義的NOT_AUTH_MODULE)

複製程式碼 複製程式碼
<?php
class CommonAction extends Action{
    public function _initialize(){
      // 使用者許可權檢查
      import("ORG.Util.Auth");
      $auth=new Auth();
      $rule_name=GROUP_NAME.'/'.MODULE_NAME.'/'.ACTION_NAME;
      if (C('USER_AUTH_ON') && !in_array(MODULE_NAME, explode(',', C('NOT_AUTH_MODULE'))) && $rule_name != "Admin/Public/verify") {
         $result=$auth->check($rule_name,$_SESSION['authId']);
         if(!$result)
            $this->error('您沒有許可權訪問');
     }
   }
}
複製程式碼 複製程式碼

實現步驟五:

a.選單管理:(NavAction控制器,AdminNavModel模型),對後臺選單進行增刪改查排序等

b.許可權管理:許可權管理功能。RuleAction控制器 AuthRuleModel模型 AuthGroupModel模型 AuthGroupAccessModel模型

   1、對許可權進行展示、新增、修改、刪除
   2、對使用者組進行許可權分配、使用者繫結、展示、新增、修改、刪除
   3、對管理員進行使用者組繫結與資訊修改