tp5的rbac包重大更新加入JWT支持,更加簡單的表生成方式,兼容SPA應用

更新內容瀏覽

  • 修復issues中的若干問題
  • 刪除了過去角色的可繼承關係。在日常使用中我們一般會用多角色來處理而很少會用到繼承
  • rbac可以從業務剝離使用單獨的數據庫來實現,針對issues中所說的如果有表前綴的情況進行了適配 #7
  • 增加了jwt方式驗證時token的生成,token的刷新,token的驗證
  • rbac表名不可通過配置來改變(這種個性化在通用的rbac中是無意義的)
  • 減少對於user操作的干涉,不限制開發者對user的豐富
  • 角色創建同時分配權限啓用以往的單獨分配權限的繁瑣

安裝方法

先安裝composer如果不知道怎麼安裝使用composer請自行百度。
打開命令行工具切換到你的tp5項目根目錄

composer require gmars/tp5-rbac

github地址:https://github.com/gmars/tp5-rbac

v2.0+版本使用說明

配置

請將此配置加在config/app.php的配置中

'rbac' => [
    'type' => 'jwt',    //驗證方式 jwt(token方式)形式或者service(基於cookie)方式
    'db' => '',        //rbac要使用的數據庫配置爲空則爲默認庫(生成表的前綴依賴此配置)
    'salt_token' => 'asdfasfdafasf',    //token加密密鑰
    'token_key' => 'Authorization'      //header中用於驗證token的名稱
]

使用說明

實例化rbac

$rbac = new Rbac();

管理操作

初始化rbac所需的表

//可傳入參數$db爲數據庫配置項默認爲空則爲默認數據庫(考慮到多庫的情形)
$rbac->createTable();

該方法會生成rbac所需要的表,一般只執行一次,爲了安全,執行後會加鎖,下次要執行需要刪除鎖文件再執行。

創建權限分組

$rbac->savePermissionCategory([
    'name' => '用戶管理組',
    'description' => '網站用戶的管理',
    'status' => 1
]);

編輯和修改調用同一個方法編輯時請在參數中包含主鍵id的值

創建權限節點

$rbac->createPermission([
    'name' => '文章列表查詢',
    'description' => '文章列表查詢',
    'status' => 1,
    'type' => 1,
    'category_id' => 1,
    'path' => 'article/content/list',
]);
  • 如果爲修改則在傳入參數數組中加入主鍵id的鍵值
  • type爲權限類型1爲後端權限2爲前端權限主要考慮到spa使用
  • category_id爲上一步創建的權限分組的id
  • 創建成功返回添加的該條權限數據,錯誤拋出異常

創建角色&給角色分配權限

$rbac->createRole([
    'name' => '內容管理員',
    'description' => '負責網站內容管理',
    'status' => 1
], '1,2,3');
  • 如果修改請在第一個參數中傳入主鍵的鍵值
  • 第二個參數爲權限節點的id拼接的字符串請使用英文逗號

給用戶分配角色

$rbac->assignUserRole(1, [1]);
  • 該方法會刪除用戶之前被分配的角色
  • 第一個參數爲用戶id
  • 第二個參數爲角色id的數組

獲取權限分組列表

$rbac->getPermissionCategory([['status', '=', 1]]);
  • 參數支持傳入id查詢單條數據和標準的where表達式查詢列表傳爲空數組則查詢所有

獲取權限列表

$rbac->getPermission([['status', '=', 1]]);
  • 參數支持傳入id查詢單條數據和標準的where表達式查詢列表傳爲空數組則查詢所有

獲取角色列表

$rbac->getRole([], true);
  • 第一個參數支持傳入id查詢單條數據和標準的where表達式查詢列表傳爲空數組則查詢所有
  • 第二個參數選擇是否查詢角色分配的所有權限id默認爲true

刪除權限分組

$rbac->delPermissionCategory([1,2,3,4]);
  • 參數支持傳入單個id或者id列表

刪除權限

$rbac->delPermission([1,2,3,4]);
  • 參數支持傳入單個id或者id列表

刪除角色

$rbac->delRole([1,2,3,4]);
  • 參數支持傳入單個id或者id列表
  • 刪除角色會刪除給角色分配的權限[關聯關係]

驗證操作

service方式

service方式因爲要用到session一般要依賴於cookie。在用戶登錄後要獲取用戶權限操作

$rbac->cachePermission(1);
  • 傳入參數爲登錄用戶的user_id
  • 該方法會返回該用戶所有的權限列表

用戶請求時進行驗證

$rbac->can('article/channel/list');
  • 如果有權限返回true如果沒有權限返回false

jwt方式

jwt方式在前後端分離結構用的比較普遍。在用戶登錄後需要獲取token

$rbac->generateToken(1);
  • 第一個參數爲登錄的用戶id
  • 第二個參數爲token有效期默認爲7200秒
  • 第三個參數爲token前綴
    返回結果爲
array(3) {
  ["token"] => string(32) "4c56b80f06d3d8810b97db33a1291694"
  ["refresh_token"] => string(32) "17914241bde6bfc46b20e643b2c58279"
  ["expire"] => int(7200)
}

使用refresh_token刷新權限

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

請在有效期內使用refresh_token來刷新授權
用戶請求時驗證

$rbac->can('article/channel/list');
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章