## 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事件處理
- 表格復選框和序號列合并
- 表單提交帶文件上傳
- 單標簽模式加居中文字