feat/menu-structure: update access control

This commit is contained in:
Andrian Roshandy
2025-11-12 06:51:37 +07:00
parent 02c14089f1
commit f0d2bc4de1
2 changed files with 72 additions and 53 deletions

No files matched your search

+48 -48
View File
@@ -2,67 +2,67 @@ import type { RoleAccess } from '~/models/role'
export const PAGE_PERMISSIONS = { export const PAGE_PERMISSIONS = {
'/patient': { '/patient': {
doctor: ['R'], 'emp|doc': ['R'],
nurse: ['R'], 'emp|nur': ['R'],
admisi: ['C', 'R', 'U', 'D'], 'emp|reg': ['C', 'R', 'U', 'D'],
pharmacy: ['R'], 'emp|pha': ['R'],
billing: ['R'], 'emp|pay': ['R'],
management: ['R'], 'emp|mng': ['R'],
}, },
'/doctor': { '/doctor': {
doctor: ['C', 'R', 'U', 'D'], 'emp|doc': ['C', 'R', 'U', 'D'],
nurse: ['R'], 'emp|nur': ['R'],
admisi: ['R'], 'emp|reg': ['R'],
pharmacy: ['R'], 'emp|pha': ['R'],
billing: ['R'], 'emp|pay': ['R'],
management: ['R'], 'emp|mng': ['R'],
}, },
'/satusehat': { '/satusehat': {
doctor: ['R'], 'emp|doc': ['R'],
nurse: ['R'], 'emp|nur': ['R'],
admisi: ['C', 'R', 'U', 'D'], 'emp|reg': ['C', 'R', 'U', 'D'],
pharmacy: ['R'], 'emp|pha': ['R'],
billing: ['R'], 'emp|pay': ['R'],
management: ['R'], 'emp|mng': ['R'],
}, },
'/outpatient/encounter': { '/outpatient/encounter': {
doctor: ['C', 'R', 'U', 'D'], 'emp|doc': ['C', 'R', 'U', 'D'],
nurse: ['C', 'R', 'U', 'D'], 'emp|nur': ['C', 'R', 'U', 'D'],
admisi: ['R'], 'emp|reg': ['R'],
pharmacy: ['R'], 'emp|pha': ['R'],
billing: ['R'], 'emp|pay': ['R'],
management: ['R'], 'emp|mng': ['R'],
}, },
'/emergency/encounter': { '/emergency/encounter': {
doctor: ['C', 'R', 'U', 'D'], 'emp|doc': ['C', 'R', 'U', 'D'],
nurse: ['C', 'R', 'U', 'D'], 'emp|nur': ['C', 'R', 'U', 'D'],
admisi: ['R'], 'emp|reg': ['R'],
pharmacy: ['R'], 'emp|pha': ['R'],
billing: ['R'], 'emp|pay': ['R'],
management: ['R'], 'emp|mng': ['R'],
}, },
'/inpatient/encounter': { '/inpatient/encounter': {
doctor: ['C', 'R', 'U', 'D'], 'emp|doc': ['C', 'R', 'U', 'D'],
nurse: ['C', 'R', 'U', 'D'], 'emp|nur': ['C', 'R', 'U', 'D'],
admisi: ['R'], 'emp|reg': ['R'],
pharmacy: ['R'], 'emp|pha': ['R'],
billing: ['R'], 'emp|pay': ['R'],
management: ['R'], 'emp|mng': ['R'],
}, },
'/rehab/encounter': { '/rehab/encounter': {
doctor: ['C', 'R', 'U', 'D'], 'emp|doc': ['C', 'R', 'U', 'D'],
nurse: ['R'], 'emp|nur': ['R'],
admisi: ['R'], 'emp|reg': ['R'],
pharmacy: ['R'], 'emp|pha': ['R'],
billing: ['R'], 'emp|pay': ['R'],
management: ['R'], 'emp|mng': ['R'],
}, },
'/rehab/registration': { '/rehab/registration': {
doctor: ['C', 'R', 'U', 'D'], 'emp|doc': ['C', 'R', 'U', 'D'],
nurse: ['R'], 'emp|nur': ['R'],
admisi: ['R'], 'emp|reg': ['R'],
pharmacy: ['R'], 'emp|pha': ['R'],
billing: ['R'], 'emp|pay': ['R'],
management: ['R'], 'emp|mng': ['R'],
}, },
} as const satisfies Record<string, RoleAccess> } as const satisfies Record<string, RoleAccess>
+24 -5
View File
@@ -5,12 +5,13 @@ export const useUserStore = defineStore(
// const token = useCookie('authentication') // const token = useCookie('authentication')
const isAuthenticated = computed(() => !!user.value) const isAuthenticated = computed(() => !!user.value)
const userRole = computed(() => { const userRole = computed(() => {
const roles = user.value?.roles || [] return user.value?.roles || []
return roles.map((input: string) => { // return roles.map((input: string) => {
const parts = input.split('-') // const parts = input.split('|')
return parts.length > 1 ? parts[1]: parts[0] // return parts.length > 1 ? parts[1]: parts[0]
}) // })
}) })
const login = async (userData: any) => { const login = async (userData: any) => {
@@ -21,12 +22,30 @@ export const useUserStore = defineStore(
user.value = null user.value = null
} }
const setActiveRole = (role: string) => {
if (user.value && user.value.roles.includes(role)) {
user.value.activeRole = role
}
}
const getActiveRole = () => {
if (user.value?.activeRole) {
return user.value.activeRole
}
if (user.value?.roles.length > 0) {
user.value.activeRole = user.value.roles[0]
return user.value.activeRole
}
}
return { return {
user, user,
isAuthenticated, isAuthenticated,
userRole, userRole,
login, login,
logout, logout,
setActiveRole,
getActiveRole,
} }
}, },
{ {