(一)—— 安装 yii2 和 composer
一、安装 yii2**
1、下载高级应用程序模板
2、新建数据库 advanced,然后新建 user 用户表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT "自增ID",
`username` varchar(255) NOT NULL COMMENT "用户名",
`auth_key` varchar(32) NOT NULL COMMENT "自动登录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 "角色等级",
`status` smallint(6) NOT NULL DEFAULT "10" COMMENT "状态",
`created_at` int(11) NOT NULL COMMENT "创建时间",
`updated_at` int(11) NOT NULL COMMENT "更新时间",
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT="用户表";
配置数据库文件 advanced/common/main-local.php
前台地址: 127.0.0.1/advanced/frontend/web/ ,进入前台后点击 Signup 注册用户
后台地址:127.0.0.1/advanced/backend/web,进入后台登录用户
二、安装 composer
1、Composer 是 PHP 的一个依赖管理工具,下载地址
下载之后直接运行进行安装,安装过程需要选择你的 php 可执行文件,如下图所示:
进入 cmd 输入 composer 查看是否安装成功,下图是安装成功界面
2、使用中国镜像:
① 进入 cmd,输入:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
② 安装最新的Composer 资源插件:它是通过 Composer 管理 bower 和 npm 包所必须的,此命令全局生效,一劳永逸。
进入 cmd,输入:
composer global require "fxp/composer-asset-plugin:~1.1.1"
③ 注:更新 yii2 ,进入 cmd ,切换目录到 advanced,输入
composer update yiisoft/yii2 yiisoft/yii2-composer bower-asset/jquery.inputmask
(二)安装 AdminLTE 渲染后台和 yii2-admin 集成 rbac
一、安装 AdminLTE 渲染后台
1、利用 AdminLTE 渲染后台模板
AdminLTE 是一个完全响应管理模板。基于 Bootstrap3 框架,易定制模板。适合多种屏幕分辨率,从小型移动设备到大型台式机。内置了多个页面,包括仪表盘、邮箱、日历、锁屏、登录及注册、404错误、500错误等页面。
进入 cmd,切换到 advanced 目录,输入
composer require dmstr/yii2-adminlte-asset "2.*"
复制 vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app
到 backend/views/,需要覆盖的则覆盖
2、进入后台 127.0.0.1/advanced/backend/web/ 查看效果
注释:如果遇到页面不断刷新,可能是因为加载资源的时候在获取 google 的 css 资源
解决办法:
①、下载谷歌字体,将压缩包解压至backend\web\css 目录下
②、在 backend\config\main.php 的 components 配置项中添加
'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必须要开启rewrite模块)
二、安装 yii2-admin 集成 rbac**
1、yii2-admin 是 yii2 rbac 的一套管理工具,实现了漂亮的界面和完整的权限管理功能
进入 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' => [
//这里是允许访问的action
//controller/action
// * 表示允许所有,后期会介绍这个
'*'
]
],
'components' => [
"authManager" => [
"class" => 'yii\rbac\DbManager',
"defaultRoles" => ["guest"],
],
],
3、导入 rbac 表格
执行.sql 文件:vendor/yiisoft/yii2/rbac/migrations/schema-mysql.sql
4、运行 127.0.0.1/advanced/backend/web/admin/route 预览效果
(三) rbac 详细操作
1、下载 left.php 覆盖 backend/views/layouts/left.php
进入 127.0.0.1/advanced/backend/web/ 预览效果
2、点击“路由”,将下图中的几个路由移动到右边
查看 auth_item 数据表,发现新增了几行我们刚刚添加的记录
3、点击“权限”,然后点击 创建按钮进行创建权限
创建成功之后来到权限的视图界面进行分配权限,将刚刚创建的全部路由分配给该权限
查看 auth_item_child 表,发现新增了四条记录,可以简单理解:auth_item_child 为权限分配了路由
4、点击“角色”,创建一个叫“站长”的角色
此时你会发现,在 auth_item 表中,tyep=1表示角色、type=2表示权限。
创建成功之后来到角色的视图界面进行分配路由,将刚刚创建的“权限控制”分配给该角色
查看 auth_item_child 表,你会发现多了一条记录
可以简单理解:auth_item_child 为角色分配了权限
5、点击“分配”,然后点击当前用户的查看按钮,将“站长”这个角色分配给当前用户
查看 auth_assignment 表,你会发现多了一条记录
可以简单理解:auth_assignment 为用户分配了角色
(四)创建左侧导航栏菜单
1、创建 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>后面添加以下内容
<?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;
}
//没配置图标的显示默认图标
(!isset($return['icon']) || !$return['icon']) && $return['icon'] = 'fa fa-circle-o';
$items && $return['items'] = $items;
return $return;
};
//这里我们对一开始写的菜单menu进行了优化
echo dmstr\widgets\Menu::widget( [
'options' => ['class' => 'sidebar-menu tree','data-widget'=>'tree'],
'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id,null, $callback),
] );
?>
3、点击“菜单”,然后点击 创建按钮进行创建菜单
4、点击“路由”,将以下几个路由写到 auth_item 表(为了分配路由给菜单)
点击“权限”,再点击查看“权限控制”,分配** /admin/menu/***
5、点击“菜单”,创建以下子菜单
注意:填写 “Parent” 即父级菜单的名称时要手动选择才行,直接全打上 会保存不了的。比如:先输入“权限”,然后出现下拉菜单就可以选择“权限控制”了。
6、刷新页面,预览效果:你会发现,多了一个菜单
(五)rbac 效果预览
效果:“普通管理员”可以进行gii和debug的操作,而“站长”除了可以进行gii和debug的操作,还可以进行“权限控制”的操作。
一、创建“调试”的权限:可以进行 gii 和 degug 的操作
1、点击“路由”,将 /gii/* 、/gii/default/index、/debug/* 、/degug/default/index 写入到 auth_item 表
2、点击“权限”,创建名为“调试”的权限,并分配 /gii/* 和 /debug/* 路由
3、点击“角色”,创建名为“普通管理员”的角色,并分配“调式”的权限
二、创建“调式”的菜单
1、创建
gii 菜单:Parent —— 调式;Name —— gii;Route —— /gii/default/index;Order —— 1
debug 菜单:Parent —— 调式;Name —— debug;Route —— /debug/default/index;Order —— 2
2、分配“调式“权限给”站长“角色
3、刷新页面,你会发现左侧导航栏多了调式的菜单
三、创建“普通管理员“角色的新用户
1、进入前台 127.0.0.1/advanced/frontend/web 进行注册新用户
2、进入后台 127.0.0.1/advanced/backend/web/admin/assignment/index
点击 admin 的查看按钮,为 admin 分配普通管理员的角色
3、刷新页面,你会发现 admin 用户也多了 调试的菜单
四、rbac 的作用
1、在步骤三、2中 admin 用户通过 输入地址:127.0.0.1/advanced/backend/web/admin/assignment 进入分配角色的页面,现在我们通过配置限制用户访问,配置文件为 backend/main.php
2、现在 admin 用户通过 127.0.0.1/advanced/backend/web/admin/assignment 会出现下面的界面,说明 rbac 成功了
3、退出 admin 用户,登录 master 用户,发现 master 可以执行 admin/assignment 操作
(六)规则的讲解
需求:普通管理员只可以查看修改自己的信息,而站长可以修改所有人的信息
一、用 gii 生成 user 模型和 CRUD 操作
二、创建“管理用户”和”规则“菜单
,即可以看到多了刚刚生成的 userController 的路由将 /user/* 和 /user/index 移动至右边
将 /admin/rule/* 和 /admin/rule/index 也移动至右边,待会创建 “规则” 菜单
2、点击“菜单”创建以下菜单
三、添加“规则”(路由)给“权限控制”(权限)
1、点击“权限”然后进行创建“管理用户”的权限
2、点击“权限”,然后再点击”权限控制“的查看按钮,将 /admin/rule/* 移至右边
3、点击“角色”,为“站长”和“普通管理员”添加“管理用户”的权限
四、为“普通管理员”添加“修改用户”的规则
1、新建“修改用户”的规则
新建 backend\components\UserRule 这个类文件
刷新页面,左侧菜单出现“规则”的菜单,点击“规则”创建“修改用户”的规则
2、为“普通管理员”添加“修改用户”的规则
点击“角色”,再点击“普通管理员”的更新按钮
打开 auth_item 表,可以发现“普通管理员”这个记录被修改了
五、测试“修改用户”的规则是否发挥作用
1、登录 master 站长,点击“管理用户”,再点击 admin 修改的按钮,发现可以修改
2、登录 admin 普通管理员,点击“管理用户”,再点击 master 修改的按钮,发现无法可以修改
表明“修改用户”的规则对“普通管理员”这个角色发挥作用了。
注意:测试时务必把 \backend\main.php 的 * 注释掉