Yii 2.0 搭建基于RBAC权限的后台管理系统 (二)

三、开发前的一些准备工作

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 +FollowSymLinks
IndexIgnore  */*
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的权限管理系统就搭建了一部分啦。




猜你喜欢

转载自blog.csdn.net/a1513049385/article/details/80666014