判断和计算属性实现
1、查询用户信息-查询用户享有的功能权限集合。
2、在列表页面(list)中获取权限集合,通过includes包含字段进行判断。
3、数据权限,调用计算属性的authOpera进行处理。
代码参考src/system/user/index.vue,目前通过判断实现权限的控制只保留此处,用于大家的参考与学习。
数据获取


在上面代码中通过查询的数据在store中进行存储,方便后续直接使用。
功能权限控制
通过:v-if=”authButton.includes(‘user:info’)” 进行判断 ,目前代码中仅在User/index.vue保留判断控制权限的模式,供大家参考学习。
<a-buttonsize="small"@click="() => info(record)"v-if="authButton.includes('user:info')">详情</a-button><a-buttonsize="small"type="primary"v-if="authButton.includes('user:edit')"@click="() => edit(record)">编辑</a-button><a-buttonsize="small"type="danger"v-if="authButton.includes('user:del')"@click="() => del(record.id)">删除</a-button><a-buttonsize="small"type="primary"v-if="authButton.includes('user:resetPwd')"@click="() => resetPwd(record)">密码重置</a-button>
数据权限控制
数据权限通过authOpera(record)进行判断,主要对数据的创建人和创建组织进行判断。 authButton.includes(‘user:edit’) && authOpera(record)
<a-menu-itemv-if="authButton.includes('user:edit') &&authOpera(record)"><a @click="() => edit(record)">编辑</a></a-menu-item><a-menu-itemv-if="authButton.includes('user:del') && authOpera(record)"><a @click="() => del(record.id)">删除</a></a-menu-item>
//处理数据权限-操作权限authOpera() {return function (record) {let bol = false;let authOrgIds = this.authOrganize.authOrgIds;let authParams = this.authOrganize.authParams;let user_id = this.authOrganize.user_id;var createParams = record.create_organize + ":Y";if (authOrgIds == "" || authOrgIds == undefined) {// console.log(user_id == record.create_user);if (user_id == record.create_user) {bol = true;}} else {// console.log(// authParams.indexOf(createParams) > -1 ||// user_id == record.create_user// );if (authParams.indexOf(createParams) > -1 ||user_id == record.create_user) {bol = true;}}record.authOpera = bol;return bol;};},
指令权限控制实现
1、查询用户信息-查询用户享有的功能权限集合。
2、创建指令,在指令中对数据进行逻辑判断。
3、指令的引用和使用。
根据实际的效果,编写了两个指令:
1、action -控制功能权限
2、action-dauth -控制功能+数据权限(一般只有del和uedit使用。)
数据查询参考【上面的数据获取】
action指令的编写
import Vue from 'vue'import store from '@/store'/*** Action 权限指令* 指令用法:* - 在需要控制 action 级别权限的组件上使用 v-action:[method] , 如下:* <a-button v-action:add >添加用户</a-button>* <a-button v-action:delete>删除用户</a-button>* <a v-action:edit @click="edit(record)">修改</a>** - 当前用户没有权限时,组件上使用了该指令则会被隐藏* - 当后台权限跟 提供的模式不同时,只需要针对这里的权限过滤进行修改即可*/const action = Vue.directive('action', {inserted: function (el, binding, vnode) {const actionName = binding.argconst roles = store.getters.rolesconst permissionButtonList = roles.permissionButtonListif(!permissionButtonList.includes(actionName)){el.parentNode && el.parentNode.removeChild(el) || (el.style.display = 'none')}},})export default action
action-dauth指令的编写
import Vue from 'vue'import store from '@/store'/*** Action 权限指令 - 数据权限* 指令用法:* - 在需要控制 action 级别权限的组件上使用 v-action:[method] , 如下:* <a-button v-action:add >添加用户</a-button>* <a-button v-action:delete>删除用户</a-button>* <a v-action:edit @click="edit(record)">修改</a>** - 当前用户没有权限时,组件上使用了该指令则会被隐藏* - 当后台权限跟 提供的模式不同时,只需要针对这里的权限过滤进行修改即可*/const actionDauth = Vue.directive('action-dauth', {inserted: function (el, binding, vnode) {const roles = store.getters.rolesconst permissionButtonList = roles.permissionButtonListconst authOrganize = roles.authOrganize;const record = binding.arg;const actionName = record.authlet authOrgIds = authOrganize.authOrgIds;let authParams = authOrganize.authParams;let user_id = authOrganize.user_id;var createParams = record.create_organize + ":Y";let bol = false;if(permissionButtonList.includes(actionName)){if (authOrgIds == "" || authOrgIds == undefined) {if (user_id == record.create_user) {bol = true;}} else {if (authParams.indexOf(createParams) > -1 ||user_id == record.create_user) {bol = true;}}}if(!bol){el.parentNode && el.parentNode.removeChild(el) || (el.style.display = 'none')}},})export default actionDauth
指令的引用
需要在main.js中对指令进行引用,如下:
import action from '@/core/directives/action.js'import actionDauth from '@/core/directives/action-dauth.js'Vue.use(action)Vue.use(actionDauth)
指令的使用
功能权限指令的使用: v-action:role:info (案例)
功能权限+数据权限指令的使用:v-action-dauth:[{…record,auth:role:edit}] (案例)
<a-buttonsize="small"v-action:role:info@click="() => info(record)">详情</a-button><a-buttonsize="small"type="primary"v-action-dauth:[{...record,auth:`role:edit`}]@click="() => edit(record)">编辑</a-button><a-buttonsize="small"type="danger"v-action-dauth:[{...record,auth:`role:del`}]@click="() => del(record.id)">删除</a-button><a-buttonsize="small"type="primary"v-action:role:assignAuth@click="() => auth(record)">分配权限</a-button><a-buttonsize="small"type="danger"v-action:role:statusv-show="record.status == '0'"@click="() => updateStatus(record.id, '1')">禁用</a-button><a-buttonsize="small"type="primary"v-action:role:statusv-show="record.status == '1'"@click="() => updateStatus(record.id, '0')">启用</a-button>
