隨著互聯(lián)網(wǎng)應(yīng)用的發(fā)展,權(quán)限管理已經(jīng)成為了應(yīng)用開發(fā)中不可或缺的一部分。在開發(fā)過程中,我們需要對(duì)不同的用戶分配不同的權(quán)限,以達(dá)到數(shù)據(jù)安全和操作權(quán)限控制的目的。而thinkphp6框架中的auth認(rèn)證權(quán)限操作,為我們提供了一種簡單易用的解決方案。
什么是Auth認(rèn)證權(quán)限操作?
Auth是Thinkphp6框架中的一款權(quán)限管理插件,它通過對(duì)角色、用戶、權(quán)限、規(guī)則等進(jìn)行定義與管理,實(shí)現(xiàn)了一套高效可控的權(quán)限管理機(jī)制。它的優(yōu)點(diǎn)在于操作簡單、適應(yīng)性強(qiáng)、可控性高、可擴(kuò)展性好等特點(diǎn),在企業(yè)級(jí)應(yīng)用中應(yīng)用廣泛。
在這里我們講解一下thinkphp6中如何使用Auth實(shí)現(xiàn)權(quán)限管理。
認(rèn)證權(quán)限機(jī)制
立即學(xué)習(xí)“PHP免費(fèi)學(xué)習(xí)筆記(深入)”;
在使用Auth前,我們需要了解一下它的認(rèn)證權(quán)限機(jī)制。它的角色、用戶、權(quán)限、規(guī)則等概念的定義如下:
- 角色(Role):是指為一個(gè)或多個(gè)用戶分配權(quán)限的一種許可單元。
- 用戶(User):系統(tǒng)中的一個(gè)個(gè)體,可以是一個(gè)真實(shí)用戶,也可以是一個(gè)系統(tǒng)賬戶。
- 權(quán)限(Permission):指為用戶(或角色)授權(quán)的操作行為,類似于數(shù)據(jù)庫中的權(quán)限設(shè)置。
- 規(guī)則(Rule):指為權(quán)限設(shè)置一些限制條件,例如:時(shí)間段限制、限定IP等。
具體來說,我們可以將一些常見的權(quán)限定義如下:
- 菜單權(quán)限:指對(duì)應(yīng)用的某個(gè)菜單進(jìn)行訪問控制,可以讓不同的用戶看到不同的菜單項(xiàng)。
- 操作權(quán)限:指對(duì)應(yīng)用的某個(gè)操作行為進(jìn)行訪問控制,可以讓不同的用戶擁有不同的操作權(quán)限。
- 數(shù)據(jù)權(quán)限:指對(duì)應(yīng)用中某個(gè)數(shù)據(jù)訪問進(jìn)行控制,可以限制用戶只能看到或修改自己所關(guān)聯(lián)的數(shù)據(jù)。
- 字段權(quán)限:指對(duì)應(yīng)用中某個(gè)字段進(jìn)行訪問控制,可以限制用戶只能看到或修改自己所關(guān)聯(lián)的字段。
認(rèn)證權(quán)限操作實(shí)現(xiàn)
有了認(rèn)證權(quán)限機(jī)制的基本概念,我們就可以開始ThinkPHP6中的Auth認(rèn)證權(quán)限操作了。
- 安裝Auth插件
首先我們需要確保在應(yīng)用中已經(jīng)安裝Auth插件,可以通過以下命令安裝:
composer require topthink/think-auth
- 引入Auth中間件
在應(yīng)用中使用Auth需要使用中間件,在config/middleware.php中進(jìn)行配置:
return [ //全局中間件列表 'global' => [ hinkmiddlewareSessionInit::class, hinkmiddlewareLoadLangPack::class, hinkmiddlewareCheckRequestCache::class, hinkmiddlewareSendFile::class, ], //中間件別名 'alias' => [ 'auth' => hinkmiddlewareAuth::class, ], ];
- 定義權(quán)限規(guī)則
在應(yīng)用初始化時(shí),我們需要定義一些權(quán)限規(guī)則,這些規(guī)則將被用于權(quán)限認(rèn)證,例如:
use thinkacadeAuth; //定義規(guī)則 Auth::rule('admin.user/index', 'checkAdmin'); Auth::rule('admin.user/add', 'checkAdmin'); Auth::rule('admin.user/edit', 'checkAdmin'); Auth::rule('admin.user/del', 'checkAdmin');
在上面的代碼中,我們定義了基本的用戶管理權(quán)限規(guī)則,如果沒有這些權(quán)限則無法訪問對(duì)應(yīng)的控制器操作。
- 角色和用戶授權(quán)
我們需要在應(yīng)用中為角色和用戶進(jìn)行授權(quán),可以在應(yīng)用初始化時(shí)進(jìn)行授權(quán):
//定義角色 Auth::group('admin', function () { //設(shè)置角色權(quán)限 Auth::setRule([ 'admin.user/index', 'admin.user/add', 'admin.user/edit', 'admin.user/del', ]); }); //定義用戶并授權(quán) Auth::user('admin', function () { Auth::addToGroup('admin')//添加角色 ->addPermission(['admin.user/add'])//添加權(quán)限 ->removePermission(['admin.user/del']);//移除權(quán)限 });
在上面的代碼中,我們定義一個(gè)名為admin的角色,并設(shè)置對(duì)應(yīng)的權(quán)限規(guī)則。然后我們又定義一個(gè)名為admin的用戶,該用戶擁有了admin角色,并對(duì)admin.user/add權(quán)限進(jìn)行了授權(quán),對(duì)admin.user/del權(quán)限進(jìn)行了移除。
- 進(jìn)行認(rèn)證
在我們進(jìn)行權(quán)限認(rèn)證前,可以在控制器中先進(jìn)行角色、用戶、權(quán)限等的判斷:
use thinkacadeAuth; class User extends Controller { //進(jìn)行認(rèn)證 public function index() { //驗(yàn)證用戶是否登錄,沒有登錄則跳轉(zhuǎn)到登錄頁面 if (!Auth::check()) { return redirect('admin/auth/login'); } //驗(yàn)證是否為超級(jí)管理員,是則直接放行 if (Auth::isSuperAdmin()) { return $this->view->assign('username', Auth::getUser()['username'])->fetch(); } //驗(yàn)證是否為管理員角色,是則驗(yàn)證權(quán)限,否則跳轉(zhuǎn)到其他頁面 if (Auth::group('admin')->check()) { if (Auth::check('admin.user/index')) { return $this->view->assign('username', Auth::getUser()['username'])->fetch(); } else { return redirect('admin/index/model_error'); } } else { return redirect('admin/index/role_error'); } } }
在上面的代碼中,我們進(jìn)行了用戶登錄驗(yàn)證、超級(jí)管理員驗(yàn)證、以及角色和權(quán)限驗(yàn)證等操作,最終返回對(duì)應(yīng)的頁面或進(jìn)行跳轉(zhuǎn)。
總結(jié)
通過以上的操作,我們可以使用ThinkPHP6框架中的Auth認(rèn)證權(quán)限操作實(shí)現(xiàn)簡單、高效、可控的應(yīng)用程序權(quán)限管理,保障數(shù)據(jù)安全和操作權(quán)限控制。在使用過程中,為了保證應(yīng)用程序的安全性,我們需要仔細(xì)設(shè)置各種權(quán)限規(guī)則,限定對(duì)應(yīng)的用戶和角色權(quán)限,提高應(yīng)用程序的可擴(kuò)展性和可控性。