Yii权限控制组件authManager使用思想RBAC
生活随笔
收集整理的這篇文章主要介紹了
Yii权限控制组件authManager使用思想RBAC
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
0.思想
角色與權限表父子關系表
角色與權限表描述表
角色與用戶對應表
如果要能對任何?戶進?權限檢查,需要調?yii\rbac\ManagerInterface::checkAccess()?法就可以檢查權限了。
1.啟用RBAC
在common/main.php里面進行啟用
// 配置權限組件'authManager' => ['class' =>'yii\rbac\DbManager',],2.步驟
2.1建立數據表
方法一:利用migration進行建立
yii migrate --migrationPath=@yii/rbac/migrations方法二:利用sql進行建立?
auth_assignment表示的是角色與用戶id的關系
auth_item表示的是所有的角色與權限的表格(type為1Wie角色 為2則是權限)
auth_item_child表示的是角色與角色的父子關系? ?角色與權限的父子關系
auth_rule表示的是在權限之上的關系
2.2填充數據
用代碼邏輯清晰? 也可以直接在數據表格里面進行添加數據
<?php use yii\db\Migration;class m170124_084304_init_rbac extends Migration {public function up(){$auth = Yii::$app->authManager;// 添加 "createPost" 權限$createPost = $auth->createPermission('createPost');$createPost->description = 'Create a post';$auth->add($createPost);// 添加 "updatePost" 權限$updatePost = $auth->createPermission('updatePost');$updatePost->description = 'Update post';$auth->add($updatePost);// 添加 "author" 角色并賦予 "createPost" 權限$author = $auth->createRole('author');$auth->add($author);$auth->addChild($author, $createPost);// 添加 "admin" 角色并賦予 "updatePost" // 和 "author" 權限$admin = $auth->createRole('admin');$auth->add($admin);$auth->addChild($admin, $updatePost);$auth->addChild($admin, $author);// 為用戶指派角色。其中 1 和 2 是由 IdentityInterface::getId() 返回的id// 通常在你的 User 模型中實現這個函數。$auth->assign($author, 2);$auth->assign($admin, 1);}public function down(){$auth = Yii::$app->authManager;$auth->removeAll();} }填充數據進行添加到數據表格中 yii rbac/init3.分配角色
下面是利用代碼進行分配的角色權限? 也可以寫一個頁面進行分配權限角色
public function signup() {if ($this->validate()) {$user = new User();$user->username = $this->username;$user->email = $this->email;$user->setPassword($this->password);$user->generateAuthKey();$user->save(false);// 增加了以下三行:$auth = \Yii::$app->authManager;$authorRole = $auth->getRole('author');$auth->assign($authorRole, $user->getId());return $user;}return null; }4.權限檢查
if (\Yii::$app->user->can('createPost')) {// }5.控制器
public function actionPrivilege($id){if (!Yii::$app->user->can('gm', [], true)) {throw new ForbiddenHttpException('對不起,你沒有這個權限');}//step1. 找出所有權限,提供給checkboxlist 用于顯示所有的權限$allPrivileges = AuthItem::find()->select(['name', 'description'])->where(['type' => 1])->orderBy('description')->all();foreach ($allPrivileges as $pri) {$allPrivilegesArray[$pri->name] = $pri->description;}//step2. 當前用戶的權限$AuthAssignments = AuthAssignment::find()->select(['item_name'])->where(['user_id' => $id])->orderBy('item_name')->all();//此處的數組是在把之前有的權限制作成了一個數組$AuthAssignmentsArray = array();foreach ($AuthAssignments as $AuthAssignment) {array_push($AuthAssignmentsArray, $AuthAssignment->item_name);}//step3. 從表單提交的數據,來更新AuthAssignment表,從而用戶的角色發生變化if (isset($_POST['newPri'])) {AuthAssignment::deleteAll('user_id=:id', [':id' => $id]);$newPri = $_POST['newPri'];$arrlength = count($newPri);for ($x = 0; $x < $arrlength; $x++) {$aPri = new AuthAssignment();$aPri->item_name = $newPri[$x];$aPri->user_id = $id;$aPri->created_at = time();$aPri->save();}return $this->redirect(['index']);}//step4. 渲染checkBoxList表單return $this->render('privilege', ['id' => $id, 'AuthAssignmentArray' => $AuthAssignmentsArray,'allPrivilegesArray' => $allPrivilegesArray]);}6.區分顯示
前端頁面可以利用php插入html代碼進行顯示不同的按鈕頁面
因為Yii::$app->user->can是全局性質的組件? 可以進行檢查!
總結
以上是生活随笔為你收集整理的Yii权限控制组件authManager使用思想RBAC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 俄罗斯为什么不使用氢能源?
- 下一篇: Yii的CURD