auth類在thinkphp類庫里是原本就有的擦囊,thinkphp5里沒了馆类,這里是將其修改為thinkphp5適用
auth類的特點(diǎn)是
/**
* 權(quán)限認(rèn)證類
* 功能特性:
* 1混聊,是對規(guī)則進(jìn)行認(rèn)證,不是對節(jié)點(diǎn)進(jìn)行認(rèn)證乾巧。用戶可以把節(jié)點(diǎn)當(dāng)作規(guī)則名稱實(shí)現(xiàn)對節(jié)點(diǎn)進(jìn)行認(rèn)證句喜。
* $auth=new Auth(); $auth->check('規(guī)則名稱','用戶id')
* 2,可以同時對多條規(guī)則進(jìn)行認(rèn)證沟于,并設(shè)置多條規(guī)則的關(guān)系(or或者and)
* $auth=new Auth(); $auth->check('規(guī)則1,規(guī)則2','用戶id','and')
* 第三個參數(shù)為and時表示咳胃,用戶需要同時具有規(guī)則1和規(guī)則2的權(quán)限。 當(dāng)?shù)谌齻€參數(shù)為or時旷太,表示用戶值需要具備其中一個條件即可展懈。默認(rèn)為or
* 3,一個用戶可以屬于多個用戶組(think_auth_group_access表 定義了用戶所屬用戶組)供璧。我們需要設(shè)置每個用戶組擁有哪些規(guī)則(think_auth_group 定義了用戶組權(quán)限)
*
* 4存崖,支持規(guī)則表達(dá)式。
* 在think_auth_rule 表中定義一條規(guī)則時睡毒,如果type為1来惧, condition字段就可以定義規(guī)則表達(dá)式。 如定義{score}>5 and {score}<100 表示用戶的分?jǐn)?shù)在5-100之間時這條規(guī)則才會通過吕嘀。
*/
接著導(dǎo)入數(shù)據(jù)庫表
//數(shù)據(jù)庫
/*
-- think_auth_rule违寞,規(guī)則表贞瞒,
-- id:主鍵,name:規(guī)則唯一標(biāo)識, title:規(guī)則中文名稱 status 狀態(tài):為1正常趁曼,為0禁用军浆,condition:規(guī)則表達(dá)式,為空表示存在就驗(yàn)證挡闰,不為空表示按照條件驗(yàn)證
DROP TABLE IF EXISTS think_auth_rule
;
CREATE TABLE think_auth_rule
(
id
mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
name
char(80) NOT NULL DEFAULT '',
title
char(20) NOT NULL DEFAULT '',
type
tinyint(1) NOT NULL DEFAULT '1',
status
tinyint(1) NOT NULL DEFAULT '1',
condition
char(100) NOT NULL DEFAULT '', # 規(guī)則附件條件,滿足附加條件的規(guī)則,才認(rèn)為是有效的規(guī)則
PRIMARY KEY (id
),
UNIQUE KEY name
(name
)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- think_auth_group 用戶組表乒融,
-- id:主鍵, title:用戶組中文名稱摄悯, rules:用戶組擁有的規(guī)則id赞季, 多個規(guī)則","隔開,status 狀態(tài):為1正常奢驯,為0禁用
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 '',
status
tinyint(1) NOT NULL DEFAULT '1',
rules
char(80) NOT NULL DEFAULT '',
PRIMARY KEY (id
)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- think_auth_group_access 用戶組明細(xì)表
-- uid:用戶id申钩,group_id:用戶組id
DROP TABLE IF EXISTS think_auth_group_access
;
CREATE TABLE think_auth_group_access
(
uid
mediumint(8) unsigned NOT NULL,
group_id
mediumint(8) unsigned NOT NULL,
UNIQUE KEY uid_group_id
(uid
,group_id
),
KEY uid
(uid
),
KEY group_id
(group_id
)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
*/
接著在需要權(quán)限驗(yàn)證控制器里創(chuàng)建_initialize方法進(jìn)行權(quán)限認(rèn)證
//權(quán)限認(rèn)證
$auth = new \Auth\Auth();
$request = Request::instance();
if (!$auth->check($request->module() . '-' . $request->controller() . '-' . $request->action(), UID)) {// 第一個參數(shù)是規(guī)則名稱,第二個參數(shù)是用戶UID
/* return array('status'=>'error','msg'=>'有權(quán)限!');*/
$this->error('你沒有權(quán)限');
}
其中$request->module();$request->controller();$request->action();分別問獲取模塊名瘪阁、控制器名撒遣、操作名可以在這里下載修改好的類
thinkphp5auth類下載地址下載好后放入extend擴(kuò)展里Auth文件夾下