@jmruthers/pace-core 0.5.127 → 0.5.128
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{DataTable-QZH6SEUM.js → DataTable-3Z5HLOWF.js} +2 -2
- package/dist/{PublicLoadingSpinner-qqvM-NUe.d.ts → PublicLoadingSpinner-CUAnTvcg.d.ts} +7 -0
- package/dist/{chunk-JDBO5NCG.js → chunk-27MGXDD6.js} +34 -16
- package/dist/chunk-27MGXDD6.js.map +1 -0
- package/dist/{chunk-TMUNK34W.js → chunk-ENE3AB75.js} +37 -9
- package/dist/chunk-ENE3AB75.js.map +1 -0
- package/dist/components.d.ts +1 -1
- package/dist/components.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +1 -1
- package/docs/api/classes/ColumnFactory.md +1 -1
- package/docs/api/classes/ErrorBoundary.md +1 -1
- package/docs/api/classes/InvalidScopeError.md +1 -1
- package/docs/api/classes/MissingUserContextError.md +1 -1
- package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
- package/docs/api/classes/PermissionDeniedError.md +1 -1
- package/docs/api/classes/PublicErrorBoundary.md +1 -1
- package/docs/api/classes/RBACAuditManager.md +1 -1
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +1 -1
- package/docs/api/classes/RBACError.md +1 -1
- package/docs/api/classes/RBACNotInitializedError.md +1 -1
- package/docs/api/classes/SecureSupabaseClient.md +1 -1
- package/docs/api/classes/StorageUtils.md +1 -1
- package/docs/api/enums/FileCategory.md +1 -1
- package/docs/api/interfaces/AggregateConfig.md +1 -1
- package/docs/api/interfaces/ButtonProps.md +1 -1
- package/docs/api/interfaces/CardProps.md +1 -1
- package/docs/api/interfaces/ColorPalette.md +1 -1
- package/docs/api/interfaces/ColorShade.md +1 -1
- package/docs/api/interfaces/DataAccessRecord.md +1 -1
- package/docs/api/interfaces/DataRecord.md +1 -1
- package/docs/api/interfaces/DataTableAction.md +1 -1
- package/docs/api/interfaces/DataTableColumn.md +1 -1
- package/docs/api/interfaces/DataTableProps.md +1 -1
- package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
- package/docs/api/interfaces/EmptyStateConfig.md +1 -1
- package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
- package/docs/api/interfaces/EventAppRoleData.md +1 -1
- package/docs/api/interfaces/FileDisplayProps.md +1 -1
- package/docs/api/interfaces/FileMetadata.md +1 -1
- package/docs/api/interfaces/FileReference.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadOptions.md +1 -1
- package/docs/api/interfaces/FileUploadProps.md +1 -1
- package/docs/api/interfaces/FooterProps.md +1 -1
- package/docs/api/interfaces/GrantEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
- package/docs/api/interfaces/InputProps.md +1 -1
- package/docs/api/interfaces/LabelProps.md +1 -1
- package/docs/api/interfaces/LoginFormProps.md +1 -1
- package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
- package/docs/api/interfaces/NavigationContextType.md +1 -1
- package/docs/api/interfaces/NavigationGuardProps.md +1 -1
- package/docs/api/interfaces/NavigationItem.md +1 -1
- package/docs/api/interfaces/NavigationMenuProps.md +1 -1
- package/docs/api/interfaces/NavigationProviderProps.md +1 -1
- package/docs/api/interfaces/Organisation.md +1 -1
- package/docs/api/interfaces/OrganisationContextType.md +1 -1
- package/docs/api/interfaces/OrganisationMembership.md +1 -1
- package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
- package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
- package/docs/api/interfaces/PaceAppLayoutProps.md +27 -27
- package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
- package/docs/api/interfaces/PageAccessRecord.md +1 -1
- package/docs/api/interfaces/PagePermissionContextType.md +1 -1
- package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
- package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
- package/docs/api/interfaces/PaletteData.md +1 -1
- package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
- package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
- package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
- package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
- package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
- package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
- package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
- package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
- package/docs/api/interfaces/RBACConfig.md +1 -1
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RevokeEventAppRoleParams.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RoleManagementResult.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +1 -1
- package/docs/api/interfaces/RouteConfig.md +1 -1
- package/docs/api/interfaces/SecureDataContextType.md +1 -1
- package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
- package/docs/api/interfaces/StorageConfig.md +1 -1
- package/docs/api/interfaces/StorageFileInfo.md +1 -1
- package/docs/api/interfaces/StorageFileMetadata.md +1 -1
- package/docs/api/interfaces/StorageListOptions.md +1 -1
- package/docs/api/interfaces/StorageListResult.md +1 -1
- package/docs/api/interfaces/StorageUploadOptions.md +1 -1
- package/docs/api/interfaces/StorageUploadResult.md +1 -1
- package/docs/api/interfaces/StorageUrlOptions.md +1 -1
- package/docs/api/interfaces/StyleImport.md +1 -1
- package/docs/api/interfaces/SwitchProps.md +1 -1
- package/docs/api/interfaces/ToastActionElement.md +1 -1
- package/docs/api/interfaces/ToastProps.md +1 -1
- package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
- package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
- package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
- package/docs/api/interfaces/UsePublicFileDisplayOptions.md +1 -1
- package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
- package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
- package/docs/api/interfaces/UserEventAccess.md +1 -1
- package/docs/api/interfaces/UserMenuProps.md +1 -1
- package/docs/api/interfaces/UserProfile.md +1 -1
- package/docs/api/modules.md +10 -3
- package/docs/api-reference/components.md +24 -0
- package/docs/api-reference/types.md +28 -0
- package/docs/implementation-guides/data-tables.md +55 -10
- package/docs/implementation-guides/permission-enforcement.md +4 -0
- package/docs/rbac/super-admin-guide.md +43 -5
- package/package.json +1 -1
- package/src/components/DataTable/__tests__/DataTable.export.test.tsx +702 -0
- package/src/components/DataTable/components/DataTableCore.tsx +55 -36
- package/src/components/DataTable/index.ts +3 -1
- package/src/components/DataTable/types.ts +68 -0
- package/src/components/PaceAppLayout/PaceAppLayout.tsx +60 -11
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.security.test.tsx +81 -1
- package/dist/chunk-JDBO5NCG.js.map +0 -1
- package/dist/chunk-TMUNK34W.js.map +0 -1
- /package/dist/{DataTable-QZH6SEUM.js.map → DataTable-3Z5HLOWF.js.map} +0 -0
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
SelectSeparator,
|
|
26
26
|
SelectTrigger,
|
|
27
27
|
SelectValue
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-27MGXDD6.js";
|
|
29
29
|
import {
|
|
30
30
|
useCan,
|
|
31
31
|
usePermissions,
|
|
@@ -1474,7 +1474,11 @@ function PaceAppLayout({
|
|
|
1474
1474
|
}, [location.pathname, routePermissions, defaultPermission]);
|
|
1475
1475
|
const currentPageId = useMemo5(() => {
|
|
1476
1476
|
const currentPath = location.pathname;
|
|
1477
|
-
|
|
1477
|
+
if (pageIdMapping[currentPath]) {
|
|
1478
|
+
return pageIdMapping[currentPath];
|
|
1479
|
+
}
|
|
1480
|
+
const pathSegments = currentPath.slice(1).split("/").filter(Boolean);
|
|
1481
|
+
return pathSegments[0] || "home";
|
|
1478
1482
|
}, [location.pathname, pageIdMapping]);
|
|
1479
1483
|
const currentPermission = useMemo5(() => {
|
|
1480
1484
|
if (!enforcePermissions) {
|
|
@@ -1483,7 +1487,29 @@ function PaceAppLayout({
|
|
|
1483
1487
|
const permissionString = `${currentRoutePermission}:page.${currentPageId}`;
|
|
1484
1488
|
return permissionString;
|
|
1485
1489
|
}, [enforcePermissions, currentRoutePermission, currentPageId]);
|
|
1486
|
-
const
|
|
1490
|
+
const [isSuperAdminUser, setIsSuperAdminUser] = useState5(false);
|
|
1491
|
+
const [isCheckingSuperAdmin, setIsCheckingSuperAdmin] = useState5(false);
|
|
1492
|
+
useEffect3(() => {
|
|
1493
|
+
const checkSuperAdminStatus = async () => {
|
|
1494
|
+
if (!user?.id) {
|
|
1495
|
+
setIsSuperAdminUser(false);
|
|
1496
|
+
setIsCheckingSuperAdmin(false);
|
|
1497
|
+
return;
|
|
1498
|
+
}
|
|
1499
|
+
setIsCheckingSuperAdmin(true);
|
|
1500
|
+
try {
|
|
1501
|
+
const superAdminStatus = await isSuperAdmin(user.id);
|
|
1502
|
+
setIsSuperAdminUser(superAdminStatus);
|
|
1503
|
+
} catch (error) {
|
|
1504
|
+
console.error("[PaceAppLayout] Error checking super admin status:", error);
|
|
1505
|
+
setIsSuperAdminUser(false);
|
|
1506
|
+
} finally {
|
|
1507
|
+
setIsCheckingSuperAdmin(false);
|
|
1508
|
+
}
|
|
1509
|
+
};
|
|
1510
|
+
checkSuperAdminStatus();
|
|
1511
|
+
}, [user?.id]);
|
|
1512
|
+
const { can: canFromHook, isLoading: isCheckingPermission, error: permissionError } = useCan(
|
|
1487
1513
|
user?.id || "",
|
|
1488
1514
|
scope,
|
|
1489
1515
|
currentPermission,
|
|
@@ -1491,29 +1517,31 @@ function PaceAppLayout({
|
|
|
1491
1517
|
true
|
|
1492
1518
|
// useCache
|
|
1493
1519
|
);
|
|
1520
|
+
const can = isSuperAdminUser ? true : canFromHook;
|
|
1494
1521
|
const hasPermission = enforcePermissions ? can : true;
|
|
1495
1522
|
useEffect3(() => {
|
|
1496
1523
|
if (!enforcePermissions) {
|
|
1497
1524
|
return;
|
|
1498
1525
|
}
|
|
1499
|
-
if (isCheckingPermission) {
|
|
1526
|
+
if (isCheckingSuperAdmin || isCheckingPermission) {
|
|
1500
1527
|
return;
|
|
1501
1528
|
}
|
|
1502
|
-
if (strictMode && !can) {
|
|
1529
|
+
if (strictMode && !isSuperAdminUser && !can) {
|
|
1503
1530
|
console.error(`[PaceAppLayout] STRICT MODE VIOLATION: User attempted to access protected page without permission`, {
|
|
1504
1531
|
pageName: currentPageId,
|
|
1505
1532
|
operation: currentRoutePermission,
|
|
1506
1533
|
userId: user?.id,
|
|
1534
|
+
isSuperAdmin: isSuperAdminUser,
|
|
1507
1535
|
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
1508
1536
|
});
|
|
1509
1537
|
if (onStrictModeViolation) {
|
|
1510
1538
|
onStrictModeViolation(currentPageId, currentRoutePermission);
|
|
1511
1539
|
}
|
|
1512
1540
|
}
|
|
1513
|
-
if (!can && onPageAccessDenied) {
|
|
1541
|
+
if (!isSuperAdminUser && !can && onPageAccessDenied) {
|
|
1514
1542
|
onPageAccessDenied(currentPageId, currentRoutePermission);
|
|
1515
1543
|
}
|
|
1516
|
-
}, [enforcePermissions, can, isCheckingPermission, currentPageId, currentRoutePermission, user?.id, strictMode, auditLog, onPageAccessDenied, onStrictModeViolation]);
|
|
1544
|
+
}, [enforcePermissions, can, isCheckingPermission, isCheckingSuperAdmin, isSuperAdminUser, currentPageId, currentRoutePermission, user?.id, strictMode, auditLog, onPageAccessDenied, onStrictModeViolation]);
|
|
1517
1545
|
const [filteredMenuItems, setFilteredMenuItems] = useState5(baseMenuItems);
|
|
1518
1546
|
useEffect3(() => {
|
|
1519
1547
|
if (!filterNavigationByPermissions) {
|
|
@@ -1661,7 +1689,7 @@ function PaceAppLayout({
|
|
|
1661
1689
|
}
|
|
1662
1690
|
return result || { error: null };
|
|
1663
1691
|
};
|
|
1664
|
-
if (enforcePermissions && isCheckingPermission) {
|
|
1692
|
+
if (enforcePermissions && (isCheckingSuperAdmin || isCheckingPermission)) {
|
|
1665
1693
|
return /* @__PURE__ */ jsx13("div", { className: "flex items-center justify-center min-h-screen", children: /* @__PURE__ */ jsxs10("div", { className: "text-center", children: [
|
|
1666
1694
|
/* @__PURE__ */ jsx13("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-sec-900 mx-auto mb-4" }),
|
|
1667
1695
|
/* @__PURE__ */ jsx13("p", { className: "text-sec-600", children: "Checking permissions..." })
|
|
@@ -4548,4 +4576,4 @@ export {
|
|
|
4548
4576
|
PublicPageDiagnostic,
|
|
4549
4577
|
PublicPageContextChecker
|
|
4550
4578
|
};
|
|
4551
|
-
//# sourceMappingURL=chunk-
|
|
4579
|
+
//# sourceMappingURL=chunk-ENE3AB75.js.map
|