Files
antrean-operasi/composables/useRoles.ts
2026-02-18 08:21:58 +07:00

73 lines
1.7 KiB
TypeScript

// composables/useRoles.ts
// Composable for role-based access control on client side
export const useRoles = () => {
const { user } = useUserInfo();
/**
* Check if current user has a specific role
*/
const hasRole = (role: string): boolean => {
const currentUser = user.value;
if (!currentUser || !currentUser.roles) {
return false;
}
return currentUser.roles.includes(role);
};
/**
* Check if current user has any of the specified roles
*/
const hasAnyRole = (roles: string[]): boolean => {
const currentUser = user.value;
if (!currentUser || !currentUser.roles) {
return false;
}
return roles.some(role => currentUser.roles?.includes(role));
};
/**
* Check if current user has all of the specified roles
*/
const hasAllRoles = (roles: string[]): boolean => {
const currentUser = user.value;
if (!currentUser || !currentUser.roles) {
return false;
}
return roles.every(role => currentUser.roles?.includes(role));
};
/**
* Get all roles of current user
*/
const getRoles = (): string[] => {
return user.value?.roles || [];
};
/**
* Get realm roles only
*/
const getRealmRoles = (): string[] => {
return (user.value as any)?.realm_roles || [];
};
/**
* Get client roles only
*/
const getClientRoles = (): string[] => {
return (user.value as any)?.client_roles || [];
};
return {
hasRole,
hasAnyRole,
hasAllRoles,
getRoles,
getRealmRoles,
getClientRoles
};
};