最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

thinkPHP5使用Rabc實現權限管理

 更新時間:2019年08月28日 10:33:20   作者:huaweichenai  
這篇文章主要介紹了thinkPHP5使用Rabc實現權限管理功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

在之前我們已經了解了think3.2Rbac的權限管理操作,但是在thinkPHP5中thinkPHP沒有內置Rabc操作,所以我們需要使用一個thinkPHP的Rbac拓展來實現權限管理,在thinkPHP中我們可以使用gmars/tp5-rbac拓展來實現權限管理

gmars/tp5-rbac地址: https://packagist.org/package...

一:gmars/tp5-rbac安裝

composer require gmars/tp5-rbac

二:gmars/tp5-rbac使用

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

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

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

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

//實例化rbac
$rbac = new Rbac();
//初始化rbac所需的表,可傳入參數$db為數據庫配置項默認為空則為默認數據庫(考慮到多庫的情形)
$rbac->createTable();

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

(1):權限節(jié)點表(permission)

DROP TABLE IF EXISTS `###permission`;
CREATE TABLE `###permission` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(50) NOT NULL DEFAULT '' COMMENT '權限節(jié)點名稱',
 `type` smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT '權限類型1api權限2前路由權限',
 `category_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '權限分組id',
 `path` varchar(100) NOT NULL DEFAULT '' COMMENT '權限路徑',
 `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)建時間',
 PRIMARY KEY (`id`),
 KEY `idx_permission` (`path_id`,`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='權限節(jié)點表';

(2):permission_category(權限分組表

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 '權限分組名稱',
 `description` varchar(200) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '權限分組描述',
 `status` smallint(4) unsigned NOT NULL DEFAULT '1' COMMENT '權限分組狀態(tài)1有效2無效',
 `create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '權限分組創(chuàng)建時間',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT '權限分組表';

(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(角色權限關聯表)

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 '角色編號',
 `permission_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '權限編號',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色權限對應表';

(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 '手機號碼',
 `last_login_time` int(10) unsigned NOT NULL DEFAULT '0' 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)建時間',
 `update_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '信息更新時間',
 PRIMARY KEY (`id`),
 KEY `idx_user` (`user_name`,`mobile`,`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用戶表';

(6):user_role(用戶角色關聯表)

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='用戶角色對應關系';

2:rbac的相關操作

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

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

當savePermissionCategory方法中包含了主鍵id時為編輯權限分組

(2)創(chuàng)建權限節(jié)點

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

當createPermission方法中包含了主鍵id時為編輯權限節(jié)點

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

//實例化rbac
$rbac = new Rbac();
//創(chuàng)建角色&給角色分配權限
$rbac->createRole([
  'name' => '內容管理員',
  'description' => '負責網站內容管理',
  'status' => 1
], '1,2,3');

當createRole方法的第一個參數中包含了主鍵id時為編輯角色,第二個參數為權限節(jié)點的id拼接的字符串

(4)給用戶分配角色

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

第一個參數為用戶id,第二個參數為角色id的數組,此方法會先刪除用戶之前分配的角色,然后重新給用戶分配角色

(5)獲取權限分組列表

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

(6)獲取權限列表

//實例化rbac
$rbac = new Rbac();
//獲取權限列表
$rbac->getPermission([['status', '=', 1]]);//參數為權限表條件

(7)獲取角色列表

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

第一個參數為role表的條件,第二個參數為true時查詢角色分配的所有權限id

(8)刪除權限相關方法

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

(9)權限驗證

[1]service方式

service方式因為要用到session一般要依賴于cookie,在用戶登錄后獲取用戶權限并將用戶權限進行緩存

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

驗證,判斷用戶對于指定的節(jié)點是否具有權限:

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

[2]jwt方式

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

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

返回值示例如下:

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

使用refresh_token刷新權限,有效期內使用refresh_token來刷新授權

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

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

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

總結

以上所述是小編給大家介紹的thinkPHP5使用Rabc實現權限管理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

相關文章

  • Laravel ORM 數據model操作教程

    Laravel ORM 數據model操作教程

    今天小編就為大家分享一篇Laravel ORM 數據model操作教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • ThinkPHP文件上傳實例教程

    ThinkPHP文件上傳實例教程

    這篇文章主要介紹了ThinkPHP文件上傳實現方法,是ThinkPHP程序開發(fā)中非常常見的一個技巧,需要的朋友可以參考下
    2014-08-08
  • ThinkPHP之import方法實例詳解

    ThinkPHP之import方法實例詳解

    import方法是ThinkPHP框架用于類庫導入的封裝實現,這篇文章主要介紹了ThinkPHP的import方法,需要的朋友可以參考下
    2014-06-06
  • PHP receiveMail實現收郵件功能

    PHP receiveMail實現收郵件功能

    這篇文章主要為大家詳細介紹了PHP receiveMail實現收郵件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • Redis使用Eval多個鍵值自增的操作實例

    Redis使用Eval多個鍵值自增的操作實例

    下面小編就為大家?guī)硪黄猂edis使用Eval 多個鍵值自增的操作實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • thinkPHP5項目中實現QQ第三方登錄功能

    thinkPHP5項目中實現QQ第三方登錄功能

    這篇文章主要介紹了thinkPHP5項目中實現QQ第三方登錄功能,結合實例形式較為詳細的分析了修改QQ登陸接口并整合進thinkPHP5項目中的具體步驟與相關操作技巧,需要的朋友可以參考下
    2017-10-10
  • ThinkPHP防止重復提交表單的方法實例分析

    ThinkPHP防止重復提交表單的方法實例分析

    這篇文章主要介紹了ThinkPHP防止重復提交表單的方法,結合實例形式分析了thinkPHP防止重復提交表單的各種常見操作技巧與相關注意事項,需要的朋友可以參考下
    2018-05-05
  • 使用PHPStudy搭建Cloudreve網盤服務的流程步驟

    使用PHPStudy搭建Cloudreve網盤服務的流程步驟

    自云存儲概念興起已經有段時間了,各互聯網大廠也紛紛加入戰(zhàn)局,一時間公有云盤遍地開花,今天我們就為大家介紹,如何使用Cpolar與Cloudreve,在個人Windows電腦上搭建一個強大的PHP云盤系統(tǒng),需要的朋友可以參考下
    2024-02-02
  • php 在字符串指定位置插入新字符的簡單實現

    php 在字符串指定位置插入新字符的簡單實現

    下面小編就為大家?guī)硪黄猵hp 在字符串指定位置插入新字符的簡單實現。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • win平臺安裝配置Nginx+php+mysql 環(huán)境

    win平臺安裝配置Nginx+php+mysql 環(huán)境

    本文給大家分享的是win平臺安裝配置Nginx+php+mysql 環(huán)境的方法和步驟,有需要的小伙伴可以參考下。
    2016-01-01

最新評論

柘荣县| 锡林浩特市| 博客| 阜南县| 新宁县| 汨罗市| 镇赉县| 平凉市| 泰和县| 正蓝旗| 梁平县| 贡觉县| 文登市| 唐河县| 遂溪县| 阿尔山市| 永安市| 桂阳县| 成安县| 永川市| 舟山市| 沙洋县| 云安县| 海南省| 通河县| 扬州市| 乌兰县| 洱源县| 开阳县| 胶南市| 澄迈县| 和龙市| 庆元县| 南木林县| 金平| 晋中市| 泾阳县| 万山特区| 渭源县| 晋江市| 柞水县|