北哥這篇文講解yii2權限擴展(yii2-admin) - 中部

本篇繼續講解 yii2-admin 擴展php

上一篇 nai8.me/article/yii… 咱們講解了 yii2-admin的安裝、佈局和簡單的配置,本節咱們重點講解route的實現以及整個rbac操做流程。html

本章要講的內容以下web

  • yii2-admin爲什麼多了一層route,是咋回事?
  • 用yii2-admin配置帶角色的會員系統

繼續說route及Permissions

上一節咱們說了yii2-admin多出route層,可是yii2的rbac數據表中並無相關的表,本節咱們討論下route是如何處理的以及它和persission的關係。sql

而咱們使用yii2-admin也是從添加route開始的,打開 index.php?r=admin/route數據庫

alt
alt

自動檢索

首先看 ① 處,yii2-admin 會自動幫咱們把yii2程序的全部路由所有分析並列舉出來供選擇,固然你也能夠在 ④ 處自行添加,可是有一點要注意yii2

在你本身添加路由的時候,務必且必須以 / 開始,不然它會帶來不少麻煩問題。app

對於自動檢索處的路由,咱們能夠經過 ② 操做將其添加到 ③ 區域。對於自動添加的路由它會本身進入到 ③ 區域。yii

就想我下面動圖展現的同樣ide

操做流程
操做流程

固然,若是是本身添加的,你在自動檢索區①處是看不到的。佈局

當咱們從自動檢索區添加一個到 ③ 區域,或自行添加後,rbac系統發生了什麼那?

其實它填充了item表,以下圖

是的,這貨就是權限
是的,這貨就是權限

是的,這貨就是權限,但若是它是權限,那yii2-admin的權限又是幹嗎的?別急,咱們熟悉下yii2-admin,順完會爲你們揭曉。此坑必填。

Permissions

咱們來看Permissions菜單。如今咱們來生成一個Permission。

新增權限
新增權限

號外,因本章並非講解yii2 rbac內容,北哥假設你對yii2 rbac已經有所瞭解,若是不瞭解能夠看下 rbac系列視頻

Route 和 Permissions 的關聯就在於咱們新聯了一個權限後,當新建一個權限後,yii2-admin須要讓咱們爲此權限指定對應的路由,不明白?看圖,看圖最直觀。

爲權限指派路由
爲權限指派路由

上圖的目的是什麼?咱們知道,路由就是資源,咱們如今在爲一個權限指派資源,固然你理解爲權限能夠屬於另外一個權限也沒有問題。

當咱們把路由 /goods/index 指派給 權限 goods-edit 後,未來擁有goods-edit權限的人就能訪問 /goods/index 了。

接下來咱們看看爲權限指路由後,rbac數據表的變化

item表變化
item表變化

關係已經創建
關係已經創建

是的,權限之間的所屬關係已經創建。

填一個坑

接下來咱們來填上文的一個坑,當咱們爲一個權限分配路由的時候,從數據表咱們知道他們都是權限,那麼在每一個權限頁面又如何分析出路由項而沒有混入普通的權限那。這個狀況在路由頁面的 ③ 區域我想你也感受到了。

這是爲何那?
這是爲何那?

其實很簡單,這要看下yii2-admin的一個方法

// /vendor/mdmsoft/yii2-admin/models/searchs/AuthItem.php 52行
public function search($params) {
    /* @var \yii\rbac\Manager $authManager */
    $authManager = Yii::$app->getAuthManager();
    if ($this->type == Item::TYPE_ROLE) {
        $items = $authManager->getRoles();
    } else {
        $items = array_filter($authManager->getPermissions(), function($item) {
            return $this->type == Item::TYPE_PERMISSION xor strncmp($item->name, '/', 1) === 0;
        });
    }
    $this->load($params);
    ....複製代碼

對,就是其中的 strncmp($item->name, '/', 1) === 0 這句,這個方法搜索出了全部的權限列表,而後篩選出這些權限名字中第一個字符是 / 的,這也是爲什麼咱們說添加路由的時候必須 / 開頭的緣由。

ok。

其餘操做

關於如何創建角色等就不作詳說,關於rule咱們會放到最有一篇說。

角色的創建和賦予權限
角色的創建和賦予權限

爲會員分配角色

經過對上面的學習,咱們學會了如何新建權限和路由,如何創建角色並分配相關權限,萬里長征走完了第一步,下面咱們來爲yii2程序的會員分配角色和權限。

你必定發現了,yii2-admin並無一個user的菜單?不是沒有,是沒有配置而已。

配置user

咱們須要使用yii2-admin提供的會員模型,數據表已經爲咱們準備好

// 導入數據表 命令行運行
./yii migrate --migrationPath=@mdm/admin/migrations複製代碼

兩張表
兩張表

你也能夠複製 /vendor/mdmsoft/yii2-admin/migrations 對應的數據庫sql腳本導入。

這個行爲會導入兩張表,咱們先用其中的user表,menu會在下一節權限菜單中使用。

yii2-admin會自動檢測數據庫中是否有對應表而陳列出對應的菜單,如今你打開index.php?r=admin後,是否是多了user和menu菜單了。

菜單
菜單

接下來咱們須要設置下web.php

//在user模塊裏
 'user' => [
    'identityClass' => 'mdm\admin\models\User',
    'loginUrl' => ['admin/user/login'],
]複製代碼

當你配置完之後會發現admin又多了一個叫作Assignments的菜單。不過此刻咱們的系統中是沒有會員數據的,別擔憂,yii2-admin提供了一個action讓咱們生成會員。

index.php?r=admin/user/signup

註冊會員
註冊會員

趕忙去創建幾個會員吧

分配角色

如今有了會員,選擇Assignments菜單中的某個會員,咱們就能夠輕鬆的爲他分配角色和權限了

alt
alt

此刻我爲會員abei分配了角色「客服人員」,它具備goods-edit(能夠訪問/goods/index路由) 可是不能訪問 /goods/delete

效果演示
效果演示

這就是rbac的會員、角色、權限、資源的關係。

說了好多,你們也很累了,先這樣,下一篇繼續聊yii2-admin的user和menu兩塊。


簽名檔
簽名檔
相關文章
相關標籤/搜索