diff --git a/src/directives/auth.js b/src/directives/auth.js index 660bcc87..75d74bed 100644 --- a/src/directives/auth.js +++ b/src/directives/auth.js @@ -1,4 +1,4 @@ -import permission from '@/utils/permission' +import { permission } from '@/utils/permission' export default { mounted(el, binding) { diff --git a/src/directives/role.js b/src/directives/role.js new file mode 100644 index 00000000..42655b05 --- /dev/null +++ b/src/directives/role.js @@ -0,0 +1,22 @@ +import { rolePermission } from '@/utils/permission' + +export default { + mounted(el, binding) { + const { value } = binding + if(Array.isArray(value)){ + let ishas = false; + value.forEach(item => { + if(rolePermission(item)){ + ishas = true; + } + }) + if (!ishas){ + el.parentNode.removeChild(el) + } + }else{ + if(!rolePermission(value)){ + el.parentNode.removeChild(el); + } + } + } +}; diff --git a/src/main.js b/src/main.js index c0fc1c6b..a9b38ea2 100644 --- a/src/main.js +++ b/src/main.js @@ -10,7 +10,7 @@ import store from './store' import api from './api' import tool from './utils/tool' import http from "./utils/request" -import permission from './utils/permission' +import { permission, rolePermission } from './utils/permission' import errorHandler from './utils/errorHandler' import scTable from './components/scTable' import scFilterBar from './components/scFilterBar' @@ -20,6 +20,7 @@ import scFormTable from './components/scFormTable' import scTableSelect from './components/scTableSelect' import scPageHeader from './components/scPageHeader' import auth from './directives/auth' +import role from './directives/role' const app = createApp(App); @@ -29,6 +30,7 @@ app.config.globalProperties.$TOOL = tool; app.config.globalProperties.$HTTP = http; app.config.globalProperties.$API = api; app.config.globalProperties.$AUTH = permission; +app.config.globalProperties.$ROLE = rolePermission; app.use(store); app.use(router); @@ -45,6 +47,7 @@ app.component('scPageHeader', scPageHeader); //注册全局指令 app.directive('auth', auth) +app.directive('role', role) //全局代码错误捕捉 app.config.errorHandler = errorHandler diff --git a/src/utils/permission.js b/src/utils/permission.js index cdde2930..7abc0328 100644 --- a/src/utils/permission.js +++ b/src/utils/permission.js @@ -1,6 +1,6 @@ import tool from '@/utils/tool'; -let permission = (data) => { +export function permission(data) { let userInfo = tool.data.get("user"); if(!userInfo){ return false; @@ -12,4 +12,16 @@ let permission = (data) => { let isHave = permissions.includes(data); return isHave; } -export default permission; \ No newline at end of file + +export function rolePermission(data) { + let userInfo = tool.data.get("user"); + if(!userInfo){ + return false; + } + let role = userInfo.userInfo.role; + if(!role){ + return false; + } + let isHave = role.includes(data); + return isHave; +} diff --git a/src/views/other/directive.vue b/src/views/other/directive.vue index 49f7fe10..1dc89185 100644 --- a/src/views/other/directive.vue +++ b/src/views/other/directive.vue @@ -6,7 +6,12 @@ v-auth="['user.no','user.add']" - + +

v-role 角色权限控制

+ v-role="'admin'" + v-role="['SA','admin']" + +
@@ -17,7 +22,7 @@ return {} }, created() { - + } }