diff --git a/frontends/apps/simple-platform-vue/src/api/rbac.ts b/frontends/apps/simple-platform-vue/src/api/rbac.ts new file mode 100644 index 0000000..ecd9340 --- /dev/null +++ b/frontends/apps/simple-platform-vue/src/api/rbac.ts @@ -0,0 +1,65 @@ +import http from './http' +import type { + RbacRole, RbacUserView, RbacCatalog, SaveRolePayload, CreateUserPayload, UpdateUserPayload +} from '@/types/rbac' +import { + mockRbacCatalog, mockRbacRoles, mockRbacSaveRole, mockRbacDeleteRole, + mockRbacUsers, mockRbacCreateUser, mockRbacUpdateUser, mockRbacSetPassword, mockRbacDeleteUser +} from '@/mock/rbac' + +const MOCK = import.meta.env.VITE_USE_MOCK === 'true' + +export async function fetchCatalog(): Promise { + if (MOCK) return mockRbacCatalog() + const { data } = await http.get('/rbac/catalog') + return data +} + +export async function fetchRoles(): Promise { + if (MOCK) return mockRbacRoles() + const { data } = await http.get('/rbac/roles') + return data +} + +export async function saveRole(payload: SaveRolePayload): Promise { + if (MOCK) return mockRbacSaveRole(payload) + if (payload.id) { + const { data } = await http.put(`/rbac/roles/${payload.id}`, payload) + return data + } + const { data } = await http.post('/rbac/roles', payload) + return data +} + +export async function deleteRole(id: string): Promise { + if (MOCK) return mockRbacDeleteRole(id) + await http.delete(`/rbac/roles/${id}`) +} + +export async function fetchUsers(): Promise { + if (MOCK) return mockRbacUsers() + const { data } = await http.get('/rbac/users') + return data +} + +export async function createUser(payload: CreateUserPayload): Promise { + if (MOCK) return mockRbacCreateUser(payload) + const { data } = await http.post('/rbac/users', payload) + return data +} + +export async function updateUser(id: string, payload: UpdateUserPayload): Promise { + if (MOCK) return mockRbacUpdateUser(id, payload) + const { data } = await http.put(`/rbac/users/${id}`, payload) + return data +} + +export async function setUserPassword(id: string, password: string): Promise { + if (MOCK) return mockRbacSetPassword(id, password) + await http.put(`/rbac/users/${id}/password`, { password }) +} + +export async function deleteUser(id: string): Promise { + if (MOCK) return mockRbacDeleteUser(id) + await http.delete(`/rbac/users/${id}`) +} diff --git a/frontends/apps/simple-platform-vue/src/components/PermissionGuard.vue b/frontends/apps/simple-platform-vue/src/components/PermissionGuard.vue index f3e78b5..230099c 100644 --- a/frontends/apps/simple-platform-vue/src/components/PermissionGuard.vue +++ b/frontends/apps/simple-platform-vue/src/components/PermissionGuard.vue @@ -6,7 +6,12 @@
- + + + + +