From 880d386257403a8f049a375e0881fa43f54ea2d6 Mon Sep 17 00:00:00 2001 From: yoyo0926 <398927951@qq.com> Date: Fri, 25 Nov 2022 10:09:00 +0800 Subject: [PATCH] feat: add auth/auths/authsAll --- src/directives/auth.js | 32 ++++++++++++++------------------ src/directives/auths.js | 24 ++++++++++++++++++++++++ src/directives/authsAll.js | 19 +++++++++++++++++++ src/scui.js | 4 ++++ src/utils/permission.js | 32 ++++++++++++++++++++++++++++++++ src/views/other/directive.vue | 32 ++++++++++++++++++-------------- 6 files changed, 111 insertions(+), 32 deletions(-) create mode 100644 src/directives/auths.js create mode 100644 src/directives/authsAll.js diff --git a/src/directives/auth.js b/src/directives/auth.js index 75d74bed..d1314cd3 100644 --- a/src/directives/auth.js +++ b/src/directives/auth.js @@ -1,22 +1,18 @@ -import { permission } from '@/utils/permission' +import { permissionAll } from '@/utils/permission' +import tool from '@/utils/tool'; +/** + * 用户权限指令 + * @directive 单个权限验证(v-auth="'xxx'") + * @directive 多个权限验证,满足一个则显示(v-auths="['xxx','xxx']") + * @directive 多个权限验证,全部满足则显示(v-auths-all="['xxx','xxx']") + */ export default { - mounted(el, binding) { - const { value } = binding - if(Array.isArray(value)){ - let ishas = false; - value.forEach(item => { - if(permission(item)){ - ishas = true; - } - }) - if (!ishas){ - el.parentNode.removeChild(el) - } - }else{ - if(!permission(value)){ - el.parentNode.removeChild(el); - } + mounted (el, binding) { + if(permissionAll()){ + return } + let permissions = tool.data.get("PERMISSIONS"); + if (!permissions.some((v) => v === binding.value)) el.parentNode.removeChild(el); } -}; +} diff --git a/src/directives/auths.js b/src/directives/auths.js new file mode 100644 index 00000000..3bbb9b61 --- /dev/null +++ b/src/directives/auths.js @@ -0,0 +1,24 @@ +import { permissionAll } from '@/utils/permission' +import tool from '@/utils/tool'; + +/** + * 用户权限指令 + * @directive 单个权限验证(v-auth="'xxx'") + * @directive 多个权限验证,满足一个则显示(v-auths="['xxx','xxx']") + * @directive 多个权限验证,全部满足则显示(v-auths-all="['xxx','xxx']") + */ +export default { + mounted (el, binding) { + if(permissionAll()){ + return + } + let permissions = tool.data.get("PERMISSIONS"); + let flag = false; + permissions.map((val) => { + binding.value.map((v) => { + if (val === v) flag = true; + }); + }); + if (!flag) el.parentNode.removeChild(el); + } +} diff --git a/src/directives/authsAll.js b/src/directives/authsAll.js new file mode 100644 index 00000000..81d447f6 --- /dev/null +++ b/src/directives/authsAll.js @@ -0,0 +1,19 @@ +import { permissionAll, judementSameArr } from '@/utils/permission' +import tool from '@/utils/tool'; + +/** + * 用户权限指令 + * @directive 单个权限验证(v-auth="'xxx'") + * @directive 多个权限验证,满足一个则显示(v-auths="['xxx','xxx']") + * @directive 多个权限验证,全部满足则显示(v-auths-all="['xxx','xxx']") + */ +export default { + mounted (el, binding) { + if(permissionAll()){ + return + } + let permissions = tool.data.get("PERMISSIONS"); + const flag = judementSameArr(binding.value, permissions); + if (!flag) el.parentNode.removeChild(el); + } +} diff --git a/src/scui.js b/src/scui.js index c450f853..b452b0ff 100644 --- a/src/scui.js +++ b/src/scui.js @@ -24,6 +24,8 @@ import scStatusIndicator from './components/scMini/scStatusIndicator' import scTrend from './components/scMini/scTrend' import auth from './directives/auth' +import auths from './directives/auths' +import authsAll from './directives/authsAll' import role from './directives/role' import time from './directives/time' import copy from './directives/copy' @@ -63,6 +65,8 @@ export default { //注册全局指令 app.directive('auth', auth) + app.directive('auths', auths) + app.directive('auths-all', authsAll) app.directive('role', role) app.directive('time', time) app.directive('copy', copy) diff --git a/src/utils/permission.js b/src/utils/permission.js index a8dd63e7..e9377dc1 100644 --- a/src/utils/permission.js +++ b/src/utils/permission.js @@ -1,5 +1,37 @@ import tool from '@/utils/tool'; +/** + * 是否含有不限分类,有则表示全部允许通过 + */ +export function permissionAll() { + const allPermissions = "*/*/*" + let permissions = tool.data.get("PERMISSIONS"); + return permissions.includes(allPermissions); +} + +/** + * 比对两组数据是否一致 + * @param news + * @param old + * @returns {boolean} + */ +export function judementSameArr(news, old) { + // console.log(news) + // console.log(old) + let count = 0; + const leng = news.length; + for (let i in news) { + for (let j in old) { + if (news[i] === old[j]) { + count++; + // console.log(news[i]) + } + } + } + // console.log('相同的数量', count) + return count === leng; +} + export function permission(data) { let permissions = tool.data.get("PERMISSIONS"); if(!permissions){ diff --git a/src/views/other/directive.vue b/src/views/other/directive.vue index 6449990a..693ea6ce 100644 --- a/src/views/other/directive.vue +++ b/src/views/other/directive.vue @@ -2,8 +2,12 @@ v-auth="'user.add'" - v-auth="['user.no','user.add']" - + v-auths="['user.no','user.add']" + v-auths-all="['list.add','user.add']" + + + + v-role="'admin'" @@ -34,20 +38,20 @@