## 9.3.增加按钮权限控制
iframe版一般是用前后端不分离,后端可以控制按钮权限的,如果想要在前端控制按钮权限,
可以在common.js增加`hasPerm`和`renderPerm`方法:
```javascript
layui.config({
base: getProjectUrl() + 'assets/module/'
}).extend({
}).use(['layer', 'admin'], function () {
var $ = layui.jquery;
var admin = layui.admin;
// 权限列表,这里也可以从缓存中取,比如登录后把用户权限放在缓存里面
admin.authList = ['user:add', 'user:del'];
/** 判断是否有权限 */
admin.hasPerm = function (p) {
if (admin.authList) for (var i = 0; i < admin.authList.length; i++) if (p == admin.authList[i]) return true;
return false;
};
/** 移除没有权限的元素 */
admin.renderPerm = function () {
$('[perm-show]').each(function () {
if (!admin.hasPerm($(this).attr('perm-show'))) $(this).remove();
});
};
admin.renderPerm(); // 页面载入就检查按钮权限
});
```
然后就可以在html中加属性控制了:
```html
<a class="layui-btn" perm-show="user:add">添加用户</a>
<a class="layui-btn" perm-show="user:edit">修改用户</a>
```
如果把权限列表`authList`改成ajax获取,应该这样写:
```javascript
layui.config({
}).extend({
}).use(['layer', 'admin'], function () {
var $ = layui.jquery;
var admin = layui.admin;
admin.authList = undefined; // 权限列表,这里初始不赋值
admin.hasPerm = function (p) {}; // 同上这里省略
admin.renderPerm = function () {
if(admin.authList === undefined) return; // 这里要加这个
$('[perm-show]').each(function () {
if (!admin.hasPerm($(this).attr('perm-show'))) $(this).remove();
});
};
/** 获取用户权限 */
admin.req('user/auth/list', function(res){
admin.authList = res.data;
admin.renderPerm(); // 要在请求完成后再检查页面上按钮权限
});
});
```
返回的json示例:
```json
{ "code": 200, "data": [ "user:add", "user:edit", "user:del" ] }
```
如果页面上按钮是动态渲染的,要重新调用`renderPerm`方法,比如数据表格中的按钮应该在done里面加:
```javascript
table.render({
elem: '#userTable',
url: '../../json/user.json',
toolbar: ['<div>',
'<button perm-show="user:add" lay-event="add" class="layui-btn">添加</button>',
'<button perm-show="user:del" lay-event="del" class="layui-btn">删除</button>',
'</div>'].join(''),
cols: [[
{type: 'numbers'},
{field: 'username', title: '账号', sort: true},
{field: 'nickName', title: '用户名', sort: true},
{title: '操作', toolbar: '#userTbBar'}
]],
done: function() {
admin.renderPerm();
}
});
```
上面是把方法定义在admin模块下面,也可以定义在layui或window下面,`layui.renderPerm = function () {}`,
调用方法也要改成`layui.renderPerm()`。
<br/>
- 更新日志
- 开始使用
- 导入项目
- 项目结构
- index.html结构说明
- 添加一个菜单
- common.js说明
- 修改默认配置
- ID命名规范
- index模块
- 加载默认主页
- 打开一个选项卡
- 关闭指定选项卡
- 清除Tab记忆
- 修改Tab标题
- 切换Tab自动刷新
- 侧边栏手风琴折叠
- admin模块(基础)
- 全部方法
- 弹窗相关方法
- 加载层loading
- ajax封装
- 缓存操作putTempData
- 锁屏功能
- ew-event事件绑定
- open弹窗事件
- logout事件
- admin模块(进阶)
- 文字提示
- 地图选择位置
- 裁剪图片
- 动画数字
- 经纬度转换
- 深度克隆对象
- 判断富文本是否为空
- 移除指定style
- 模板引擎
- 滚动到顶部
- 事件监听
- 动态模板
- 公共样式
- 公共类
- 组件样式
- 表单弹窗
- 表格工具栏
- 垂直选项卡
- 徽章扩展
- 下拉树单选
- fixed方式select
- 扩展组件(常用)
- 1.下拉菜单
- 快速使用
- 更多样式
- 对任意元素使用
- 带遮罩层
- 自定义下拉内容
- 控制显示方向
- 在数据表格中使用
- 气泡确认框
- 2.消息通知
- 快速使用
- 全部方法
- 参数列表
- 解决弹窗遮挡
- 3.级联选择器
- 快速使用
- 异步加载
- 自定义分隔符
- 搜索功能
- 省市区选择
- 全部方法
- 全部参数
- 4.标签输入框
- 快速使用
- 全部参数
- 5.分割面板
- 快速使用
- 垂直分割
- 嵌套使用
- 6.环形进度条
- 快速使用
- 全部参数
- 自定义样式
- 7.步骤条
- 快速使用
- 风格选择
- 上一步下一步
- 禁止标题点击
- 扩展组件(进阶)
- 1.表单扩展tableX
- 全部方法
- 合并单元格
- 行绑定鼠标右键
- 后端排序
- 前端分页排序
- 导出数据
- 导出全部、搜索
- 后端导出
- 2.表单扩展formX
- 验证规则
- 扩展方法
- 渲染select封装
- 验证码倒计时
- 获取修改字段
- 3.打印插件
- 打印当前页面
- 设置不打印元素
- 打印自定义内容
- 分页打印
- 拼接html
- 4.鼠标右键
- 快速使用
- 自定义使用
- 动态元素绑定
- 5.数据列表dataGrid
- 快速使用
- 全部参数
- 分页功能
- 加载更多功能
- 实例方法
- 自动渲染
- 6.文件选择器
- 快速使用
- 全部参数
- 第三方插件
- 鼠标滚轮监听
- 二维码模块
- 引导插件
- 剪贴板
- 视频播放器
- 富文本编辑器
- 更多功能
- 主题功能
- 自定义扩展模块
- 增加按钮权限控制
- table统一设置headers
- 弹窗专题
- 第一种 页面层弹窗
- 第二种 iframe弹窗
- 第三种 url方式弹窗
- 第四种 捕获层弹窗
- 四种方式选择指南
- admin.modelForm方法
- 参数传递方法详解
- 刷新url方式弹窗
- 弹窗使用模板引擎
- 弹窗内组件不渲染
- 常见问题
- 后端生成侧边栏
- ajax加载侧边栏
- 多系统模式
- logo文字换行显示
- 侧边栏全部展开
- 侧边栏折叠图标放大
- 弹窗下拉框出现滚动条
- 弹窗宽度不能超出屏幕
- 表单文字出现换行
- select、radio不显示
- 日期laydate不能显示
- 弹窗打开后按enter无限打开
- 表单提交post变成了get
- 修改表格背景和边框颜色
- 修改placeholder颜色
- IE数据表格缓存严重
- 使用parent.layer问题
- 表格打印太长列未换行
- 弹窗layer.js报错404
- 表格请求去掉page和limit
- 侧边栏折叠卡顿
- 图片表格点击查看
- 常用实例
- 表格内switch获取行数据
- 表格回显复选框
- 表格工具列动态显示
- 表单提交数组
- 重载表格重置排序
- laydte动态控制日期限制
- 下拉树一些数据不可选
- 修改弹窗禁用输入框
- 表格中下拉框数据动态
- 实现点击后转一圈
- 页面下拉框数据动态
- 表格动态tool事件处理
- 表格复选框和序号列合并
- 表单提交带文件上传
- 单标签模式加居中文字