欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

怎么在thinkPHP5中使用Rabc實(shí)現(xiàn)權(quán)限管理-創(chuàng)新互聯(lián)

這篇文章給大家介紹怎么在thinkPHP5中使用Rabc實(shí)現(xiàn)權(quán)限管理,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

成都創(chuàng)新互聯(lián)專注于商州網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供商州營(yíng)銷型網(wǎng)站建設(shè),商州網(wǎng)站制作、商州網(wǎng)頁設(shè)計(jì)、商州網(wǎng)站官網(wǎng)定制、小程序開發(fā)服務(wù),打造商州網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供商州網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

一:gmars/tp5-rbac安裝


composer require gmars/tp5-rbac


二:gmars/tp5-rbac使用

1:Rbac數(shù)據(jù)庫創(chuàng)建

gmars/tp5-rbac中我們需要使用到六張表,分別為:權(quán)限節(jié)點(diǎn)表(permission),permission_category(權(quán)限分組表),role(角色表),role_permission(角色權(quán)限關(guān)聯(lián)表),user(用戶表),user_role(用戶角色關(guān)聯(lián)表)

當(dāng)我們使用composer將gmars/tp5-rbac下載下來之后,我們可以發(fā)現(xiàn)在vendorgmarstp5-rbac目錄下有一個(gè)gmars_rbac.sql文件,此文件內(nèi)就為我們所需要?jiǎng)?chuàng)建表的sql

下面sql中###為你的表前綴,下面只是展示我們呢所需要的表sql,創(chuàng)建表gmars/tp5-rbac提供了方法來幫我們自動(dòng)創(chuàng)建我們所需要的表

//實(shí)例化rbac
$rbac = new Rbac();
//初始化rbac所需的表,可傳入?yún)?shù)$db為數(shù)據(jù)庫配置項(xiàng)默認(rèn)為空則為默認(rèn)數(shù)據(jù)庫(考慮到多庫的情形)
$rbac->createTable();

上面的方法會(huì)生成rbac所需要的表,一般只執(zhí)行一次,為了安全,執(zhí)行后會(huì)加鎖,下次要執(zhí)行需要?jiǎng)h除鎖文件再執(zhí)行

(1):權(quán)限節(jié)點(diǎn)表(permission)

