[置頂] (十二) yii2 rbac使用DbManager來實現后臺的權限判斷
來源:程序員人生 發布時間:2015-04-17 08:58:16 閱讀次數:5421次
我用的是yii2的高級利用版本 (下載地址)
yii2 的分兩種1種是PhpManager,另外1種就是DbManager了
我下面用到的就是DbManager
第1步、配置你的mian.php
具體配置自己看yii的官網文檔吧: 文檔
return [
// ...
'components' => [
'authManager' => [
'class' => 'yii
bacDbManager',
],
// ...
],
];
第2步、生成數據表
yii migrate --migrationPath=@yii/rbac/migrations
如果不行在yii 前面增加php
數據庫已生成數據了有4個表
auth_assignment: 用戶角色表
auth_item_child: 角色跟權限關聯表
auth_item: 保存角色或權限
auth_rule: 規則表(目前我沒有用到)
第3步、生成model
在gii中生成這個4個表的model,但是還要增加兩個model才行
復制item稍作修改就行了,命名方式你們自己定。下面是我自己命名的:
RoleForm.php
PermissionForm.php
在官網文檔上可以看到yii-rbac-Role隱藏繼承的常量以下:
TYPE_PERMISSION 默許值 2
TYPE_ROLE 默許值 1
都定義在: yii
bacItem(你們看文檔rbac中的Role最底下就是咯)
</pre><pre name="code" class="php">由于這兩個model都是對auth_item表進行數據操作所以呢我們這兩個model只要繼承于AuthItem.php(也就是用gii對auth_item表成后的那個文件)然后修改下我們剛才多加的兩個model(RoleForm, PermissionForm)
第4步、修改RoleForm.php、PermissionForm.php
RoleForm.php內容以下:
class RoleForm extends AuthItem
{
public $child;//這個是用來放權限的
public function init() {
parent::init();
//常量TYPE_ROLE=1
$this->type = Item::TYPE_ROLE;
}
}
PermissionForm.php 內容以下:
class PermissionForm extends AuthItem
{
public function init() {
parent::init();
//常量TYPE_PERMISSION=2
$this->type = Item::TYPE_PERMISSION;
}
}
第5步、創建對應的controller
控制器命名根據你們自己習慣
首先說下PermissionController(用于權限管理)
表單提交時auth_item表中的name、type不要空了就好
然后我們實例化rbac中的Permission
use yii
bacPermission; 記得帶上它
$permission = new Permission();
在將表單數據進行賦值
$permission->name = $model->name;
$permission->type = $model->type;
//這里將權限添加到auth_item中
$bool =
Yii::$app->authManager->add( $permission );
有了權限自然少不了RoleController(用于角色管理)
use yii
bacRole;
$role = new Role();
$role->name = $model->name;
$role->type = $model->type;
$bool = $this->authManager->add( $role );
不同的是我們要給角色賦予我們所創建的角色對吧也就是在RoleForm中所添加的$child這個變量
這個時候我們要進行兩步操作
(1)
//權限列表
$permissions =
Yii::$app->authManager->getPermissions();
$perArr = array();
foreach ($permissions as $key => $value) {
$perArr[$value->name] = $value->name;
}
//添加角色的時候同時賦予權限,所以權限列表就是為了給角色添加權限
(2)
//表單提交落后行權限寫入
foreach ( $child as $val) {
//獲得權限
$childObj =
Yii::$app->authManager->getPermission($val);
//給item_child寫入數據(權限表)
Yii::$app->authManager->addChild( $role, $childObj );
}
最后就是給所創建的角色分配給用戶了AssignMentController
//獲得角色對象
$role =
Yii::$app->authManager->getRole( $model->item_name );
//assign參數 角色對象, 用戶id
$bool =
Yii::$app->authManager->assign( $role, $userId );
第6步、檢查用戶是不是有權限操作
創建1個控制器用于controllers下需要判斷權限的控制器都繼承于這個基類
BaseController是我自己寫的,這個你們自己可以命名其他。。。
class BaseController extends Controller
public function init() {
parent::init();
//用戶id
$userId =
Yii::$app->user->getId();
//權限規則邏輯…..
$permission = ‘這個是你權限規則邏輯得出的的結果';
if ( !
Yii::$app->authManager->checkAccess( $userId , $permission ) ) {
throw new CHttpException(403, '沒有權限訪問');
}
}
}
好吧,忙了1天刪除修改都沒有時間寫,寫出來了在進行更新!!!
希望能給大家幫助!!!謝謝大家!!不喜勿噴!!!!
轉載請說明出處: 指尖上的藝術家 http://blog.csdn.net/arthuralston2015/article/details/44969867
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