# thinkphp5 auth 教程
1.表結構
~~~
DROP TABLE IF EXISTS `think_auth_group`;
CREATE TABLE `think_auth_group` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`title` char(100) NOT NULL DEFAULT '' COMMENT '用戶組中文名稱',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '狀態 : 1為正常,0為禁用',
`rules` char(80) NOT NULL DEFAULT '' COMMENT '規則ID (這里填寫的是 tp_auth_rule里面的規則的ID)',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='用戶組表';
DROP TABLE IF EXISTS `think_auth_rule`;
CREATE TABLE `think_auth_rule` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '規則id',
`name` char(80) NOT NULL DEFAULT '' COMMENT '規則名稱,格式 為【模塊名/控制器名/方法名】或【自定義規則】,多個規則之間用,隔開即可',
`title` char(20) NOT NULL DEFAULT '' COMMENT '規則中文名稱',
`type` tinyint(1) NOT NULL DEFAULT '1'
COMMENT '如果type為1,condition字段就可以定義規則表達式。如定義{score}>5 and {score}<100 表示用戶的分數在5-100之間時這條規則才會通過。(默認為1)',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1為正常,0為禁用',
`condition` char(100) NOT NULL DEFAULTCOMMENT '規則表達式,不為空and type字段=1 會按照條件驗證 ',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `think_auth_group_access`;
CREATE TABLE `think_auth_group_access` (
`uid` mediumint(8) unsigned NOT NULL COMMENT '用戶id',
`group_id` mediumint(8) 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 ='用戶組明細表';
CREATE table think_user(
id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
name varchar(99) ,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT ='用戶表';
~~~
2.介紹
~~~
在 tp_auth_rule里面添加一個或多個驗證規則用來驗證你的訪問權限
(Admin/Article/Add)增加文章的權限
(Admin/Article/Edit)修改文章的權限
(Admin/Article/Delete)刪除文章的權限
Ps:這3個規則可以合并成一個規則,合并成一個規則的話就是:
(Admin/Article/Add,Admin/Article/Edit,Admin/Article/Delete);
也可以寫成(Article-Add-Edit-Delete)這樣的 意思是擁有文章的增刪改權限
~~~
3.數據錄入
~~~
-- id為1: Admin/Article/Add 增加文章的權限
-- id為2: Admin/Article/Edit 修改文章的權限
-- id為3: Admin/Article/Delete 刪除文章的權限
-- id為4: Article-Add-Edit-Delete 擁有文章的增刪改權限
insert into think_auth_rule (name,title)
select 'Admin/Article/Add','增加文章的權限';
insert into think_auth_rule (name,title)
select 'Admin/Article/Edit','修改文章的權限';
insert into think_auth_rule (name,title)
select 'Admin/Article/Delete','刪除文章的權限';
insert into think_auth_rule (name,title)
select 'Article-Add-Edit-Delete','擁有文章的增刪改權限';
-- 信息錄入部門的 rules需要的規則為: 1,2,3
-- 信息審核部門需要的是:2,3
-- 信息管理部門需要的是 4
INSERT into think_auth_group (title,rules)
select '信息錄入部門','1,2,3';
INSERT into think_auth_group (title,rules)
select '信息審核部門','2';
INSERT into think_auth_group (title,rules)
select '信息管理部門','4';
-- 錄入用戶信息
insert into think_user (name)
select '小紅' union select '小明' union select '小張' union select '小李'
-- 下面分配權限:
-- 小紅和小明是信息錄入部門的:
-- 那么tp_auth_access如下:
-- uid為 1 的小紅 所屬認證部為 1(1也就是認證組表中的信息錄入部門,擁有增加、修改、刪除的權限)
-- uid為 2 的小明 同小紅一個級別(功能一樣)
-- uid為 3 的小張 所屬認證部為 2 (2也就是認證組表中的信息審核部,擁有修改、刪除的權限)
-- uid為 4 的小李 所屬認證部為 3 (3也就是認證表中的信息XX部 擁有信息的 增加、修改、刪除的權限)
INSERT into think_auth_group_access
select 1,1
UNION
select 2,1
union
select 3,2
UNION
select 4,3
~~~
4.權限認證類基本使用
~~~
1,是對規則進行認證,不是對節點進行認證。用戶可以把節點當作規則名稱實現對節點進行認證。
$auth=new Auth(); $auth->check('規則名稱','用戶id');
2,可以同時對多條規則進行認證,并設置多條規則的關系(or或者and)
$auth=new Auth(); $auth->check('規則1,規則2','用戶id','and')
第三個參數為and時表示,用戶需要同時具有規則1和規則2的權限。 當第三個參數為or時,表示用戶值需要具備其中一個條件即可。默認為or
3,一個用戶可以屬于多個用戶組(think_auth_group_access表 定義了用戶所屬用戶組)。我們需要設置每個用戶組擁有哪些規則(think_auth_group 定義了用戶組權限)
4,支持規則表達式。
在think_auth_rule 表中定義一條規則時,如果type為1, condition字段就可以定義規則表達式。 如定義{score}>5 and {score}<100 表示用戶的分數在5-100之間時這條規則才會通過。
~~~
6.auth 配置
~~~
Ps:在使用auth之前,要先配置下auth所用的配置項:
如果你沒修改auth_rule,auth_group,auth_group_access表名稱的話,只要配置你的會員表即可。在配置項中增加以下配置項:
//Auth配置
'auth' => array(
// 用戶組數據表名
//'auth_group' => 'tp_group',
// 用戶-用戶組關系表
//'auth_group_access' => 'tp_group_access',
// 權限規則表
//'auth_rule' => 'tp_rule',
// 用戶信息表
'auth_user' => 'think_user'
),
~~~
7.開始測試
~~~
$auth = new Auth();
/*
驗證單個條件
驗證 會員id 為 1 的 小紅是否有 增加信息的權限
check方法中的參數解釋:
參數1:Admin/Article/Add 假設我現在請求 Admin模塊下Article控制器的Add方法
參數2: 1 為當前請求的會員ID
*/
$check = $auth->check('Admin/Article/Add','1');
dump($check); //返回值true,代表有此權限
//檢查用戶id號等于3的,是否有此權限
$check = $auth->check('Admin/Article/Add','3');
dump($check); //返回值false,沒有此權限
/*
同時驗證多個條件
驗證 會員id 為 1 的小紅是否有增加信息,修改信息 和一個不存在的規則 的權限
參數解釋:
參數1:多條規則同時驗證 , 驗證是否擁有增加、修改、刪除的權限
參數2:當前請求的會員ID
*/
$check = $auth->check('Admin/Article/Add,Admin/Article/CF','1');
dump($check); // ps :CF是一個不存在的規則為什么會返回真呢? 因為check方法 第5個參數默認為 or 也就是說 多個規則中只要滿足一個條件即為真
$check = $auth->check('Admin/Article/Add,Admin/Article/CF','1','and');
dump($check); // false
~~~
- tp5
- thinkphp5Auth教程
- thinkphp5Auth類
- thinkphp5鉤子詳解
- 多語言
- 日常函數記錄
- register_shutdown_function
- number_format
- call_user_func
- call_user_func_array
- parse_str
- php數組
- chdir
- strtr
- pathinfo
- version_compare
- func_get_args
- stristr
- 常用環境變量
- php字符串操作
- php文件操作
- php時間操作
- phpcli
- php 替換
- php錯誤函數
- mysql
- from_unixtime
- 日期類型
- mysql 優化
- if
- 常用類
- 前端
- Seaslog日志
- composer
- 大型網站提速關鍵技術
- php插件機制
- 微信
- 每天一個linux
- memcache筆記
- 昂捷ERP筆記
- redis
- sphinex
- 我的學習路徑
- php技術雜項
- php反射
- php閉包
- php正則
- apache 重寫規則
- php異常處理
- php錯誤處理
- php ob緩存
- php 解析xml
- php curl介紹
- lamp
- lnmp
- http
- http緩存控制
- php命令行
- svn
- git
- mssql
- xml