三、开发前的一些准备工作
1. 配置APACHE虚拟主机
在 xampp\apache\conf\extra\httpd-vhosts.conf文件末尾追加
<VirtualHost *:80>
ServerName frontend.test
DocumentRoot "project_path/advanced/frontend/web/"
<Directory "project_path/advanced/frontend/web/">
# use mod_rewrite for pretty URL support
RewriteEngine on
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php
# use index.php as index file
DirectoryIndex index.php
# ...other settings...</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName backend.test
DocumentRoot "project_path/advanced/backend/web/"
<Directory "project_path/advanced/backend/web/">
# use mod_rewrite for pretty URL support
RewriteEngine on
# If a directory or a file exists, use the request directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward the request to index.php
RewriteRule . index.php
# use index.php as index file
DirectoryIndex index.php
# ...other settings...
</Directory>
</VirtualHost>
2. 配置本地HOST:
在C:\WINDOWS\System32\drivers\etc\HOSTS文件里追加
127.0.0.1 backend.test
127.0.0.1 frontend.test
3. 创建数据库并配置Yii2.0 数据库链接
create database yii2_advanced default charset utf8;
修改本地配置文件project_path/common/config/main-local.php内容,这里使用的mysql数据库,配置如下:
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2_advanced',
'username' => 'yii2_advanced',
'password' => 'yii2_advanced_password',
'charset' => 'utf8',
],
修改数据迁移文件 project_path/console/migrations/m130524_201442_init.php,内容如下:
public function up()
{
$tableOptions = null;
if ($this->db->driverName === 'mysql') {
// http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
$tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
}
$this->createTable('{{%user}}', [
'id' => $this->primaryKey()->comment('自增ID'),
'username' => $this->string()->notNull()->unique()->comment('用户名'),
'auth_key' => $this->string(32)->notNull()->comment('自动登陆key'),
'password_hash' => $this->string()->notNull()->comment('加密密码'),
'password_reset_token' => $this->string()->unique()->comment('重置密码token'),
'email' => $this->string()->notNull()->unique()->comment('邮箱'),
'role'=>$this->smallInteger()->notNull()->defaultValue(10)->comment('角色等级'),
'status' => $this->smallInteger()->notNull()->defaultValue(10)->comment('用户状态'),
'created_at' => $this->integer()->notNull()->comment('创建时间'),
'updated_at' => $this->integer()->notNull()->comment('更新时间'),
], $tableOptions);
}
执行数据库迁移php yii migrate
成功后,可进入数据库查看执行结果。
配置yii2-admin运行环境
因为仅将权限控制应用于后台backend模块,所以这里将配置写到<project>/backend/config/main.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节点及其子节点 ] ], ];
到这里准备工作基本就绪,开始集成Yii的第三方资源插件
四、Yii2整合AdminLTE后台主题
在项目根目录(advanced)下执行
composer require dmstr/yii2-adminlte-asset "2.*"
复制整个vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app目录下的 layout 目录和 site 目录到backend/views,覆盖原始文件。
成功后注册一个新用户:
进入http://frontend.test/点击右上角 Signup 注册一个新用户
五、RBAC实现后台的权限控制
配置简短路由
project_path/backend/config/main.php文件的compontents数组里加上下面的配置:
"urlManager" => [
"enablePrettyUrl" => true,
"enableStrictParsing" => false,
"showScriptName" => false,
"suffix" => "",
"rules" => [
"<controller:\w+>/<id:\d+>"=>"<controller>/view",
"<controller:\w+>/<action:\w+>"=>"<controller>/<action>"
],
],
然后在项目的根目录 project_path/backend/web下面创建.htaccess文件并添加如下内容
使用屏幕编辑命令copy con .htaccess后回车,输入内容,最后按下ctrl+z结束编辑,就成功生成了.htaccess;
Options +FollowSymLinksIndexIgnore */*
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
Apache服务器必须开启rewrite_model模块创建RBAC相关表
建表语句存放在 project_path/vendor/yiisoft/yii2/rbac/migrations/schema-mysql.sql文件中,在MySQL数据库中执行分别得到auth_assignment、auth_item_child、auth_item、auth_rule四个表。
另外我们需要创建一个后台菜单表。
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;
下载并安装 yii2-admin
项目根目录下执行:
composer require mdmsoft/yii2-admin "~2.0"
权限相关配置
修改 project_path/backend/config/main.php中的内容:
"modules" => [
"admin" => [
"class" => "mdm\admin\Module",
],
],
"aliases" => [
"@mdm/admin" => "@vendor/mdmsoft/yii2-admin",
],
//这里必须添加authManager配置项
"components" => [
"authManager" => [
"class" => 'yii\rbac\DbManager',
"defaultRoles" => ["guest"],
],
],
'as access' => [
'class' => 'mdm\admin\components\AccessControl',
'allowActions' => ['*'], // 后面对权限完善了以后,记得把*改回来!
]
修改左侧菜单
模板文件在 project_path/backend/views/layouts/left.php,在items数组中加入如下代码:
[
'label' => '权限管理',
'icon' => 'fa fa-circle-o',
'url' => 'javascript:;',
'items' => [
['label' => '路由管理', 'icon' => 'fa fa-circle-o', 'url' => '/admin/route'],
['label' => '权限管理', 'icon' => 'fa fa-circle-o', 'url' => '/admin/permission'],
['label' => '角色管理', 'icon' => 'fa fa-circle-o', 'url' => '/admin/role'],
['label' => '用户与角色', 'icon' => 'fa fa-circle-o', 'url' => '/admin/assignment'],
['label' => '菜单管理', 'icon' => 'fa fa-circle-o', 'url' => '/admin/menu'],
],
],
这样基于Yii2.0的RBAC的权限管理系统就搭建了一部分啦。