国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - thinkPHP5使用Rabc實現權限管理

thinkPHP5使用Rabc實現權限管理

2019-08-28 13:05mrr PHP教程

這篇文章主要介紹了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數據庫創建

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

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

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

//實例化rbac
$rbac = new Rbac();
//初始化rbac所需的表,可傳入參數$db為數據庫配置項默認為空則為默認數據庫(考慮到多庫的情形)
$rbac->createTable();
上面的方法會生成rbac所需要的表,一般只執行一次,為了安全,執行后會加鎖,下次要執行需要刪除鎖文件再執行

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

DROP TABLE IF EXISTS `###permission`;
CREATE TABLE `###permission` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL DEFAULT '' COMMENT '權限節點名稱',
  `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 '狀態0未啟用1正常',
  `create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '創建時間',
  PRIMARY KEY (`id`),
  KEY `idx_permission` (`path_id`,`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='權限節點表';
(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 '權限分組狀態1有效2無效',
  `create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '權限分組創建時間',
  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 '狀態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 '狀態0禁用1正常',
  `create_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '賬號創建時間',
  `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)創建權限分組

//實例化rbac
$rbac = new Rbac();
//創建權限分組
$rbac->savePermissionCategory([
    'name' => '用戶管理組',
    'description' => '網站用戶的管理',
    'status' => 1
]);
當savePermissionCategory方法中包含了主鍵id時為編輯權限分組

(2)創建權限節點

//實例化rbac
$rbac = new Rbac();
//創建權限節點
$rbac->createPermission([
    'name' => '文章列表查詢',
    'description' => '文章列表查詢',
    'status' => 1,
    'type' => 1,//type為權限類型1為后端權限2為前端權限
    'category_id' => 1,//權限分組的id
    'path' => 'article/content/list',
]);
當createPermission方法中包含了主鍵id時為編輯權限節點

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

//實例化rbac
$rbac = new Rbac();
//創建角色&給角色分配權限
$rbac->createRole([
    'name' => '內容管理員',
    'description' => '負責網站內容管理',
    'status' => 1
], '1,2,3');
當createRole方法的第一個參數中包含了主鍵id時為編輯角色,第二個參數為權限節點的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,返回值為用戶權限列表
驗證,判斷用戶對于指定的節點是否具有權限:

$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傳遞到后端,后端校驗用戶是否具有指定節點權限

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美久久久精品 | 中文字幕免费看 | 国产欧美久久一区二区三区 | 我我色综合 | 高清国产一区 | 日韩专区视频 | 午夜电影网址 | 男人午夜视频在线观看 | 国产天堂| 日韩欧美精品一区二区三区 | 国产成人精品一区二区三区四区 | 香蕉福利视频 | 成人日韩视频在线观看 | 一本大道香蕉大a√在线 | 91激情在线 | 天天澡天天狠天天天做 | 在线a视频 | 日韩欧美一区二区三区久久婷婷 | av在线精品 | 亚洲视频在线观看 | 最新国产在线 | 免费av一区二区三区 | 天堂资源最新在线 | 日韩激情一区二区 | 青青草91在线视频 | 日韩欧美视频一区二区 | 黑人中文字幕一区二区三区 | 亚洲欧美日韩精品久久奇米色影视 | 亚洲视频在线观看免费 | t66y最新地址一地址二69 | 午夜伦4480yy私人影院 | 91国自产精品中文字幕亚洲 | 欧美精品网站 | 久久福利电影 | 精品国产一区二区三区av性色 | 精彩视频一区二区三区 | 精品一区二区三区免费 | 天堂精品一区二区三区 | 蜜桃视频一区二区 | 久久久亚洲精 | 草草视频网站 |