From a92873b9718d8f38a5a10a15a5b2bc28615e072a Mon Sep 17 00:00:00 2001 From: xue jiahao Date: Tue, 24 Dec 2024 22:17:18 +0800 Subject: [PATCH] Add permissions --- frontend/quasar.config.js | 3 +- frontend/src/boot/permissions.ts | 34 ++++++ frontend/src/components/EssentialLink.vue | 2 + .../ShareDomain/ShareDomainDialog.vue | 11 +- .../ShareDomain/ShareManageDialog.vue | 10 +- frontend/src/layouts/MainLayout.vue | 88 +++++++-------- frontend/src/pages/RoleManagement.vue | 9 +- frontend/src/router/index.ts | 11 +- frontend/src/router/routes.ts | 2 - frontend/src/stores/useAuthStore.ts | 105 +++++++++++------- frontend/src/stores/useUserStore.ts | 1 + 11 files changed, 173 insertions(+), 103 deletions(-) create mode 100644 frontend/src/boot/permissions.ts diff --git a/frontend/quasar.config.js b/frontend/quasar.config.js index 40530ff..20a249d 100644 --- a/frontend/quasar.config.js +++ b/frontend/quasar.config.js @@ -37,7 +37,8 @@ module.exports = configure(function (/* ctx */) { // https://v2.quasar.dev/quasar-cli-vite/boot-files boot: [ 'axios', - 'error-handler' + 'error-handler', + 'permissions' ], // https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#css diff --git a/frontend/src/boot/permissions.ts b/frontend/src/boot/permissions.ts new file mode 100644 index 0000000..4d5050a --- /dev/null +++ b/frontend/src/boot/permissions.ts @@ -0,0 +1,34 @@ +// src/boot/permissions.ts +import { boot } from 'quasar/wrappers'; +import { useAuthStore } from 'src/stores/useAuthStore'; +import { DirectiveBinding } from 'vue'; + +export const MenuMapping = { + home: null, + app: null, + version: null, + user: 'user', + role: 'role', + domain: null, + userDomain: null, +}; + +const store = useAuthStore(); + +export default boot(({ app }) => { + app.directive('permissions', { + mounted(el: HTMLElement, binding: DirectiveBinding) { + const { value } = binding; + if (!value || store.isSuperAdmin) { + return; + } + if (!store.permissions[value]) { + if (el.parentNode) { + el.parentNode.removeChild(el); + } else { + el.style.display = 'none'; + } + } + }, + }); +}); diff --git a/frontend/src/components/EssentialLink.vue b/frontend/src/components/EssentialLink.vue index 3a677c5..4d4be1b 100644 --- a/frontend/src/components/EssentialLink.vue +++ b/frontend/src/components/EssentialLink.vue @@ -1,5 +1,6 @@ @@ -68,7 +68,7 @@ diff --git a/frontend/src/pages/RoleManagement.vue b/frontend/src/pages/RoleManagement.vue index d5e5cb8..8d5ef20 100644 --- a/frontend/src/pages/RoleManagement.vue +++ b/frontend/src/pages/RoleManagement.vue @@ -27,7 +27,7 @@ :pagination="pagination" >