## Yii2項目后臺整合yii2-admin模塊
[TOC]
參考自:[yii2-admin 插件使用簡要教程](http://www.yiichina.com/tutorial/571)
[mdmsoft/yii2-admin](https://github.com/mdmsoft/yii2-admin)項目輕松整合到項目中進行RBAC權限控制,具體可以使用[參看文檔](https://github.com/mdmsoft/yii2-admin/blob/master/docs/guide/configuration.md),在此做一個記錄。
> 本演示針對yii2~advanced高級版。
### 安裝yii2
首先安裝好**advanced**高級版的Yii2。
### 配置數據庫連接
創建`yii2_advanced`數據庫,并授權用戶。
```sql
create database yii2_advanced default charset utf8;
grant all on yii2_advanced.* to yii2_advanced@localhost identified by 'my_yii2_advanced_password';
```
修改本地配置文件`<project>/common/config/main-local.php`內容,這里使用的mysql數據庫,配置如下:
```php
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2_advanced',
'username' => 'yii2_advanced',
'password' => 'my_yii2_advanced_password',
'charset' => 'utf8',
],
```
### 使用composer安裝yii2-admin
安裝yii2-admin之前,假定操作系統已經安裝了[全局的composer](http://docs.phpcomposer.com/00-intro.html#Globally-on-OSX-via-homebrew)
```shell
composer require mdmsoft/yii2-admin "~2.0"
```
### 配置yii2-admin運行環境
因為僅將權限控制應用于后臺backend模塊,所以這里將配置寫到`<project>/backend/config/main.php`文件里,依次小心添加如下內容。
```php
return [
'modules' => [
'admin' => [
'class' => 'mdm\admin\Module',
'layout' => 'left-menu',//yii2-admin的導航菜單
]
...
],
...
'components' => [
...
'authManager' => [
'class' => 'yii\rbac\DbManager', // 使用數據庫管理配置文件
]
],
'as access' => [
'class' => 'mdm\admin\components\AccessControl',
'allowActions' => [
'site/*',//允許訪問的節點,可自行添加
'admin/*',//允許所有人訪問admin節點及其子節點
]
],
];
```
### 創建數據庫表
#### 創建用戶表和菜單表
這里通過命令行運行命令的方式,使用遷移文件進行數據庫表的創建。
> 運行以下命令前請保證數據庫中不存在相關表。
```shell
php yii migrate --migrationPath=@mdm/admin/migrations
```
> 上面的命令會在數據庫創建`user`表和`menu`表。
#### RBAC相關表
這里有兩種辦法建立相應的表。
- 使用遷移命令
```shell
php yii migrate --migrationPath=@yii/rbac/migrations
```
> 如果想通過運行上面的命令得到相應表需要如下配置
> 在 `<project>/console/config/main.php` 中添加如下代碼:
> ```php
> 'components' => [
> 'authManager' => [
> 'class' => 'yii\rbac\DbManager',
> ],
> ],
> ```
> 關閉終端,重新打開終端執行上面的遷移命令使遷移生效。
- 執行SQL語句
其中sql文件保存在`<project>/vendor/yiisoft/yii2/rbac/migrations/schema-mysql.sql`里,復制到MySQL的客戶端工具中執行即可。
至此完成安裝。
通過訪問地址欄`http://localhost/yii2/advanced/backend/web/index.php?r=admin`查看效果,如下:

### 配置授權demo
以一個自定義的節點`goods`為例,節點`goods`下共有`index`-商品列表,`view`-查看商品,`create`-創建商品,`update`-更新商品,`delete`-刪除商品這五個子節點,可以通過gii生成這些代碼。
配置目標:
- 未登錄用戶僅能訪問`index`節點
- 一般登錄用戶能訪問`index`,`view`,`create`三個節點
- 管理員能訪問所有節點
#### 添加可分配權限列表
點擊`yii2-admin`**路由列表頁**,點擊可用輸入框后面的刷新圖標將列出當前網站所有可用的路由列表,新增`goods`各節點路由表添加至右側可分配路由列表中,如下。

#### 添加權限
點擊`yii2-admin`**權限列表**=>**新增權限**,填好名稱提交后,添加對應的路由規則即可,如下。

填好**名稱**與**描述**后提交,進入到如下頁面,選中相關路由點擊加入到右邊。

> 左側的可用列表中除了路由列表還有已經添加了的權限列表,即一個權限可以包含另一個權限。
#### 添加角色并分配權限
點擊`yii2-admin`**角色列表**=>**新增角色**,分別添加管理員、一般用戶、未登錄用戶,并分配權限,如下。

填好**名稱**與**描述**后提交,進入到如下頁面,選中相關權限點擊加入到右邊。

#### 分配角色
點擊`yii2-admin`**分配**界面列出來的用戶名是當前系統中已注冊的用戶,這里注冊一個admin和test進行測試。其中admin為管理員角色,test為一般用戶。

單擊圖上的‘小眼睛’按鈕,進行分配角色,如下:

> 按需要將`test用戶`也加入到一般用戶的角色組中,給予相應的權限。
1. 以管理員身份登錄時,可進行所有操作。符合預期。
2. 但是如果不登錄,在訪問goods首頁時會跳轉到登錄頁面。預期結果是未登錄時能訪問goods首頁,就是說當前系統默認不認可我們配置給未登錄用戶的權限。
只需要在配置文件中加一行指定默認規則的代碼即可,如下:
```php
'authManager'=> [
'class' => 'yii\rbac\DbManager',
'defaultRoles' => ['未登錄用戶'],//添加此行代碼,指定默認規則為 '未登錄用戶'
],
```
經過上面的配置,在用戶未登錄時再訪問`goods/index`節點就能正常顯示了,點別的操作如`goods/update`時會跳到登錄頁面,因為上面配置了**未登錄角色只能訪問`/goods/index`節點**,未登錄時僅有訪問首頁的權限。
> 另外除了在`authManager`中配置默認權限,在`as access`中也可以配置允許所有人訪問的節點。
```php
'as access' => [
'allowActions' => [//下面列出的節點,所有人都可以訪問,針對未登錄用戶的配置也可以移至這里
'admin/*',
'site/*',
'gii/*',
]
],
```
至此,關于yii2-admin相關的權限管理告一段落,然而并沒有使用到menu表對后臺菜單進行權限控制,以及rule表精細化控制權限(可[參考這里](http://www.manks.top/yii2_rbac_rule.html))。通過RBAC集成AdminLTE后臺主題對菜單進行控制。
- 開始
- Yii2開發小技巧
- Yii2使用不同的方式進行郵件發送邏輯處理
- Yii2 Serialization of 'Closure' is not allowed 錯誤
- Yii創建應用
- Yii應用結構和流程
- Yii的路徑別名
- Yii的請求
- Yii的響應
- Sessions 和 Cookies
- Yii自定義全局工具函數
- Yii2模型
- Yii2視圖
- Yii2控制器
- 大數據節省內存處理
- 關聯查詢hasMany、hasOne
- Yii2 URL地址美化
- Yii2整合AdminLTE后臺主題
- Yii2模型中的場景
- Yii2中的RBAC
- Yii2項目后臺整合yii2-admin模塊
- RBAC集成AdminLTE后臺主題對菜單進行控制
- Yii2自定義Gii模板
- 修復AdminLTE引用外部字體文件導致訪問變慢的情況
- Yii2事件簡單使用
- Yii2模型事件
- Yii2使用GridView新增操作按鈕
- Yii2向loyout模板文件中傳值
- Yii2數據緩存
- Yii2緩存
- Yii2數據緩存之增刪改查
- Yii2拓展
- Yii2日期時間插件-datetimepicker
- kartik-v/yii2-widget-fileinput上傳插件