|
|
@ -1,3 +1,4 @@ |
|
|
|
|
|
|
|
import type { RolePermissions } from './rolePermissions' |
|
|
|
import rolePermissions from './rolePermissions' |
|
|
|
import rolePermissions from './rolePermissions' |
|
|
|
import { useState } from '#app' |
|
|
|
import { useState } from '#app' |
|
|
|
import { USER_PROJECT_ROLES } from '~/lib/constants' |
|
|
|
import { USER_PROJECT_ROLES } from '~/lib/constants' |
|
|
@ -6,7 +7,7 @@ export function useUIPermission() { |
|
|
|
const { $state } = useNuxtApp() |
|
|
|
const { $state } = useNuxtApp() |
|
|
|
const projectRoles = useState<Record<string, boolean>>(USER_PROJECT_ROLES, () => ({})) |
|
|
|
const projectRoles = useState<Record<string, boolean>>(USER_PROJECT_ROLES, () => ({})) |
|
|
|
|
|
|
|
|
|
|
|
const isUIAllowed = (permission: string, _skipPreviewAs = false) => { |
|
|
|
const isUIAllowed = (permission: RolePermissions, _skipPreviewAs = false) => { |
|
|
|
const user = $state.user |
|
|
|
const user = $state.user |
|
|
|
let userRoles = user?.value?.roles || {} |
|
|
|
let userRoles = user?.value?.roles || {} |
|
|
|
|
|
|
|
|
|
|
@ -32,7 +33,14 @@ export function useUIPermission() { |
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
return Object.entries(roles).some(([role, hasRole]) => { |
|
|
|
return Object.entries(roles).some(([role, hasRole]) => { |
|
|
|
return hasRole && (rolePermissions[role] === '*' || (rolePermissions[role] as Record<string, boolean>)?.[permission]) |
|
|
|
const rolePermission = rolePermissions[role as keyof typeof rolePermissions] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return ( |
|
|
|
|
|
|
|
hasRole && |
|
|
|
|
|
|
|
(rolePermission === '*' || typeof rolePermission === 'object' |
|
|
|
|
|
|
|
? rolePermission[permission as keyof typeof rolePermission] === true |
|
|
|
|
|
|
|
: false) |
|
|
|
|
|
|
|
) |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|