UNPKG

react-antd-admin-panel

Version:

Modern TypeScript-first React admin panel builder with Ant Design 6

78 lines 2.4 kB
import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime"; import { useAccess } from '../hooks/useAccess'; /** * AccessGuard - Component for conditional rendering based on access control * * Wraps children and only renders them if the user has the required * role, permission, or feature access level. * * @example * ```tsx * // Role-based protection * <Protected role="admin"> * <DeleteButton /> * </Protected> * * // Permission-based protection * <Protected permission="users.delete"> * <DeleteButton /> * </Protected> * * // Feature with level * <Protected feature="Users" level={3}> * <DeleteButton /> * </Protected> * * // Multiple roles (any match) * <Protected roles={['admin', 'manager']}> * <ManagePanel /> * </Protected> * * // With fallback content * <Protected role="admin" fallback={<span>Admin only</span>}> * <AdminPanel /> * </Protected> * * // Multiple permissions (all required) * <Protected permissions={['users.read', 'users.write']}> * <EditForm /> * </Protected> * ``` */ export function AccessGuard({ children, fallback = null, role, roles, permission, permissions, feature, level = 1, requireAuth, }) { const access = useAccess(); // Determine if auth is required const needsAuth = requireAuth ?? (role !== undefined || roles !== undefined || permission !== undefined || permissions !== undefined || feature !== undefined); // Check authentication first if (needsAuth && !access.isAuthenticated) { return fallback; } // Check single role if (role !== undefined && !access.hasRole(role)) { return fallback; } // Check multiple roles (any match) if (roles !== undefined && !access.hasAnyRole(roles)) { return fallback; } // Check single permission if (permission !== undefined && !access.hasPermission(permission)) { return fallback; } // Check multiple permissions (all required) if (permissions !== undefined && !access.hasAllPermissions(permissions)) { return fallback; } // Check feature access if (feature !== undefined && !access.hasFeature(feature, level)) { return fallback; } // All checks passed, render children return _jsx(_Fragment, { children: children }); } export default AccessGuard; //# sourceMappingURL=Protected.js.map