store/resources/js/composables/useCan.ts

33 lines
863 B
TypeScript

import { usePage } from '@inertiajs/vue3';
import { computed } from 'vue';
export function useCan() {
const page = usePage();
const permissions = computed(() => page.props.auth.user?.permissions ?? []);
const roles = computed(() => page.props.auth.user?.roles ?? []);
function can(permission: string | string[]): boolean {
if (Array.isArray(permission)) {
return permission.some((p) => permissions.value.includes(p));
}
return permissions.value.includes(permission);
}
function hasRole(role: string): boolean {
return roles.value.includes(role);
}
function hasAnyRole(roleList: string[]): boolean {
return roleList.some((role) => roles.value.includes(role));
}
return {
permissions,
roles,
can,
hasRole,
hasAnyRole,
};
}