50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
import type { Permission } from '~/models/role'
|
|
|
|
export function usePageChecker() {
|
|
const route = useRoute()
|
|
const { checkRole, hasCreateAccess, hasReadAccess, hasUpdateAccess, hasDeleteAccess } = useRBAC()
|
|
|
|
function getRouteTitle() {
|
|
return route.meta.title as string
|
|
}
|
|
|
|
function getParamsId() {
|
|
const id = route.params.id
|
|
return typeof id === 'string' ? parseInt(id) : 0
|
|
}
|
|
|
|
function getPageAccess(
|
|
roleAccess: Record<string, Permission[]>,
|
|
type: 'create' | 'read' | 'update' | 'delete',
|
|
) {
|
|
// Check if user has access to this page, need to use try - catch for proper handling
|
|
const hasAccess = checkRole(roleAccess)
|
|
if (!hasAccess) return false
|
|
|
|
// Define permission-based computed properties
|
|
switch (type) {
|
|
case 'create':
|
|
return hasCreateAccess(roleAccess)
|
|
case 'read':
|
|
return hasReadAccess(roleAccess)
|
|
case 'update':
|
|
return hasUpdateAccess(roleAccess)
|
|
case 'delete':
|
|
return hasDeleteAccess(roleAccess)
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
return {
|
|
checkRole,
|
|
hasCreateAccess,
|
|
hasReadAccess,
|
|
hasUpdateAccess,
|
|
hasDeleteAccess,
|
|
getRouteTitle,
|
|
getParamsId,
|
|
getPageAccess
|
|
}
|
|
}
|