From 3f73b62d1bfb543e509f49fba29cb7d42776a8f5 Mon Sep 17 00:00:00 2001 From: William Phetsinorath Date: Mon, 26 Jan 2026 10:41:57 +0100 Subject: [PATCH 1/3] chore(hooks): change documentation to a sane pluging dependencies management Signed-off-by: William Phetsinorath Change-Id: Icf127d0b9cc595b5d275dec1658a5c676a6a6964 --- packages/hooks/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/hooks/README.md b/packages/hooks/README.md index 8b2c9fdc7..e0149e15c 100644 --- a/packages/hooks/README.md +++ b/packages/hooks/README.md @@ -229,7 +229,7 @@ declare module '@cpn-console/hooks' { ```json // package.json { - "devDepencies": { + "peerDependencies": { "my_plugin": "1.2.3" } } From 5ec83f39ae604b071a4d6ce207ff5a6eae9c6699 Mon Sep 17 00:00:00 2001 From: William Phetsinorath Date: Mon, 26 Jan 2026 12:14:57 +0100 Subject: [PATCH 2/3] feat(plugin): add permission extension Signed-off-by: William Phetsinorath Change-Id: I956f8cccc962bbf5e886286acac685546a6a6964 --- apps/client/src/App.vue | 3 ++ apps/client/src/components/AdminRoleForm.vue | 14 +++-- .../client/src/components/ProjectRoleForm.vue | 14 +++-- apps/client/src/stores/permissions.ts | 43 +++++++++++++++ apps/server/src/resources/system/router.ts | 20 ++++++- packages/hooks/src/index.ts | 13 ++++- packages/shared/src/contracts/system.ts | 30 +++++++++++ packages/shared/src/utils/permissions.ts | 52 ++++++++++++++++--- 8 files changed, 170 insertions(+), 19 deletions(-) create mode 100644 apps/client/src/stores/permissions.ts diff --git a/apps/client/src/App.vue b/apps/client/src/App.vue index ae90457e6..9989010af 100644 --- a/apps/client/src/App.vue +++ b/apps/client/src/App.vue @@ -3,6 +3,7 @@ import { useServiceStore } from '@/stores/services-monitor.js' import { swaggerUiPath } from '@cpn-console/shared' import ReloadPrompt from './components/ReloadPrompt.vue' import { useAdminRoleStore } from './stores/admin-role.js' +import { usePermissionsStore } from './stores/permissions.js' import { useProjectStore } from './stores/project.js' import { useSnackbarStore } from './stores/snackbar.js' @@ -16,6 +17,7 @@ const systemStore = useSystemSettingsStore() const projectStore = useProjectStore() const userStore = useUserStore() const adminRoleStore = useAdminRoleStore() +const permissionsStore = usePermissionsStore() const isLoggedIn = ref(keycloak.authenticated) @@ -46,6 +48,7 @@ onBeforeMount(async () => { }) watch(userStore, async () => { if (userStore.isLoggedIn) { + await permissionsStore.fetchPermissions() if (!adminRoleStore.roles.length) { await adminRoleStore.listRoles() } diff --git a/apps/client/src/components/AdminRoleForm.vue b/apps/client/src/components/AdminRoleForm.vue index 0f1c14916..39e7c87cd 100644 --- a/apps/client/src/components/AdminRoleForm.vue +++ b/apps/client/src/components/AdminRoleForm.vue @@ -1,10 +1,12 @@