react-antd-admin-panel
Version:
Modern TypeScript-first React admin panel builder with Ant Design 6
67 lines (66 loc) • 2.49 kB
JavaScript
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