UNPKG

react-antd-admin-panel

Version:

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

67 lines (66 loc) 2.49 kB
import { useCallback, useMemo } from "react"; import { a as useUser } from "./MainContext-CrnhXpyN.js"; function useAccess() { const user = useUser(); const hasRole = useCallback((role) => { return (user == null ? void 0 : user.role) === role; }, [user == null ? void 0 : user.role]); const hasAnyRole = useCallback((roles) => { if (!(user == null ? void 0 : user.role)) return false; return roles.includes(user.role); }, [user == null ? void 0 : user.role]); const hasPermission = useCallback((permission) => { var _a; return ((_a = user == null ? void 0 : user.permissions) == null ? void 0 : _a.includes(permission)) ?? false; }, [user == null ? void 0 : user.permissions]); const hasAllPermissions = useCallback((permissions) => { if (!(user == null ? void 0 : user.permissions)) return false; return permissions.every((p) => user.permissions.includes(p)); }, [user == null ? void 0 : user.permissions]); const hasAnyPermission = useCallback((permissions) => { if (!(user == null ? void 0 : user.permissions)) return false; return permissions.some((p) => user.permissions.includes(p)); }, [user == null ? void 0 : user.permissions]); const hasFeature = useCallback((feature, level = 1) => { if (!(user == null ? void 0 : user.features)) return false; const userLevel = user.features[feature]; if (userLevel === void 0) return false; return userLevel >= level; }, [user == null ? void 0 : user.features]); const canAccess = useCallback((check) => { if (!user) return false; if ("feature" in check) { return hasFeature(check.feature, check.level); } if ("role" in check) { return hasRole(check.role); } if ("roles" in check) { return hasAnyRole(check.roles); } if ("permission" in check) { return hasPermission(check.permission); } if ("permissions" in check) { return hasAllPermissions(check.permissions); } return false; }, [user, hasFeature, hasRole, hasAnyRole, hasPermission, hasAllPermissions]); const isAuthenticated = useMemo(() => user !== null, [user]); const currentRole = useMemo(() => user == null ? void 0 : user.role, [user == null ? void 0 : user.role]); return { canAccess, hasRole, hasAnyRole, hasPermission, hasAllPermissions, hasAnyPermission, hasFeature, isAuthenticated, currentRole }; } export { useAccess as u }; //# sourceMappingURL=useAccess-DsPOTmRD.js.map