快速搭建php rbac后台

来源:互联网 发布:世界语言翻译软件 编辑:程序博客网 时间:2024/06/13 10:19

使用yii2的advance版本进行快速建站(rbac控制)

安装yii2 和 一些yii2的插件

建议使用composer方式进行操作

下载yii

composer create-project --prefer-dist yiisoft/yii2-app-advanced honglvshi.cncd honglvshi.cn php init/*会出现两个选项 让你选择是生产环境 还是 开发环境 */

配置nginx

/*前台nginx配置*/server{  listen 80;  server_name ******;  root /data/www/develop/******/frontend/web;  index index.php index.html;  access_log /data/log/nginx/develop/******.access.log;  error_log /data/log/nginx/develop/******.error.log;  include php-fpm.conf;}/*后台nginx配置*/server{  listen 80;  server_name ******;  root /data/www/develop/******/backend/web;  index index.php index.html;  access_log /data/log/nginx/develop/******.access.log;  error_log /data/log/nginx/******.error.log;  include php-fpm.conf;}

复制的时候注意删除注释 路径需要自己根据自己服务器进行配置

安装yii2 拓展

/*后台adminlte 响应式模版*/composer require dmstr/yii2-adminlte-asset "2.*"/*yii2-admin 官方可视化rbac管理组件*/composer require mdmsoft/yii2-admin "2.x-dev"

修改yii2项目

/* 将adminlte的layout布局替换yii2原始的layout布局*/cp -r yii2-app/* /data/www/develop/honglvshi.cn/backend/views//* 修改yii2 backend 的配置项*//*增加以下两个组件*/'components' => [    /*rbac 角色授权管理*/    "authManager" => [        "class" => 'yii\rbac\DbManager',        "defaultRoles" => ["guest"],    ],    /* url美化 */    "urlManager" => [       'enablePrettyUrl' => true,       'showScriptName' => false,       'rules' => [          ],    ],    'db' => [            'class' => 'yii\db\Connection',            'dsn' => 'mysql:host=127.0.0.1;dbname=*****',            'username' => '***',            'password' => '****',            'charset' => 'utf8',        ]],/*模块增加以下代码 以后每增加一个模块 都需要再以下配置增加*/"modules" => [    "admin" => [        "class" => "mdm\admin\Module",    ],],/**/"aliases" => [    "@mdm/admin" => "@vendor/mdmsoft/yii2-admin",],'as access' => [    'class' => 'mdm\admin\components\AccessControl',    'allowActions' => [        //目前允许访问所有action 强烈建议填写 登录 注销 和异常页面        '*'    ]],

创建rbac的数据库

/*sql语句存在/vendor/yiisoft/yii2/rbac/migrations/shcema-mysql.sql*/create table `auth_rule`(   `name`                 varchar(64) not null,   `data`                 blob,   `created_at`           integer,   `updated_at`           integer,    primary key (`name`)) engine InnoDB;create table `auth_item`(   `name`                 varchar(64) not null,   `type`                 smallint not null,   `description`          text,   `rule_name`            varchar(64),   `data`                 blob,   `created_at`           integer,   `updated_at`           integer,   primary key (`name`),   foreign key (`rule_name`) references `auth_rule` (`name`) on delete set null on update cascade,   key `type` (`type`)) engine InnoDB;create table `auth_item_child`(   `parent`               varchar(64) not null,   `child`                varchar(64) not null,   primary key (`parent`, `child`),   foreign key (`parent`) references `auth_item` (`name`) on delete cascade on update cascade,   foreign key (`child`) references `auth_item` (`name`) on delete cascade on update cascade) engine InnoDB;create table `auth_assignment`(   `item_name`            varchar(64) not null,   `user_id`              varchar(64) not null,   `created_at`           integer,   primary key (`item_name`, `user_id`),   foreign key (`item_name`) references `auth_item` (`name`) on delete cascade on update cascade) engine InnoDB;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=utf8CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `username` varchar(255) NOT NULL,  `auth_key` varchar(32) NOT NULL,  `password_hash` varchar(255) NOT NULL,  `password_reset_token` varchar(255) DEFAULT NULL,  `email` varchar(255) NOT NULL,  `role` smallint(6) NOT NULL DEFAULT '10',  `status` smallint(6) NOT NULL DEFAULT '10',  `created_at` int(11) NOT NULL,  `updated_at` int(11) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

进入http://admin.**/admin/route查看效果
这里写图片描述

大功造成了一半 嗯 继续往下

修改布局的左边菜单栏

<aside class="main-sidebar">    <section class="sidebar">        <div class="user-panel">            <div class="pull-left image">                <img src="<?= $directoryAsset ?>/img/user2-160x160.jpg" class="img-circle" alt="User Image"/>            </div>            <div class="pull-left info">                <p>Alexander Pierce</p>                <a href="#"><i class="fa fa-circle text-success"></i> Online</a>            </div>        </div>        <form action="#" method="get" class="sidebar-form">            <div class="input-group">                <input type="text" name="q" class="form-control" placeholder="Search..."/>                <span class="input-group-btn">                <button type='submit' name='search' id='search-btn' class="btn btn-flat"><i class="fa fa-search"></i>                </button>              </span>            </div>        </form>                <?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'],                    'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id,null, $callback),                ] );                ?>    </section></aside>

创建一个用户

在frontend的config/main.php 同样配置数据库'components' => [    /*rbac 角色授权管理*/    /* url美化 */    "urlManager" => [       'enablePrettyUrl' => true,       'showScriptName' => false,       'rules' => [          ],    ],    'db' => [            'class' => 'yii\db\Connection',            'dsn' => 'mysql:host=127.0.0.1;dbname=*****',            'username' => '***',            'password' => '****',            'charset' => 'utf8',        ]],/*前台/site/signup 注册一个帐号 就可以再后台登录了*/
/admin/route rbac的路由/admin/permission rbac的权限/admin/role rbac的角色/admin/assigment rbac的分配权限/admin/menu rbac的菜单先配置超级管理员的权限进入****/admin/role/index选中超级管理员分配route给 /*然后进入****/admin/assigment/index分配超级管理员给我们刚创建的用户

这里写图片描述

1.先创建路由
2.在对路由创建权限(强烈建议对路由进行一对一分配权限)
3.在对权限一对多创建权限
4.在对角色分配权限
5.然后创建菜单
这里写图片描述
这里写图片描述
这里写图片描述

接下里可以根据用户和自己的模块进行rbac的分配了 如果不知道rbac是什么 最好百度或者google了解下rbac的系统
项目的前台在frontend进行编写代码
项目的后台在backend进行编写代码
再根据自己的其他需求自行选择compose框架

yii2 的advanced版本已经涵盖很多功能 基本你想要的yii2 advanced版本都涵盖了

这里写图片描述

原创粉丝点击