DROP TABLE IF EXISTS `###permission`;
CREATE TABLE `###permission` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(50) NOT NULL DEFAULT '' COMMENT '權(quán)限節(jié)點(diǎn)名稱',
 `type` smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT '權(quán)限類型1api權(quán)限2前路由權(quán)限',
 `category_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '權(quán)限分組id',
 `path` varchar(100) NOT NULL DEFAULT '' COMMENT '權(quán)限路徑',
 `path_id` varchar(100) NOT NULL DEFAULT '' COMMENT '路徑編碼',
 `description` varchar(200) NOT NULL DEFAULT '' COMMENT '描述信息',
 `status` smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT '狀態(tài)0未啟用1正常',
 `create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '創(chuàng)建時(shí)間',
 PRIMARY KEY (`id`),
 KEY `idx_permission` (`path_id`,`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='權(quán)限節(jié)點(diǎn)表';

(2):permission_category(權(quán)限分組表

SET FOREIGN_KEY_CHECKS=0;
DROP TABLE IF EXISTS `###permission_category`;
CREATE TABLE `###permission_category` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '權(quán)限分組名稱',
 `description` varchar(200) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '權(quán)限分組描述',
 `status` smallint(4) unsigned NOT NULL DEFAULT '1' COMMENT '權(quán)限分組狀態(tài)1有效2無效',
 `create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '權(quán)限分組創(chuàng)建時(shí)間',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT '權(quán)限分組表';

(3):role(角色表)

DROP TABLE IF EXISTS `###role`;
CREATE TABLE `###role` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(50) NOT NULL DEFAULT '' COMMENT '角色名',
 `description` varchar(200) NOT NULL DEFAULT '' COMMENT '角色描述',
 `status` smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT '狀態(tài)1正常0未啟用',
 `sort_num` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '排序值',
 PRIMARY KEY (`id`),
 KEY `idx_role` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';

(4):role_permission(角色權(quán)限關(guān)聯(lián)表)

DROP TABLE IF EXISTS `###role_permission`;
CREATE TABLE `###role_permission` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `role_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '角色編號(hào)',
 `permission_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '權(quán)限編號(hào)',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色權(quán)限對(duì)應(yīng)表';

(5):user(用戶表)

DROP TABLE IF EXISTS `###user`;
CREATE TABLE `###user` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `user_name` varchar(50) NOT NULL DEFAULT '' COMMENT '用戶名',
 `password` varchar(64) NOT NULL DEFAULT '' COMMENT '用戶密碼',
 `mobile` varchar(20) NOT NULL DEFAULT '' COMMENT '手機(jī)號(hào)碼',
 `last_login_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最后一次登錄時(shí)間',
 `status` smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT '狀態(tài)0禁用1正常',
 `create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '賬號(hào)創(chuàng)建時(shí)間',
 `update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '信息更新時(shí)間',
 PRIMARY KEY (`id`),
 KEY `idx_user` (`user_name`,`mobile`,`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶表';

(6):user_role(用戶角色關(guān)聯(lián)表)

DROP TABLE IF EXISTS `###user_role`;
CREATE TABLE `###user_role` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `user_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '用戶id',
 `role_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '角色id',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶角色對(duì)應(yīng)關(guān)系';

2:rbac的相關(guān)操作

(1)創(chuàng)建權(quán)限分組

//實(shí)例化rbac
$rbac = new Rbac();
//創(chuàng)建權(quán)限分組
$rbac->savePermissionCategory([
  'name' => '用戶管理組',
  'description' => '網(wǎng)站用戶的管理',
  'status' => 1
]);

當(dāng)savePermissionCategory方法中包含了主鍵id時(shí)為編輯權(quán)限分組

(2)創(chuàng)建權(quán)限節(jié)點(diǎn)

//實(shí)例化rbac
$rbac = new Rbac();
//創(chuàng)建權(quán)限節(jié)點(diǎn)
$rbac->createPermission([
  'name' => '文章列表查詢',
  'description' => '文章列表查詢',
  'status' => 1,
  'type' => 1,//type為權(quán)限類型1為后端權(quán)限2為前端權(quán)限
  'category_id' => 1,//權(quán)限分組的id
  'path' => 'article/content/list',
]);

當(dāng)createPermission方法中包含了主鍵id時(shí)為編輯權(quán)限節(jié)點(diǎn)

(3)創(chuàng)建角色&給角色分配權(quán)限

//實(shí)例化rbac
$rbac = new Rbac();
//創(chuàng)建角色&給角色分配權(quán)限
$rbac->createRole([
  'name' => '內(nèi)容管理員',
  'description' => '負(fù)責(zé)網(wǎng)站內(nèi)容管理',
  'status' => 1
], '1,2,3');

當(dāng)createRole方法的第一個(gè)參數(shù)中包含了主鍵id時(shí)為編輯角色,第二個(gè)參數(shù)為權(quán)限節(jié)點(diǎn)的id拼接的字符串

(4)給用戶分配角色

//實(shí)例化rbac
$rbac = new Rbac();
//給用戶分配角色
$rbac->assignUserRole(1, [1]);

第一個(gè)參數(shù)為用戶id,第二個(gè)參數(shù)為角色id的數(shù)組,此方法會(huì)先刪除用戶之前分配的角色,然后重新給用戶分配角色

(5)獲取權(quán)限分組列表

//實(shí)例化rbac
$rbac = new Rbac();
//獲取權(quán)限分組列表
$rbac->getPermissionCategory([['status', '=', 1]]);//參數(shù)為權(quán)限分組表的條件

(6)獲取權(quán)限列表

//實(shí)例化rbac
$rbac = new Rbac();
//獲取權(quán)限列表
$rbac->getPermission([['status', '=', 1]]);//參數(shù)為權(quán)限表?xiàng)l件

(7)獲取角色列表

//實(shí)例化rbac
$rbac = new Rbac();
//獲取角色列表
$rbac->getRole([], true);

第一個(gè)參數(shù)為role表的條件,第二個(gè)參數(shù)為true時(shí)查詢角色分配的所有權(quán)限id

(8)刪除權(quán)限相關(guān)方法

刪除權(quán)限分組
$rbac->delPermissionCategory([1,2,3,4]);
刪除權(quán)限
$rbac->delPermission([1,2,3,4]);
刪除角色
$rbac->delRole([1,2,3,4]);

(9)權(quán)限驗(yàn)證

[1]service方式

service方式因?yàn)橐玫絪ession一般要依賴于cookie,在用戶登錄后獲取用戶權(quán)限并將用戶權(quán)限進(jìn)行緩存

$rbac->cachePermission(1);//參數(shù)為登錄用戶的user_id,返回值為用戶權(quán)限列表

驗(yàn)證,判斷用戶對(duì)于指定的節(jié)點(diǎn)是否具有權(quán)限:

$rbac->can('article/channel/list');

[2]jwt方式

jwt方式在前后端分離結(jié)構(gòu)用的比較普遍。在用戶登錄后需要獲取token,將下面方法獲取到的token傳遞到前端

$rbac->generateToken(1);//第一個(gè)參數(shù)為登錄的用戶id,第二個(gè)參數(shù)為token有效期默認(rèn)為7200秒,第三個(gè)參數(shù)為token前綴 返回結(jié)果為

返回值示例如下:

array(3) {
 ["token"] => string(32) "4c56b80f06d3d8810b97db33a1291694"
 ["refresh_token"] => string(32) "17914241bde6bfc46b20e643b2c58279"
 ["expire"] => int(7200)
}

使用refresh_token刷新權(quán)限,有效期內(nèi)使用refresh_token來刷新授權(quán)

$rbac->refreshToken('17914241bde6bfc46b20e643b2c58279');

驗(yàn)證,前端將token傳遞到后端,后端校驗(yàn)用戶是否具有指定節(jié)點(diǎn)權(quán)限

$rbac->can('article/channel/list');

關(guān)于怎么在thinkPHP5中使用Rabc實(shí)現(xiàn)權(quán)限管理就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

分享名稱:怎么在thinkPHP5中使用Rabc實(shí)現(xiàn)權(quán)限管理-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://www.chinadenli.net/article46/dchgeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站面包屑導(dǎo)航網(wǎng)站設(shè)計(jì)ChatGPT網(wǎng)站導(dǎo)航做網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)