ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 前端auth权限验证 > 为什么前端也做权限认证,权限认证不应该是后端做的吗? 这里的权限认证指的是前端判断是否有权限查看的数据(例如:添加、删除、编辑之类的按钮),这些只有在点击到对应的url之后,后端才会进行权限认证。 为了避免用户困扰,可以在此用上前端的权限认证,判断是否显示还是隐藏 # 视图页面内权限例子 * 第一种示例, 通过php的`auth()`方法生成`layui-hide`样式属性。 ~~~ <button class="layui-btn layui-btn-normal layui-btn-sm {if !auth('system.menu/add')}layui-hide{/if}" data-open="system.menu/add" data-title="添加" data-full="true"><i class="fa fa-plus"></i> 添加</button> ~~~ * 第二种, 通过php的`auth()`方法判断, 是否显示html ~~~ {if !auth('system.menu/add')} <button class="layui-btn layui-btn-normal layui-btn-sm" data-open="system.menu/add" data-title="添加" data-full="true"><i class="fa fa-plus"></i> 添加</button> {/if} ~~~ # table表格内权限例子 * table表格里面,一种table表格`上方`的操作栏`toolbar`需要权限判断是否显示。 * 另外一种是table表格`里面`的列操作栏`operat`也需要权限判断是否显示。 ### 事先定义权限规则 * 需要在对应的表格的`dom`事先全好对应的权限规则。 * 权限规则为:`data-auth-`\+ 规则名 * 例如:data-auth-`add`\="{:auth('goods.cate/add')}",`add`就是对应的权限规则。 > 下方例子中共定义了:`add``edit``delete``stock`四种权限规则 ~~~ <div class="layuimini-container"> <div class="layuimini-main"> <table id="currentTable" class="layui-table layui-hide" data-auth-add="{:auth('mall.goods/add')}" data-auth-edit="{:auth('mall.goods/edit')}" data-auth-delete="{:auth('mall.goods/delete')}" data-auth-stock="{:auth('mall.goods/stock')}" lay-filter="currentTable"> </table> </div> </div> ~~~ ### 表格上方的`toolbar`权限验证 下面简单讲解权限验证,完整的`toolbar`的使用和配置请查看`table`模块。 * `toolbar`内置三个内置权限验证:`add`,`delete`,`export` ~~~ toolbar: ['refresh','add', 'delete', 'export'] ~~~ * 自定义`toolbar`, 在`auth`属性上填写`权限规则` ~~~ toolbar: ['refresh', [{ text: ' 添加', open: init.add_url, class: 'layui-btn layui-btn-normal layui-btn-sm', icon: 'fa fa-plus ', title: '添加', auth: 'add', extend: ' data-full="true"', }], 'delete', 'export'], ~~~ ### 表格内列操作`operat`的权限验证 * `operat`内置三个内置权限验证:`edit`,`delete` ~~~ operat: ['edit', 'delete'] ~~~ * 自定义`operat`, 在`auth`属性上填写`权限规则` ~~~ operat: [ [{ class: 'layui-btn layui-btn-xs layui-btn-success', method: 'open', text: '编辑', auth: 'edit', url: init.edit_url, extend: 'data-full="true"', }, { class: 'layui-btn layui-btn-xs layui-btn-normal', method: 'open', text: '入库', auth: 'stock', url: init.stock_url, extend: '', }], 'delete'] ~~~ # 完整例子 ~~~ define(["jquery", "easy-admin"], function ($, ea) { var init = { table_elem: '#currentTable', table_render_id: 'currentTableRenderId', index_url: 'mall.goods/index', add_url: 'mall.goods/add', edit_url: 'mall.goods/edit', del_url: 'mall.goods/del', export_url: 'mall.goods/export', modify_url: 'mall.goods/modify', stock_url: 'mall.goods/stock', }; var Controller = { index: function () { ea.table.render({ init: init, modifyReload: true, toolbar: ['refresh', [{ text: ' 添加', open: init.add_url, class: 'layui-btn layui-btn-normal layui-btn-sm', icon: 'fa fa-plus ', title: '添加', auth: 'add', extend: ' data-full="true"', }], 'delete', 'export'], cols: [[ {type: "checkbox"}, {field: 'id', width: 80, title: 'ID'}, {field: 'sort', width: 80, title: '排序', edit: 'text'}, {field: 'cate.title', minWidth: 80, title: '商品分类'}, {field: 'title', minWidth: 80, title: '商品名称'}, {field: 'logo', minWidth: 80, title: '分类图片', search: false, templet: ea.table.image}, {field: 'market_price', width: 100, title: '市场价', templet: ea.table.price}, {field: 'discount_price', width: 100, title: '折扣价', templet: ea.table.price}, {field: 'total_stock', width: 100, title: '库存统计'}, {field: 'stock', width: 100, title: '剩余库存'}, {field: 'virtual_sales', width: 100, title: '虚拟销量'}, {field: 'sales', width: 80, title: '销量'}, {field: 'status', title: '状态', width: 85, selectList: {0: '禁用', 1: '启用'}, templet: ea.table.switch}, {field: 'create_time', minWidth: 80, title: '创建时间', search: 'range'}, { width: 250, title: '操作', templet: ea.table.tool, operat: [ [{ class: 'layui-btn layui-btn-xs layui-btn-success', method: 'open', text: '编辑', auth: 'edit', url: init.edit_url, extend: 'data-full="true"', }, { class: 'layui-btn layui-btn-xs layui-btn-normal', method: 'open', text: '入库', auth: 'stock', url: init.stock_url, extend: '', }], 'delete'] } ]], }); ea.listen(); }, add: function () { ea.listen(); }, edit: function () { ea.listen(); }, stock: function () { ea.listen(); }, }; return Controller; }); ~~~