日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Yii权限控制组件authManager使用思想RBAC

發布時間:2024/9/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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/init

3.分配角色

下面是利用代碼進行分配的角色權限? 也可以寫一個頁面進行分配權限角色

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。