php rbac 菜单生成,RBAC集成AdminLTE后台主题对菜单进行控制
## RBAC集成AdminLTE后台主题对菜单进行控制
本文参考自[yii2权限控制rbac之菜单menu最详细教程](http://www.manks.top/article/yii2_rbac_menu)
对于RBAC权限的基本使用可以参看 Yii2项目后台整合yii2-admin模块 进行快速搭建。
这里通过用户拥有的权限对后台管理平台的菜单进行控制。
### 利用AdminLTE渲染后台模板
后台的模板这里采用[ AdminLTE](https://packagist.org/packages/dmstr/yii2-adminlte-asset#2.3.0)(Backend theme for Yii2 Framework)
#### 安装AdminLTE
可以参考[GitHub地址](https://github.com/dmstr/yii2-adminlte-asset),也可以参考之前写的一个[总结地址](http://blog.webfsd.com/article-214.html)进行安装。
#### yii2配置整合AdminLTE
建议拷贝`/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app`目录下的`layouts`和`site`目录拷贝并覆盖掉`/backend/views/`目录下的`lauouts`和`site`对应的文件。
访问后台地址得到如下效果:
![](https://box.kancloud.cn/9b06bc704a0bc8497ee14b0c38743d39_1527x733.png)
> 如果访问权限相关的路径,如`/admin/route/index`并不是上面看到的样式,请将配置文件中的`modules`数组中配置的`layouts`的值删掉即可。如下:
![](https://box.kancloud.cn/f10f6bad5cb6e6d9833958ca851275a8_721x146.png)
### 启动更多可分配路由
我们先访问路由页面 `/admin/route` ,尽可能的把左侧的全部选中,然后移动到右侧。
![](https://box.kancloud.cn/9810a7e6313ff42823ba2e488e4c7896_1348x587.png)
> 并记得给当前用户分配相关的可访问权限。
### 授权给用户
参考上一篇RBAC授权方式对用户进行授权,这里可以这样测试。
1. 将admin用户写入到**超级管理员**并设置`/*`权限。
![](https://box.kancloud.cn/55a1a6e55cc13ac959dfe985bf707230_1690x757.png)
2. 将test用户授权**一般用户组**,并使用超级管理员帐号控制一般用户组权限。
![](https://box.kancloud.cn/449cf87851541b7950bc6deac30bd946_1688x766.png)
> 使用**admin**帐号登录后台访问将有所有权限。使用**test**帐号登录后台仅有列表权限无法对数据进行增删改操作。
### 添加菜单
访问菜单列表 `admin/menu` 点击添加菜单`admin/menu/create`按钮。
> 如果这个时候你没有权限访问了,需要在配置文件的 `as access`数组暂时允许当前用户访问任意权限,并在我们添加完权限的时候去掉`as access`的设置,切记。
> ![](https://box.kancloud.cn/988224e213599b13d1ea389807407bdb_568x185.png)
添加界面如下
![](https://box.kancloud.cn/32c5074d661c7f9aa336e4e81d801f63_1686x573.png)
![](https://box.kancloud.cn/757353b82aeb643d85e11b606c016fea_1680x398.png)
1. 例如添加一级菜单"权限管理",按照如下填写:
- 名称:权限管理
- 父级名称:不填
- 路由:`/admin/default/index`
- 排序:1
- 数据:暂不填写
2. 添加一个二级菜单"角色列表",如下:
- 名称:角色列表
- 父级名称:权限管理
- 路由:`/admin/role/index`
- 排序:2
- 数据:暂不填写
然后依次写入:`权限列表(/admin/permission/index)`、`路由列表(admin/route/index)`、`规则管理(admin/rule/index)`、`分配用户到角色(/admin/assignment/index)`等,具体如下。
![](https://box.kancloud.cn/44d036e65c4a44d08c801ad378b94546_947x629.png)
### 展示菜单
修改`/backend/views/layouts/left.php`文件(保证这个文件是从`/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/views/layouts/left.php`地方复制过来的,否则去修改源文件),添加如下代码:
```php
use mdm\admin\components\MenuHelper;
= dmstr\widgets\Menu::widget([
'options' => ['class' => 'sidebar-menu'],
'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id),
]); ?>
```
[TOC]
### 菜单小图标并控制菜单显示
我们在创建菜单的时候,没填写的"数据"一栏,我们填写json数据`{"icon": "fa fa-user", "visible": false}`,其中icon代表列表前面的小图标;visible表示是否显示,值false表示隐藏,不填或者填true表示显示(z这个选项可以用于开发者模式,比如开发者可见,不是开发模式不可见)。
接下来我们对展示菜单的代码也做稍微的整改`/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/views/layouts/left.php`增加一个callback处理函数。
```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) {
//visible
isset($data['visible']) && $return['visible'] = $data['visible'];
//icon
isset($data['icon']) && $data['icon'] && $return['icon'] = $data['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;
};
?>
= dmstr\widgets\Menu::widget([
'options' => ['class' => 'sidebar-menu'],
'items' => MenuHelper::getAssignedMenu(Yii::$app->user->id,null,$callback),
]); ?>
```
修改效果如下(自定义了一个icon小图标):
![](https://box.kancloud.cn/0052060ff3052f1bb2f3c22c7800ae78_1173x455.png)
> 这里的`$callback`函数也只是针对上面我们添加菜单的"数据"项进行的分析。不难看出,我们对`icon`和`visible`分别进行了判断,并追加到当前menu中。
[TOC]
### 控制页面内的其他操作显示与隐藏
这里以新建的goods操作为例,修改`/advanced/backend/views/goods/index.php`页面的一些控制,如`create`、`view`、`update`和`delete`操作的权限。
```php
//没有创建权限不显示按钮
if (Helper::checkRoute('create')) {
echo Html::a('Create Goods', ['create'], ['class' => 'btn btn-success']);
} ?>
= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'goods_name',
'goods_number',
'goods_desc',
'created_at',
// 'updated_at',
[
'class' => 'yii\grid\ActionColumn',
'template' => Helper::filterActionColumn('{view}{update}{delete}'),
],
],
]); ?>
```
检查当前用户是否拥有上述权限`goods/index`、`goods/view`、`goods/create`.. 如果没有效果请查看更新权限,如下。
![](https://box.kancloud.cn/dd3d6e47c4986e738fcd58d4118e3aa8_925x523.png)
**管理员**角色组相应得到的操作界面如下:
![](https://box.kancloud.cn/53adb1b4865a92684dd509d77f680586_941x342.png)
也就是说我们没有权限的按钮消失了,当在地址栏输入`/goods/create`的时候你会发现也会提醒没有权限。
> 也可以将这个修改更改到gii的自定义模板,加速开发。
php rbac 菜单生成,RBAC集成AdminLTE后台主题对菜单进行控制相关推荐
- Spring boot入门(三):集成AdminLTE(Freemarker),结合generate代码生成器,利用DataTable和PageHelper分页...
Spring boot入门(三):SpringBoot集成结合AdminLTE(Freemarker),利用generate自动生成代码,利用DataTable和PageHelper进行分页显示 标题 ...
- html 后台参数attribute_平台管理后台与商家菜单资源管理:商家权限及其菜单资源管理设计...
商家权限及其菜单资源管理设计 在商家的菜单体系中,我们设计了一个三级菜单,分别为分类.模块和资源.其中,分类菜单是顶级菜单,表示一个微服务应用;模块菜单是一个二级菜单,表示一个应用功能(实体)的主页; ...
- 仿微信公众号后台管理-自定义菜单
最近在做后台管理界面 这是自定义菜单的页面笔记 (也不知道我的思路对不对) 点击菜单出现 创建第一个菜单,并在该菜单上方出现可添加子菜单的添加按钮, 并展示修改该菜单的相关内容 右侧展示有两个 一个关 ...
- WordPress后台添加侧边栏菜单
https://my.oschina.net/shunshun/blog/78193 https://www.ludou.org/add-admin-menu-in-wordpress.html 添加 ...
- php在菜单栏里加子菜单,WordPress后台添加子菜单add_submenu_page()
接上文:WordPress后台添加顶级菜单add_menu_page(),今儿再分享一下在 wordpress 后台侧边栏添加子菜单的方法,用到的函数是:add_submenu_page() 函数用法 ...
- UI标签库专题八:JEECG智能开发平台 Menu(左侧菜单生成标签)
1. Menu(左侧菜单生成标签) 1.1. 参数 属性名 类型 描述 是否必须 默认值 style string 菜单样式 否 null parentFun string 一级菜单 是 nul ...
- php添加导航和删除导航,新增/修改/删除ECSHOP后台左侧导航菜单
ECSHOP后台有许多管理菜单,是否有心想将一些不用的菜单删除呢,是否想增加或者修改菜单名称呢. 通过以下方法可以实现: 例如:我们要在后台新增一个菜单分类项"APP管理",再增加 ...
- python 菜单调用_python---权限管理和菜单生成
class MenuHelper(object): def __init__(self,request,username): #当前请求的request self.request=request #当 ...
- 若依框架前端菜单生成,权限标识,路由地址
若依菜单分类三种类型M(目录).C(菜单).F(按钮) 系统模板,模仿框架写法 根据后端生成代码来创建前端页面 在菜单管理页面生成目录和菜单 路由地址填写模块名 路由地址:控制器中的地址 组件路径:前 ...
最新文章
- 奇淫怪巧之给Delphi的PrintDialog增加一个页码选定范围打印的Edit
- 关于$ORACLE_HOME/bin/oracle文件属性
- 第一个以比特币现金ICO的项目,筹集了3000万美元
- android开发 修改标题栏背景_移动开发整体凉凉的背景下,究竟还剩哪些 Android热门前沿知识...
- Python:目录和文件的操作模块os.path和OS常用方法
- Python---udp绑定信息以及网络通信过程
- Servlet 的生命周期
- zip伪加密做法及原理
- 安装Wamp时出现无法启动此程序,因为计算机中丢失MSVCR110.dll的解决方法
- 十年磨一剑,阿里云RDS MySQL和AWS RDS谁的性能更胜一筹?
- Android view变形,Android SurfaceView预览变形完美解决方法
- vim 环境写 markdown 的插件推荐
- VB讲课笔记08:数组
- 幼儿抽象逻辑思维举例_四个锻炼幼儿推理能力的小游戏,让孩子的逻辑思维更上一层楼...
- 初学编程丨从零开始学习编程的基本路线,BAT程序员亲手总结!
- MSN在线代码|QQ在线客服代码|SKYPE 贸易通在线代码
- DataFrame案例--双均线策略
- 简单通用的Makefile
- 初学python--空函数、返回多个值
- 5G LTE窄带物联网(NB-IoT)8
热门文章
- 迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}...
- oracle快速创建可用用户
- MVC5 Entity Framework学习参加排序、筛选和排序功能
- etcd v2文档(2) -- 客户端http请求管理集群成员api
- 美国DHS向国会提交政府《移动设备安全研究》报告
- 学习vue 20天,我写了点东西
- nagios安装文档
- web javascript开发 之Response.Write 与document.writ...
- 不同的载体 不同的商业模式
- 830. 较大分组的位置