(一)—— 安裝 yii2 和 composer
一匀们、安裝 yii2**
1缴淋、下載高級(jí)應(yīng)用程序模板
2、新建數(shù)據(jù)庫(kù) advanced泄朴,然后新建 user 用戶(hù)表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT "自增ID",
`username` varchar(255) NOT NULL COMMENT "用戶(hù)名",
`auth_key` varchar(32) NOT NULL COMMENT "自動(dòng)登錄key",
`password_hash` varchar(255) NOT NULL COMMENT "加密密碼",
`password_reset_token` varchar(255) DEFAULT NULL COMMENT "重置密碼token",
`email` varchar(255) NOT NULL COMMENT "郵箱",
`role` smallint(6) NOT NULL DEFAULT "10" COMMENT "角色等級(jí)",
`status` smallint(6) NOT NULL DEFAULT "10" COMMENT "狀態(tài)",
`created_at` int(11) NOT NULL COMMENT "創(chuàng)建時(shí)間",
`updated_at` int(11) NOT NULL COMMENT "更新時(shí)間",
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT="用戶(hù)表";
配置數(shù)據(jù)庫(kù)文件 advanced/common/main-local.php
前臺(tái)地址: 127.0.0.1/advanced/frontend/web/ 重抖,進(jìn)入前臺(tái)后點(diǎn)擊 Signup 注冊(cè)用戶(hù)
后臺(tái)地址:127.0.0.1/advanced/backend/web,進(jìn)入后臺(tái)登錄用戶(hù)
二祖灰、安裝 composer
1钟沛、Composer 是 PHP 的一個(gè)依賴(lài)管理工具,下載地址
下載之后直接運(yùn)行進(jìn)行安裝局扶,安裝過(guò)程需要選擇你的 php 可執(zhí)行文件恨统,如下圖所示:
進(jìn)入 cmd 輸入 composer 查看是否安裝成功,下圖是安裝成功界面
2三妈、使用中國(guó)鏡像:
① 進(jìn)入 cmd畜埋,輸入:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
② 安裝最新的Composer 資源插件:它是通過(guò) Composer 管理 bower 和 npm 包所必須的,此命令全局生效畴蒲,一勞永逸悠鞍。
進(jìn)入 cmd,輸入:
composer global require "fxp/composer-asset-plugin:~1.1.1"
③ 注:更新 yii2 模燥,進(jìn)入 cmd 狞玛,切換目錄到 advanced,輸入
composer update yiisoft/yii2 yiisoft/yii2-composer bower-asset/jquery.inputmask
(二)安裝 AdminLTE 渲染后臺(tái)和 yii2-admin 集成 rbac
一涧窒、安裝 AdminLTE 渲染后臺(tái)
1心肪、利用 AdminLTE 渲染后臺(tái)模板
AdminLTE 是一個(gè)完全響應(yīng)管理模板【牢猓基于 Bootstrap3 框架硬鞍,易定制模板。適合多種屏幕分辨率戴已,從小型移動(dòng)設(shè)備到大型臺(tái)式機(jī)固该。內(nèi)置了多個(gè)頁(yè)面,包括儀表盤(pán)糖儡、郵箱伐坏、日歷、鎖屏握联、登錄及注冊(cè)桦沉、404錯(cuò)誤每瞒、500錯(cuò)誤等頁(yè)面。
進(jìn)入 cmd纯露,切換到 advanced 目錄剿骨,輸入
composer require dmstr/yii2-adminlte-asset "2.*"
復(fù)制 vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app
到 backend/views/,需要覆蓋的則覆蓋
2埠褪、進(jìn)入后臺(tái) 127.0.0.1/advanced/backend/web/ 查看效果
注釋?zhuān)喝绻龅巾?yè)面不斷刷新浓利,可能是因?yàn)榧虞d資源的時(shí)候在獲取 google 的 css 資源
解決辦法:
①、下載谷歌字體钞速,將壓縮包解壓至backend\web\css 目錄下
②贷掖、在 backend\config\main.php 的 components 配置項(xiàng)中添加
'assetManager' => [
'assetMap' => [
'AdminLTE.min.css' => '@web/css/AdminLTE.min.css',
]
],
3、url 美化
① 配置:backend/config/main.php 文件的 compontents
"urlManager" => [
//用于表明 urlManager 是否啟用URL美化功能
"enablePrettyUrl" => true,
// 是否在URL中顯示入口腳本
"showScriptName" => false,
],
② 下載 .htaccess 文件渴语,放在 backend/web 目錄下(這是為了隱藏 Index.php羽资,apache必須要開(kāi)啟rewrite模塊)
二、安裝 yii2-admin 集成 rbac**
1遵班、yii2-admin 是 yii2 rbac 的一套管理工具,實(shí)現(xiàn)了漂亮的界面和完整的權(quán)限管理功能
進(jìn)入 cmd潮改,切換到 advanced 目錄狭郑,輸入
composer require mdmsoft/yii2-admin "2.x-dev"
2、配置 backend/config/main.php 文件
"modules" => [
"admin" => [
"class" => "mdm\admin\Module",
],
],
"aliases" => [
"@mdm/admin" => "@vendor/mdmsoft/yii2-admin",
],
'as access' => [
'class' => 'mdm\admin\components\AccessControl',
'allowActions' => [
//這里是允許訪問(wèn)的action
//controller/action
// * 表示允許所有汇在,后期會(huì)介紹這個(gè)
'*'
]
],
'components' => [
"authManager" => [
"class" => 'yii\rbac\DbManager',
"defaultRoles" => ["guest"],
],
],
3翰萨、導(dǎo)入 rbac 表格
執(zhí)行.sql 文件:vendor/yiisoft/yii2/rbac/migrations/schema-mysql.sql
4、運(yùn)行 127.0.0.1/advanced/backend/web/admin/route 預(yù)覽效果
(三) rbac 詳細(xì)操作
1糕殉、下載 left.php 覆蓋 backend/views/layouts/left.php
進(jìn)入 127.0.0.1/advanced/backend/web/ 預(yù)覽效果
2亩鬼、點(diǎn)擊“路由”,將下圖中的幾個(gè)路由移動(dòng)到右邊
查看 auth_item 數(shù)據(jù)表阿蝶,發(fā)現(xiàn)新增了幾行我們剛剛添加的記錄
3雳锋、點(diǎn)擊“權(quán)限”,然后點(diǎn)擊 創(chuàng)建按鈕進(jìn)行創(chuàng)建權(quán)限
再次查看 auth_item 表羡洁,你會(huì)發(fā)現(xiàn)多了一條記錄
創(chuàng)建成功之后來(lái)到權(quán)限的視圖界面進(jìn)行分配權(quán)限玷过,將剛剛創(chuàng)建的全部路由分配給該權(quán)限
查看 auth_item_child 表,發(fā)現(xiàn)新增了四條記錄筑煮,可以簡(jiǎn)單理解:auth_item_child 為權(quán)限分配了路由
4辛蚊、點(diǎn)擊“角色”,創(chuàng)建一個(gè)叫“站長(zhǎng)”的角色
查看 auth_item 表真仲,你會(huì)發(fā)現(xiàn)多了一條記錄
此時(shí)你會(huì)發(fā)現(xiàn)袋马,在 auth_item 表中,tyep=1表示角色秸应、type=2表示權(quán)限虑凛。
創(chuàng)建成功之后來(lái)到角色的視圖界面進(jìn)行分配路由碑宴,將剛剛創(chuàng)建的“權(quán)限控制”分配給該角色
查看 auth_item_child 表,你會(huì)發(fā)現(xiàn)多了一條記錄
可以簡(jiǎn)單理解:auth_item_child 為角色分配了權(quán)限
5卧檐、點(diǎn)擊“分配”墓懂,然后點(diǎn)擊當(dāng)前用戶(hù)的查看按鈕,將“站長(zhǎng)”這個(gè)角色分配給當(dāng)前用戶(hù)
查看 auth_assignment 表霉囚,你會(huì)發(fā)現(xiàn)多了一條記錄
可以簡(jiǎn)單理解:auth_assignment 為用戶(hù)分配了角色
(四)創(chuàng)建左側(cè)導(dǎo)航欄菜單
1捕仔、創(chuàng)建 menu 表
CREATE TABLE `menu` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL,
`parent` int(11) DEFAULT NULL,
`route` varchar(256) DEFAULT NULL,
`order` int(11) DEFAULT NULL,
`data` text,
PRIMARY KEY (`id`),
KEY `parent` (`parent`),
CONSTRAINT `menu_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `menu` (`id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
2、在 left.php 的</ul>后面添加以下內(nèi)容
<?php
use mdm\admin\components\MenuHelper;
$callback = function($menu){
$data = json_decode($menu['data'], true);
$items = $menu['children'];
$return = ['label' => $menu['name'],'url' => [$menu['route']]];
//處理我們的配置
if ($data) {
isset($data['visible']) && $return['visible'] = $data['visible'];//visible
isset($data['icon']) && $data['icon'] && $return['icon'] = $data['icon'];//icon
//other attribute e.g. class...
$return['options'] = $data;
}
//沒(méi)配置圖標(biāo)的顯示默認(rèn)圖標(biāo)
(!isset($return['icon']) || !$return['icon']) && $return['icon'] = 'fa fa-circle-o';
$items && $return['items'] = $items;
return $return;
};
//這里我們對(duì)一開(kāi)始寫(xiě)的菜單menu進(jìn)行了優(yōu)化
echo dmstr\widgets\Menu::widget( [
'options' => ['class' => 'sidebar-menu tree','data-widget'=>'tree'],
'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id,null, $callback),
] );
?>
3盈罐、點(diǎn)擊“菜單”榜跌,然后點(diǎn)擊 創(chuàng)建按鈕進(jìn)行創(chuàng)建菜單
4、點(diǎn)擊“路由”盅粪,將以下幾個(gè)路由寫(xiě)到 auth_item 表(為了分配路由給菜單)
點(diǎn)擊“權(quán)限”钓葫,再點(diǎn)擊查看“權(quán)限控制”,分配** /admin/menu/***
5票顾、點(diǎn)擊“菜單”础浮,創(chuàng)建以下子菜單
注意:填寫(xiě) “Parent” 即父級(jí)菜單的名稱(chēng)時(shí)要手動(dòng)選擇才行,直接全打上 會(huì)保存不了的奠骄。比如:先輸入“權(quán)限”豆同,然后出現(xiàn)下拉菜單就可以選擇“權(quán)限控制”了。
6含鳞、刷新頁(yè)面影锈,預(yù)覽效果:你會(huì)發(fā)現(xiàn),多了一個(gè)菜單
(五)rbac 效果預(yù)覽
效果:“普通管理員”可以進(jìn)行g(shù)ii和debug的操作蝉绷,而“站長(zhǎng)”除了可以進(jìn)行g(shù)ii和debug的操作鸭廷,還可以進(jìn)行“權(quán)限控制”的操作。
一熔吗、創(chuàng)建“調(diào)試”的權(quán)限:可以進(jìn)行 gii 和 degug 的操作
1辆床、點(diǎn)擊“路由”,將 /gii/* 桅狠、/gii/default/index佛吓、/debug/* 、/degug/default/index 寫(xiě)入到 auth_item 表
2垂攘、點(diǎn)擊“權(quán)限”维雇,創(chuàng)建名為“調(diào)試”的權(quán)限,并分配 /gii/* 和 /debug/* 路由
3晒他、點(diǎn)擊“角色”吱型,創(chuàng)建名為“普通管理員”的角色,并分配“調(diào)式”的權(quán)限
二陨仅、創(chuàng)建“調(diào)式”的菜單
1津滞、創(chuàng)建
gii 菜單:Parent —— 調(diào)式铝侵;Name —— gii;Route —— /gii/default/index触徐;Order —— 1
debug 菜單:Parent —— 調(diào)式咪鲜;Name —— debug;Route —— /debug/default/index撞鹉;Order —— 2
2疟丙、分配“調(diào)式“權(quán)限給”站長(zhǎng)“角色
3勤众、刷新頁(yè)面宵蕉,你會(huì)發(fā)現(xiàn)左側(cè)導(dǎo)航欄多了調(diào)式的菜單
三、創(chuàng)建“普通管理員“角色的新用戶(hù)
1巡扇、進(jìn)入前臺(tái) 127.0.0.1/advanced/frontend/web 進(jìn)行注冊(cè)新用戶(hù)
2孝鹊、進(jìn)入后臺(tái) 127.0.0.1/advanced/backend/web/admin/assignment/index
點(diǎn)擊 admin 的查看按鈕炊琉,為 admin 分配普通管理員的角色
3、刷新頁(yè)面又活,你會(huì)發(fā)現(xiàn) admin 用戶(hù)也多了 調(diào)試的菜單
四苔咪、rbac 的作用
1、在步驟三柳骄、2中 admin 用戶(hù)通過(guò) 輸入地址:127.0.0.1/advanced/backend/web/admin/assignment 進(jìn)入分配角色的頁(yè)面团赏,現(xiàn)在我們通過(guò)配置限制用戶(hù)訪問(wèn),配置文件為 backend/main.php
2夹界、現(xiàn)在 admin 用戶(hù)通過(guò) 127.0.0.1/advanced/backend/web/admin/assignment 會(huì)出現(xiàn)下面的界面,說(shuō)明 rbac 成功了
3隘世、退出 admin 用戶(hù)可柿,登錄 master 用戶(hù),發(fā)現(xiàn) master 可以執(zhí)行 admin/assignment 操作
(六)規(guī)則的講解
需求:普通管理員只可以查看修改自己的信息丙者,而站長(zhǎng)可以修改所有人的信息
一复斥、用 gii 生成 user 模型和 CRUD 操作
二、創(chuàng)建“管理用戶(hù)”和”規(guī)則“菜單
,即可以看到多了剛剛生成的 userController 的路由將 /user/* 和 /user/index 移動(dòng)至右邊
將 /admin/rule/* 和 /admin/rule/index 也移動(dòng)至右邊纷捞,待會(huì)創(chuàng)建 “規(guī)則” 菜單
2痢虹、點(diǎn)擊“菜單”創(chuàng)建以下菜單
三、添加“規(guī)則”(路由)給“權(quán)限控制”(權(quán)限)
1主儡、點(diǎn)擊“權(quán)限”然后進(jìn)行創(chuàng)建“管理用戶(hù)”的權(quán)限
2奖唯、點(diǎn)擊“權(quán)限”,然后再點(diǎn)擊”權(quán)限控制“的查看按鈕糜值,將 /admin/rule/* 移至右邊
3丰捷、點(diǎn)擊“角色”坯墨,為“站長(zhǎng)”和“普通管理員”添加“管理用戶(hù)”的權(quán)限
四、為“普通管理員”添加“修改用戶(hù)”的規(guī)則
1病往、新建“修改用戶(hù)”的規(guī)則
新建 backend\components\UserRule 這個(gè)類(lèi)文件
刷新頁(yè)面捣染,左側(cè)菜單出現(xiàn)“規(guī)則”的菜單,點(diǎn)擊“規(guī)則”創(chuàng)建“修改用戶(hù)”的規(guī)則
2停巷、為“普通管理員”添加“修改用戶(hù)”的規(guī)則
點(diǎn)擊“角色”耍攘,再點(diǎn)擊“普通管理員”的更新按鈕
打開(kāi) auth_item 表,可以發(fā)現(xiàn)“普通管理員”這個(gè)記錄被修改了
五叠穆、測(cè)試“修改用戶(hù)”的規(guī)則是否發(fā)揮作用
1少漆、登錄 master 站長(zhǎng),點(diǎn)擊“管理用戶(hù)”硼被,再點(diǎn)擊 admin 修改的按鈕示损,發(fā)現(xiàn)可以修改
2、登錄 admin 普通管理員嚷硫,點(diǎn)擊“管理用戶(hù)”检访,再點(diǎn)擊 master 修改的按鈕,發(fā)現(xiàn)無(wú)法可以修改
表明“修改用戶(hù)”的規(guī)則對(duì)“普通管理員”這個(gè)角色發(fā)揮作用了仔掸。
注意:測(cè)試時(shí)務(wù)必把 \backend\main.php 的 * 注釋掉
更多細(xì)節(jié)詳見(jiàn)https://www.lulublog.cn/post/16