tp rbac應該這麼用

2022-02-24 03:13:35 字數 3149 閱讀 2050

composer require gmars/tp5-rbac

如果該方法報錯請按照以下方式操作:

開啟專案根目錄下的composer.json

在require中新增"gmars/tp5-rbac": "dev-master"

執行composer update

新增後composer.json應該有這樣的部分: 

"

require

": ,

這一步完成後系統會在autoload_psr4.php中新增了配置,如果呼叫報錯不存在就要檢查這裡。

2.資料遷移

##資料遷移(可選,可以直接使用包中的gmars_rbac.sql檔案匯入)在使用本外掛程式之前需要有rbac鎖需要的資料庫。在遷移之前如果你的資料庫中已有user資料表那麼請你備份自己的user資料表後刪除。

在你的專案的某個config.php中加入如下配置:

'

migration

' =>[  '

path

' => root_path .'

vendor/gmars/tp5-rbac/

'],

然後把命令列切換到你的專案根目錄windows是cmd執行tp5資料遷移命令

php think migrate:run

如果遷移執行成功會在你的資料庫中生成如下幾張表:

user 使用者表

user_role 使用者角色對應表

role 角色表

role_permission 角色許可權對應表

permission 角色表

###使用該外掛程式--rbac的管理

在乙個系統中rbac是基於角色的許可權控制。作為開發人員需要明白這是兩個不同的過程。第乙個就是構建系統的rbac結構,包括新增許可權,角色,使用者,使用者角色對應關係,角色許可權對應關係等。

在此先說明rbac管理:

1.新增使用者

這一步是在使用者註冊時要做的一步,就是講註冊的使用者新增到user表中。

$rbacobj =newrbac();

$data =['user_name'=>'zhangsan','status'=>1,'password'=>md5('zhangsan')];

$rbacobj->createuser($data);

建立使用者時傳入唯一乙個引數必須是陣列。陣列中應該包含使用者表需要的資料。如果出現其他非user表的字段則會丟擲異常。 該方法返回的結果為false或者exception或者新新增使用者的id。

2.新增許可權

這一步是構建系統的許可權。一般我們是以請求的路由為許可權的識別標誌。在該外掛程式中使用path欄位。

例如我們的系統中有商品列表這樣的乙個操作需要授權。

其路由為 /index/goods/list

新增路由如下:

$rbacobj =newrbac();

$data =[

'name'=>'商品列表',

'status'=>1,

'description'=>'檢視商品的所有列表',

'path'=>'/index/goods/list',

'create_time'=>time()

];$rbacobj->createpermission($data);

3.新增角色

在rbac的角色中角色是有父子關係的,也就是說所新增的角色可以是另乙個角色的子角色。

$rbacobj =newrbac();

$data =[

'name'=>'商品管理員',

'status'=>1,

'description'=>'商品管理員負責商品的檢視修改刪除等操作',

'sort_num'=>10,

'parent_id'=>1

];$rbacobj->createrole($data);

需要注意的是在data中有個字段為parent_id這個字段標識了所要新增的角色的父角色。如果留為空則便是新增的父角色。

4.為使用者分配角色

當然乙個使用者可以有多個角色。一般是使用多選框或其他形式選擇後以陣列的方式傳入的。

例如:$rbacobj =newrbac();

$rbacobj->assignuserrole(1,[1,2]);

assignuserrole($userid,array $rolearray =)

該方法的第乙個引數為使用者id第二個引數是乙個一位陣列,其元素為角色的id

5.為角色分配許可權

例如:$rbacobj =newrbac();

$rbacobj->assignrolepermission(1,[1,2]);

將id分別為1,2的許可權分配給id為1的角色

6.刪除角色

刪除角色的同時必須刪除角色和許可權的對應資料

$rbacobj =newrbac();

$rbacobj->delrole(1);

其中需要傳入的是角色id

7.將乙個角色移到另乙個角色下

以上已經說明了角色是有父子關係的那麼肯定能夠移動其位置

$rbacobj =newrbac();

$rbacobj->moverole(1,3);

該例子是將id為1的角色移動到id為3的角色下作為子角色。

還有其他修改刪除等方法的文件日後再補全,功能是有的

###使用該外掛程式--rbac許可權驗證

####登入後獲取許可權列表 如果自己寫許可權驗證則請忽略這一步,如果要使用rbac外掛程式來驗證許可權則必須要這樣做。

在登入成功後做如下操作:

$rbacobj =newrbac();

$rbacobj->cachepermission(1);

這個方法是查詢id為1的使用者的所有許可權並且以path索引後存入cache

####請求時的許可權驗證

當然對於每乙個方法都要進行許可權驗證時我們一般是在某乙個父類中定義乙個方法進行許可權驗證,驗證如下:

$rbacobj =newrbac();

$rbacobj->can('/index/goods/list');

該方法是驗證當前使用者有沒有操作/index/goods/list的許可權,如果有則返回true如果無則返回false

應該這麼寫嗎?

應該這麼寫嗎?delphi windows sdk api 我想獲得表weixuclchild.tmoney和weixuwxchild.tmoney中的sum值 select sum weixuclchild.tmoney sum weixuwxchild.tmoney from weixuclch...

應該這麼寫嗎?

應該這麼寫嗎?delphi windows sdk api 我想獲得表weixuclchild.tmoney和weixuwxchild.tmoney中的sum值 select sum weixuclchild.tmoney sum weixuwxchild.tmoney from weixuclch...

簡歷應該這麼寫

工作至今看了很多的簡歷,發現不少求職者的簡歷抓不住重點。簡歷中什麼最重要?hr最關心什麼問題?獵頭聯合網認為應注重以下幾點 1.量體裁衣 2.內容突出 內容是一切,簡歷一定要突出你的經驗 能力以及過去的成就。你需要用證據來說明你的實力。記住要證明你以前的成就以及你的前雇主得到了什麼益處,包括你為他節...