rbac admin php,RBAC实现(AdminLTE、yii-admin)

(一)—— 安装 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、点击“路由”,将下图中的几个路由移动到右边

d2fc8c55dadb

image

查看 auth_item 数据表,发现新增了几行我们刚刚添加的记录

d2fc8c55dadb

image

3、点击“权限”,然后点击 创建按钮进行创建权限

d2fc8c55dadb

image

再次查看 auth_item 表,你会发现多了一条记录

创建成功之后来到权限的视图界面进行分配权限,将刚刚创建的全部路由分配给该权限

d2fc8c55dadb

image

查看 auth_item_child 表,发现新增了四条记录,可以简单理解:auth_item_child 为权限分配了路由

4、点击“角色”,创建一个叫“站长”的角色

查看 auth_item 表,你会发现多了一条记录

此时你会发现,在 auth_item 表中,tyep=1表示角色、type=2表示权限。

创建成功之后来到角色的视图界面进行分配路由,将刚刚创建的“权限控制”分配给该角色

查看 auth_item_child 表,你会发现多了一条记录

可以简单理解:auth_item_child 为角色分配了权限

5、点击“分配”,然后点击当前用户的查看按钮,将“站长”这个角色分配给当前用户

查看 auth_assignment 表,你会发现多了一条记录

d2fc8c55dadb

image

可以简单理解: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 的后面添加以下内容

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 操作

d2fc8c55dadb

image

二、创建“管理用户”和”规则“菜单

1、点击“路由”,然后点击

将 /user/* 和 /user/index 移动至右边

将 /admin/rule/* 和 /admin/rule/index 也移动至右边,待会创建 “规则” 菜单

2、点击“菜单”创建以下菜单

d2fc8c55dadb

image

三、添加“规则”(路由)给“权限控制”(权限)

1、点击“权限”然后进行创建“管理用户”的权限

2、点击“权限”,然后再点击”权限控制“的查看按钮,将 /admin/rule/* 移至右边

3、点击“角色”,为“站长”和“普通管理员”添加“管理用户”的权限

四、为“普通管理员”添加“修改用户”的规则

1、新建“修改用户”的规则

新建 backend\components\UserRule 这个类文件

刷新页面,左侧菜单出现“规则”的菜单,点击“规则”创建“修改用户”的规则

2、为“普通管理员”添加“修改用户”的规则

点击“角色”,再点击“普通管理员”的更新按钮

打开 auth_item 表,可以发现“普通管理员”这个记录被修改了

五、测试“修改用户”的规则是否发挥作用

1、登录 master 站长,点击“管理用户”,再点击 admin 修改的按钮,发现可以修改

2、登录 admin 普通管理员,点击“管理用户”,再点击 master 修改的按钮,发现无法可以修改

表明“修改用户”的规则对“普通管理员”这个角色发挥作用了。

注意:测试时务必把 \backend\main.php 的 * 注释掉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值