import { usePermission } from '@/hooks/usePermission';
import { ReactNode } from 'react';
interface CanProps {
permission: string | string[];
children: ReactNode;
fallback?: ReactNode;
}
/**
* 權限判斷元件 - 類似 Blade 的 @can 指令
*
* @example
* ```tsx
*
*
*
*
*
* 管理操作
*
* ```
*/
export function Can({ permission, children, fallback = null }: CanProps) {
const { can, canAny } = usePermission();
const hasPermission = Array.isArray(permission)
? canAny(permission)
: can(permission);
return hasPermission ? <>{children}> : <>{fallback}>;
}
interface HasRoleProps {
role: string | string[];
children: ReactNode;
fallback?: ReactNode;
}
/**
* 角色判斷元件 - 類似 Blade 的 @role 指令
*
* @example
* ```tsx
*
* 管理後台
*
*
*
*
*
* ```
*/
export function HasRole({ role, children, fallback = null }: HasRoleProps) {
const { hasRole, hasAnyRole } = usePermission();
const hasRequiredRole = Array.isArray(role)
? hasAnyRole(role)
: hasRole(role);
return hasRequiredRole ? <>{children}> : <>{fallback}>;
}
interface CanAllProps {
permissions: string[];
children: ReactNode;
fallback?: ReactNode;
}
/**
* 檢查是否擁有所有權限
*
* @example
* ```tsx
*
*
*
* ```
*/
export function CanAll({ permissions, children, fallback = null }: CanAllProps) {
const { canAll } = usePermission();
return canAll(permissions) ? <>{children}> : <>{fallback}>;
}