Files
star-erp/resources/js/hooks/usePermission.ts

84 lines
2.2 KiB
TypeScript
Raw Normal View History

import { usePage } from '@inertiajs/react';
import { PageProps } from '@/types/global';
/**
* Hook
*
*/
export function usePermission() {
const { auth } = usePage<PageProps>().props;
const user = auth.user;
/**
* 使
*
*/
const can = (permission: string): boolean => {
if (!user) return false;
if (user.roles.includes('super-admin')) return true;
return user.permissions.includes(permission);
};
/**
* 使
*
*/
const canAny = (permissions: string[]): boolean => {
if (!user) return false;
if (user.roles.includes('super-admin')) return true;
return permissions.some(p => user.permissions.includes(p));
};
/**
* 使
*
*/
const canAll = (permissions: string[]): boolean => {
if (!user) return false;
if (user.roles.includes('super-admin')) return true;
return permissions.every(p => user.permissions.includes(p));
};
/**
* 使
*/
const hasRole = (role: string): boolean => {
if (!user) return false;
return user.roles.includes(role);
};
/**
* 使
*/
const hasAnyRole = (roles: string[]): boolean => {
if (!user) return false;
return roles.some(r => user.roles.includes(r));
};
/**
* 使
*/
const hasAllRoles = (roles: string[]): boolean => {
if (!user) return false;
return roles.every(r => user.roles.includes(r));
};
/**
* 使
*/
const isSuperAdmin = (): boolean => {
return hasRole('super-admin');
};
return {
can,
canAny,
canAll,
hasRole,
hasAnyRole,
hasAllRoles,
isSuperAdmin,
user
};
}