@jmruthers/pace-core 0.5.54 → 0.5.55
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/README.md +0 -4
- package/dist/{DataTable-7FMFXA7A.js → DataTable-4T627QFJ.js} +11 -11
- package/dist/{PublicLoadingSpinner-Bq_-BeK-.d.ts → PublicLoadingSpinner-SL8WaQN7.d.ts} +2 -21
- package/dist/{api-H5A3H4IR.js → api-LUNF5O6M.js} +3 -3
- package/dist/{appConfig-BVGyuvI7.d.ts → appConfig-DjpeG6P-.d.ts} +9 -1
- package/dist/{appNameResolver-7GHF5ED2.js → appNameResolver-UURKN7NF.js} +2 -2
- package/dist/{audit-BUW3LMJB.js → audit-6TOCAMKO.js} +2 -2
- package/dist/{chunk-MZBUOP4P.js → chunk-5BSLGBYI.js} +4 -3
- package/dist/chunk-5BSLGBYI.js.map +1 -0
- package/dist/{chunk-I5Z3QH5X.js → chunk-66C4BSAY.js} +2 -2
- package/dist/{chunk-I5Z3QH5X.js.map → chunk-66C4BSAY.js.map} +1 -1
- package/dist/{chunk-MYP2EGHX.js → chunk-AJ2KMES7.js} +21 -14
- package/dist/chunk-AJ2KMES7.js.map +1 -0
- package/dist/{chunk-EL2O4IUX.js → chunk-AQFRLC7K.js} +16 -24
- package/dist/{chunk-EL2O4IUX.js.map → chunk-AQFRLC7K.js.map} +1 -1
- package/dist/{chunk-7BNPOCLL.js → chunk-B2WTCLCV.js} +6 -2
- package/dist/chunk-B2WTCLCV.js.map +1 -0
- package/dist/{chunk-WJARTBCT.js → chunk-D7ARGIA3.js} +16 -7
- package/dist/chunk-D7ARGIA3.js.map +1 -0
- package/dist/{chunk-NRK4AIHQ.js → chunk-KBRACSJI.js} +3 -3
- package/dist/{chunk-NYUJ4FJR.js → chunk-KJDPSM64.js} +7 -7
- package/dist/chunk-KJDPSM64.js.map +1 -0
- package/dist/{chunk-GWSBHC4J.js → chunk-KLPVOPRI.js} +261 -38
- package/dist/chunk-KLPVOPRI.js.map +1 -0
- package/dist/{chunk-TRIZ7IB7.js → chunk-MPQDF75X.js} +148 -288
- package/dist/chunk-MPQDF75X.js.map +1 -0
- package/dist/{chunk-MSFACPQQ.js → chunk-PAEM3OWN.js} +11 -11
- package/dist/{chunk-MSFACPQQ.js.map → chunk-PAEM3OWN.js.map} +1 -1
- package/dist/{chunk-GIO7BFE7.js → chunk-RQD3D2CO.js} +66 -169
- package/dist/{chunk-GIO7BFE7.js.map → chunk-RQD3D2CO.js.map} +1 -1
- package/dist/{chunk-YDJW5XTN.js → chunk-STT7INZR.js} +25 -1
- package/dist/chunk-STT7INZR.js.map +1 -0
- package/dist/{chunk-6MTY77WU.js → chunk-TNMXZLDR.js} +3 -3
- package/dist/{chunk-BC3S53OZ.js → chunk-UQE2Y64H.js} +30 -14
- package/dist/chunk-UQE2Y64H.js.map +1 -0
- package/dist/{chunk-22KLBHPS.js → chunk-W66AZIOH.js} +2 -2
- package/dist/chunk-W66AZIOH.js.map +1 -0
- package/dist/{chunk-SS3E6QLB.js → chunk-YNUBMSMV.js} +2 -2
- package/dist/chunk-YNUBMSMV.js.map +1 -0
- package/dist/{chunk-NZ655MWE.js → chunk-ZOD2ZY6X.js} +5 -4
- package/dist/chunk-ZOD2ZY6X.js.map +1 -0
- package/dist/{chunk-74C6SNEC.js → chunk-ZPK5656W.js} +3 -3
- package/dist/{chunk-74C6SNEC.js.map → chunk-ZPK5656W.js.map} +1 -1
- package/dist/components.d.ts +22 -899
- package/dist/components.js +436 -3118
- package/dist/components.js.map +1 -1
- package/dist/file-reference-9xUOnwyt.d.ts +70 -0
- package/dist/hooks.d.ts +2 -2
- package/dist/hooks.js +10 -10
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +49 -9
- package/dist/index.js +190 -25
- package/dist/index.js.map +1 -1
- package/dist/{organisation-CO3Sh3_D.d.ts → organisation-t-vvQC3g.d.ts} +1 -8
- package/dist/providers.d.ts +2 -2
- package/dist/providers.js +5 -5
- package/dist/rbac/index.d.ts +65 -46
- package/dist/rbac/index.js +10 -12
- package/dist/styles/core.css +0 -125
- package/dist/types.d.ts +2 -1
- package/dist/types.js +3 -1
- package/dist/types.js.map +1 -1
- package/dist/{usePublicRouteParams-B2OcAsur.d.ts → usePublicRouteParams-CdoFxnJK.d.ts} +1 -1
- package/dist/utils.d.ts +3 -4
- package/dist/utils.js +44 -13
- package/dist/utils.js.map +1 -1
- package/docs/FILE_REFERENCE_SYSTEM.md +440 -0
- package/docs/INDEX.md +7 -5
- package/docs/README.md +0 -1
- package/docs/api/README.md +0 -4
- 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 +2 -2
- package/docs/api/classes/PublicErrorBoundary.md +1 -1
- package/docs/api/classes/RBACAuditManager.md +12 -12
- package/docs/api/classes/RBACCache.md +1 -1
- package/docs/api/classes/RBACEngine.md +6 -6
- 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 +281 -0
- 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/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/EventContextType.md +1 -1
- package/docs/api/interfaces/EventLogoProps.md +1 -1
- package/docs/api/interfaces/EventProviderProps.md +1 -1
- package/docs/api/interfaces/FileSizeLimits.md +1 -1
- package/docs/api/interfaces/FileUploadProps.md +1 -1
- package/docs/api/interfaces/FooterProps.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 +2 -2
- 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 +1 -1
- 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 +4 -4
- 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/RBACContextType.md +1 -1
- package/docs/api/interfaces/RBACLogger.md +1 -1
- package/docs/api/interfaces/RBACProviderProps.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
- package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
- package/docs/api/interfaces/RouteAccessRecord.md +2 -2
- package/docs/api/interfaces/RouteConfig.md +2 -2
- 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/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/UsePublicEventLogoOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventLogoReturn.md +1 -1
- package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
- package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
- package/docs/api/interfaces/UsePublicRouteParamsReturn.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 +204 -200
- package/docs/api-reference/components.md +141 -163
- package/docs/api-reference/hooks.md +347 -0
- package/docs/core-concepts/rbac-system.md +69 -16
- package/docs/getting-started/examples/basic-auth-app.md +0 -1
- package/docs/implementation-guides/datatable-rbac-usage.md +12 -11
- package/docs/implementation-guides/file-upload-storage.md +733 -0
- package/docs/implementation-guides/inactivity-tracking.md +779 -0
- package/docs/implementation-guides/organisation-security.md +748 -0
- package/docs/implementation-guides/public-pages-advanced.md +1022 -0
- package/docs/migration/MIGRATION_GUIDE.md +684 -0
- package/docs/migration/README.md +13 -2
- package/docs/migration/rbac-migration.md +73 -0
- package/docs/rbac/examples/rbac-rls-integration-example.md +11 -13
- package/docs/style-guide.md +269 -1
- package/package.json +1 -1
- package/src/__tests__/TESTING_GUIDELINES.md +331 -18
- package/src/__tests__/helpers/supabaseMock.ts +99 -0
- package/src/__tests__/rbac/PagePermissionGuard.test.tsx +10 -7
- package/src/__tests__/shared.ts +6 -0
- package/src/components/DataTable/components/ActionButtons.tsx +2 -2
- package/src/components/DataTable/components/DataTableCore.tsx +2 -2
- package/src/components/DataTable/components/UnifiedTableBody.tsx +1 -1
- package/src/components/DataTable/utils/debugTools.ts +2 -2
- package/src/components/Dialog/Dialog.test.tsx +12 -2
- package/src/components/ErrorBoundary/ErrorBoundary.test.tsx +6 -6
- package/src/components/ErrorBoundary/ErrorBoundary.tsx +2 -2
- package/src/components/FileDisplay.tsx +233 -0
- package/src/components/FileUpload.tsx +176 -0
- package/src/components/Footer/Footer.test.tsx +7 -7
- package/src/components/NavigationMenu/NavigationMenu.test.tsx +13 -6
- package/src/components/OrganisationSelector/OrganisationSelector.test.tsx +30 -3
- package/src/components/OrganisationSelector/OrganisationSelector.tsx +1 -1
- package/src/components/PaceAppLayout/__tests__/PaceAppLayout.rbac.test.tsx +558 -0
- package/src/components/PublicLayout/PublicErrorBoundary.tsx +1 -1
- package/src/components/PublicLayout/PublicPageDebugger.tsx +2 -2
- package/src/components/PublicLayout/PublicPageDiagnostic.tsx +2 -2
- package/src/components/PublicLayout/PublicPageProvider.tsx +2 -2
- package/src/components/Select/Select.test.tsx +50 -15
- package/src/components/SuperAdminGuard.tsx +2 -2
- package/src/components/__tests__/SuperAdminGuard.test.tsx +559 -0
- package/src/components/index.ts +0 -183
- package/src/hooks/__tests__/useOrganisationPermissions.unit.test.tsx +2 -2
- package/src/hooks/__tests__/usePermissionCache.unit.test.ts +1 -1
- package/src/hooks/__tests__/useRBAC.unit.test.ts +191 -138
- package/src/hooks/public/usePublicEvent.ts +2 -2
- package/src/hooks/useAppConfig.ts +3 -3
- package/src/hooks/useComponentPerformance.ts +1 -1
- package/src/hooks/useDataTablePerformance.ts +1 -1
- package/src/hooks/useFileReference.ts +232 -0
- package/src/hooks/useOrganisationPermissions.test.ts +254 -344
- package/src/hooks/useOrganisationPermissions.ts +15 -7
- package/src/hooks/useOrganisationSecurity.test.ts +390 -402
- package/src/hooks/usePerformanceMonitor.ts +1 -1
- package/src/hooks/usePermissionCache.test.ts +264 -395
- package/src/hooks/usePermissionCache.ts +34 -4
- package/src/hooks/useSecureDataAccess.test.ts +486 -0
- package/src/hooks/useSecureDataAccess.ts +4 -1
- package/src/providers/InactivityProvider.tsx +2 -2
- package/src/providers/OrganisationProvider.test.simple.tsx +168 -0
- package/src/providers/OrganisationProvider.test.tsx +168 -0
- package/src/providers/OrganisationProvider.tsx +18 -31
- package/src/providers/UnifiedAuthProvider.test.simple.tsx +205 -0
- package/src/providers/UnifiedAuthProvider.test.tsx +128 -0
- package/src/providers/__tests__/InactivityProvider.test.tsx +3 -4
- package/src/providers/__tests__/OrganisationProvider.test.tsx +19 -14
- package/src/rbac/__tests__/integration.authflow.test.tsx +123 -0
- package/src/rbac/__tests__/integration.navigation.test.tsx +72 -0
- package/src/rbac/__tests__/integration.securedata.test.tsx +92 -0
- package/src/rbac/__tests__/integration.smoke.test.tsx +73 -0
- package/src/rbac/__tests__/rbac-core.test.tsx +26 -22
- package/src/rbac/__tests__/rbac-engine-core-logic.test.ts +411 -0
- package/src/rbac/__tests__/rbac-engine-simplified.test.ts +285 -0
- package/src/rbac/__tests__/rbac-functions.test.ts +655 -0
- package/src/rbac/__tests__/rbac-integration.test.ts +532 -0
- package/src/rbac/__tests__/scenarios.user-role.test.tsx +196 -0
- package/src/rbac/api.test.ts +6 -6
- package/src/rbac/api.ts +2 -2
- package/src/rbac/audit.test.ts +485 -0
- package/src/rbac/audit.ts +7 -1
- package/src/rbac/cache-invalidation.ts +318 -0
- package/src/rbac/cache.test.ts +286 -0
- package/src/rbac/components/EnhancedNavigationMenu.test.tsx +559 -0
- package/src/rbac/components/EnhancedNavigationMenu.tsx +29 -23
- package/src/rbac/components/NavigationProvider.test.tsx +449 -0
- package/src/rbac/components/PagePermissionGuard.tsx +4 -4
- package/src/rbac/components/PagePermissionProvider.test.tsx +479 -0
- package/src/rbac/components/SecureDataProvider.test.tsx +511 -0
- package/src/rbac/components/__tests__/PagePermissionGuard.race-condition.test.tsx +159 -430
- package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +4 -5
- package/src/rbac/components/__tests__/PagePermissionGuard.verification.test.tsx +112 -118
- package/src/rbac/config.test.ts +410 -0
- package/src/rbac/engine.test.simple.ts +237 -0
- package/src/rbac/engine.test.ts +233 -0
- package/src/rbac/engine.ts +37 -41
- package/src/rbac/examples/CompleteRBACExample.tsx +3 -3
- package/src/rbac/examples/EventBasedApp.tsx +4 -4
- package/src/rbac/hooks/useRBAC.simple.test.ts +16 -0
- package/src/rbac/hooks/useRBAC.test.ts +207 -455
- package/src/rbac/hooks/useRBAC.ts +30 -22
- package/src/rbac/permissions.test.ts +128 -0
- package/src/rbac/permissions.ts +56 -141
- package/src/rbac/providers/RBACProvider.tsx +1 -1
- package/src/rbac/secureClient.test.ts +444 -0
- package/src/rbac/security.test.ts +390 -0
- package/src/rbac/security.ts +1 -1
- package/src/rbac/types.test.ts +382 -0
- package/src/rbac/types.ts +2 -2
- package/src/styles/core.css +0 -125
- package/src/types/file-reference.ts +77 -0
- package/src/types/rbac-functions.ts +290 -0
- package/src/types/supabase.ts +10 -28
- package/src/types/unified.ts +4 -1
- package/src/utils/__tests__/bundleAnalysis.unit.test.ts +81 -55
- package/src/utils/__tests__/lazyLoad.unit.test.tsx +21 -12
- package/src/utils/__tests__/organisationContext.unit.test.ts +13 -7
- package/src/utils/__tests__/performanceBudgets.unit.test.ts +3 -3
- package/src/utils/__tests__/sessionTracking.unit.test.ts +32 -12
- package/src/utils/appConfig.ts +1 -1
- package/src/utils/appIdResolver.test.ts +503 -0
- package/src/utils/appIdResolver.ts +1 -1
- package/src/utils/appNameResolver.test.ts +494 -0
- package/src/utils/appNameResolver.ts +3 -2
- package/src/utils/bundleAnalysis.ts +3 -3
- package/src/utils/debugLogger.ts +1 -1
- package/src/utils/file-reference.ts +263 -0
- package/src/utils/formatDate.test.ts +2 -2
- package/src/utils/organisationContext.test.ts +340 -0
- package/src/utils/organisationContext.ts +19 -6
- package/src/utils/performanceBudgets.ts +2 -2
- package/src/utils/permissionUtils.test.ts +393 -0
- package/src/utils/permissionUtils.ts +5 -2
- package/src/utils/secureDataAccess.test.ts +715 -0
- package/src/utils/secureDataAccess.ts +21 -5
- package/src/utils/sessionTracking.ts +34 -4
- package/src/utils/storage/__tests__/helpers.unit.test.ts +328 -0
- package/src/utils/storage/__tests__/index.unit.test.ts +16 -0
- package/src/utils/storage/helpers.ts +20 -25
- package/src/utils/storage/index.ts +29 -1
- package/src/vite-env.d.ts +17 -0
- package/dist/chunk-22KLBHPS.js.map +0 -1
- package/dist/chunk-7BNPOCLL.js.map +0 -1
- package/dist/chunk-BC3S53OZ.js.map +0 -1
- package/dist/chunk-GWSBHC4J.js.map +0 -1
- package/dist/chunk-MYP2EGHX.js.map +0 -1
- package/dist/chunk-MZBUOP4P.js.map +0 -1
- package/dist/chunk-NYUJ4FJR.js.map +0 -1
- package/dist/chunk-NZ655MWE.js.map +0 -1
- package/dist/chunk-SS3E6QLB.js.map +0 -1
- package/dist/chunk-TRIZ7IB7.js.map +0 -1
- package/dist/chunk-WJARTBCT.js.map +0 -1
- package/dist/chunk-YDJW5XTN.js.map +0 -1
- package/docs/print-components/README.md +0 -258
- package/docs/print-components/api-reference.md +0 -636
- package/docs/print-components/examples/README.md +0 -204
- package/docs/print-components/examples/basic-report.tsx +0 -92
- package/docs/print-components/examples/card-catalog.tsx +0 -149
- package/docs/print-components/examples/cover-page-report.tsx +0 -163
- package/docs/print-components/quick-start.md +0 -363
- package/src/components/PrintButton/PrintButton.tsx +0 -321
- package/src/components/PrintButton/PrintButtonGroup.tsx +0 -84
- package/src/components/PrintButton/PrintToolbar.tsx +0 -94
- package/src/components/PrintButton/__tests__/PrintButton.test.tsx +0 -271
- package/src/components/PrintButton/examples/PrintButtonShowcase.tsx +0 -438
- package/src/components/PrintButton/index.ts +0 -33
- package/src/components/PrintButton/types.ts +0 -173
- package/src/components/PrintCard/PrintCard.tsx +0 -154
- package/src/components/PrintCard/PrintCardContent.tsx +0 -57
- package/src/components/PrintCard/PrintCardFooter.tsx +0 -60
- package/src/components/PrintCard/PrintCardGrid.tsx +0 -91
- package/src/components/PrintCard/PrintCardHeader.tsx +0 -78
- package/src/components/PrintCard/PrintCardImage.tsx +0 -81
- package/src/components/PrintCard/examples/PrintCardShowcase.tsx +0 -239
- package/src/components/PrintCard/index.ts +0 -34
- package/src/components/PrintCard/types.ts +0 -171
- package/src/components/PrintDataTable/PrintDataTable.tsx +0 -215
- package/src/components/PrintDataTable/PrintTableGroup.tsx +0 -90
- package/src/components/PrintDataTable/PrintTableRow.tsx +0 -76
- package/src/components/PrintDataTable/index.ts +0 -25
- package/src/components/PrintDataTable/types.ts +0 -67
- package/src/components/PrintFooter/PrintFooter.tsx +0 -183
- package/src/components/PrintFooter/PrintFooterContent.tsx +0 -71
- package/src/components/PrintFooter/PrintFooterInfo.tsx +0 -86
- package/src/components/PrintFooter/PrintPageNumber.tsx +0 -90
- package/src/components/PrintFooter/examples/PrintFooterShowcase.tsx +0 -390
- package/src/components/PrintFooter/index.ts +0 -30
- package/src/components/PrintFooter/types.ts +0 -149
- package/src/components/PrintGrid/PrintGrid.tsx +0 -180
- package/src/components/PrintGrid/PrintGridBreakpoint.tsx +0 -109
- package/src/components/PrintGrid/PrintGridContainer.tsx +0 -128
- package/src/components/PrintGrid/PrintGridItem.tsx +0 -220
- package/src/components/PrintGrid/examples/PrintGridShowcase.tsx +0 -359
- package/src/components/PrintGrid/index.ts +0 -31
- package/src/components/PrintGrid/types.ts +0 -159
- package/src/components/PrintHeader/PrintCoverHeader.tsx +0 -230
- package/src/components/PrintHeader/PrintHeader.tsx +0 -150
- package/src/components/PrintHeader/index.ts +0 -17
- package/src/components/PrintHeader/types.ts +0 -42
- package/src/components/PrintLayout/PrintLayout.tsx +0 -122
- package/src/components/PrintLayout/PrintLayoutContext.tsx +0 -66
- package/src/components/PrintLayout/PrintPageBreak.tsx +0 -52
- package/src/components/PrintLayout/examples/PrintShowcase.tsx +0 -230
- package/src/components/PrintLayout/index.ts +0 -19
- package/src/components/PrintLayout/types.ts +0 -37
- package/src/components/PrintPageBreak/PrintPageBreak.tsx +0 -120
- package/src/components/PrintPageBreak/PrintPageBreakGroup.tsx +0 -90
- package/src/components/PrintPageBreak/PrintPageBreakIndicator.tsx +0 -112
- package/src/components/PrintPageBreak/examples/PrintPageBreakShowcase.tsx +0 -279
- package/src/components/PrintPageBreak/index.ts +0 -23
- package/src/components/PrintPageBreak/types.ts +0 -94
- package/src/components/PrintSection/PrintColumn.tsx +0 -104
- package/src/components/PrintSection/PrintDivider.tsx +0 -101
- package/src/components/PrintSection/PrintSection.tsx +0 -129
- package/src/components/PrintSection/PrintSectionContent.tsx +0 -75
- package/src/components/PrintSection/PrintSectionHeader.tsx +0 -97
- package/src/components/PrintSection/examples/PrintSectionShowcase.tsx +0 -258
- package/src/components/PrintSection/index.ts +0 -33
- package/src/components/PrintSection/types.ts +0 -155
- package/src/components/PrintText/PrintText.tsx +0 -116
- package/src/components/PrintText/index.ts +0 -16
- package/src/components/PrintText/types.ts +0 -24
- package/src/rbac/__tests__/integration.test.tsx +0 -218
- package/src/utils/print/PrintDataProcessor.ts +0 -390
- package/src/utils/print/examples/PrintUtilitiesShowcase.tsx +0 -397
- package/src/utils/print/index.ts +0 -29
- package/src/utils/print/types.ts +0 -196
- package/src/utils/print/usePrintOptimization.ts +0 -272
- /package/dist/{DataTable-7FMFXA7A.js.map → DataTable-4T627QFJ.js.map} +0 -0
- /package/dist/{api-H5A3H4IR.js.map → api-LUNF5O6M.js.map} +0 -0
- /package/dist/{appNameResolver-7GHF5ED2.js.map → appNameResolver-UURKN7NF.js.map} +0 -0
- /package/dist/{audit-BUW3LMJB.js.map → audit-6TOCAMKO.js.map} +0 -0
- /package/dist/{chunk-NRK4AIHQ.js.map → chunk-KBRACSJI.js.map} +0 -0
- /package/dist/{chunk-6MTY77WU.js.map → chunk-TNMXZLDR.js.map} +0 -0
|
@@ -52,7 +52,8 @@ Permissions define specific actions users can perform on resources.
|
|
|
52
52
|
- **read** - View resources
|
|
53
53
|
- **update** - Modify existing resources
|
|
54
54
|
- **delete** - Remove resources
|
|
55
|
-
|
|
55
|
+
|
|
56
|
+
> **⚠️ Important**: The `manage` operation has been removed for RBAC compliance. Use specific CRUD operations instead.
|
|
56
57
|
|
|
57
58
|
#### Common Resources
|
|
58
59
|
- **users** - User management
|
|
@@ -66,8 +67,10 @@ Permissions define specific actions users can perform on resources.
|
|
|
66
67
|
- `create:page.users` - Create users on users page
|
|
67
68
|
- `update:page.settings` - Modify settings page
|
|
68
69
|
- `delete:page.admin` - Remove content from admin page
|
|
69
|
-
- `manage:page.system` - Full system page management
|
|
70
70
|
- `read:events` - View event information (event-app permission)
|
|
71
|
+
- `create:events` - Create new events
|
|
72
|
+
- `update:events` - Modify existing events
|
|
73
|
+
- `delete:events` - Remove events
|
|
71
74
|
|
|
72
75
|
### Permission Hierarchy
|
|
73
76
|
|
|
@@ -75,7 +78,7 @@ Permissions follow a hierarchical structure based on organisation roles:
|
|
|
75
78
|
|
|
76
79
|
```
|
|
77
80
|
Organisation Admin
|
|
78
|
-
├── All page permissions (read:page.*, create:page.*, update:page.*, delete:page
|
|
81
|
+
├── All page permissions (read:page.*, create:page.*, update:page.*, delete:page.*)
|
|
79
82
|
├── All event-app permissions (read:events, create:events, update:events, delete:events)
|
|
80
83
|
|
|
81
84
|
Leader
|
|
@@ -158,22 +161,27 @@ Permissions can be scoped to specific resources:
|
|
|
158
161
|
|
|
159
162
|
The RBAC system uses a **database-first architecture** where all permission logic resides in PostgreSQL functions:
|
|
160
163
|
|
|
161
|
-
- **RPC Functions** - All permission checks use `
|
|
164
|
+
- **RPC Functions** - All permission checks use `rbac_permissions_get()` RPC function
|
|
162
165
|
- **RLS Protection** - Direct table access is blocked by Row Level Security policies
|
|
163
166
|
- **Elevated Privileges** - RPC functions run with elevated privileges to bypass RLS
|
|
164
167
|
- **Single Source of Truth** - All permission logic centralized in database functions
|
|
168
|
+
- **No Hardcoded Permissions** - All permissions are stored in and retrieved from the database
|
|
165
169
|
|
|
166
170
|
### Permission Validation
|
|
167
171
|
|
|
168
172
|
- **Runtime Checking** - Permissions are validated on every request
|
|
169
|
-
- **Caching** - Permission results are cached for performance
|
|
173
|
+
- **Caching** - Permission results are cached for performance with automatic invalidation
|
|
170
174
|
- **Fallback Handling** - Graceful degradation when permissions are unavailable
|
|
175
|
+
- **CRUD-Only Operations** - Only read, create, update, delete operations are allowed
|
|
176
|
+
- **Automatic Cache Invalidation** - Cache is automatically cleared when permissions change
|
|
171
177
|
|
|
172
178
|
### Audit Logging
|
|
173
179
|
|
|
174
|
-
- **Permission Checks** - All permission checks are logged
|
|
180
|
+
- **Permission Checks** - All permission checks are logged with cache source tracking
|
|
175
181
|
- **Access Attempts** - Failed access attempts are tracked
|
|
176
|
-
- **Permission Changes** - Role and permission modifications are audited
|
|
182
|
+
- **Permission Changes** - Role and permission modifications are automatically audited via database triggers
|
|
183
|
+
- **Cache Invalidation** - Cache invalidation events are logged for debugging
|
|
184
|
+
- **Role Changes** - All role grants and revocations are automatically logged
|
|
177
185
|
|
|
178
186
|
### Security Enforcement
|
|
179
187
|
|
|
@@ -187,31 +195,32 @@ The RBAC system provides dedicated database functions for managing user roles. T
|
|
|
187
195
|
|
|
188
196
|
### Key Functions
|
|
189
197
|
|
|
190
|
-
- **`
|
|
191
|
-
- **`
|
|
192
|
-
- **`
|
|
193
|
-
- **`
|
|
194
|
-
- **`
|
|
195
|
-
- **`
|
|
196
|
-
- **`get_user_roles()`** - Get all roles for a user
|
|
198
|
+
- **`rbac_role_grant()`** - Grant roles to users (organisation, global, or event-app)
|
|
199
|
+
- **`rbac_role_revoke()`** - Revoke roles from users
|
|
200
|
+
- **`rbac_permissions_get()`** - Get all permissions for a user in a context
|
|
201
|
+
- **`rbac_permission_check()`** - Check if a user has a specific permission
|
|
202
|
+
- **`rbac_roles_list()`** - List all available roles
|
|
203
|
+
- **`rbac_role_validate()`** - Validate if a user has a specific role
|
|
197
204
|
|
|
198
205
|
### Usage Example
|
|
199
206
|
|
|
200
207
|
```sql
|
|
201
208
|
-- Grant a member role to a user
|
|
202
|
-
SELECT
|
|
209
|
+
SELECT rbac_role_grant(
|
|
203
210
|
'user-uuid-here',
|
|
204
211
|
'org-uuid-here',
|
|
205
212
|
'member',
|
|
213
|
+
'organisation',
|
|
206
214
|
auth.uid(),
|
|
207
215
|
'Welcome to the team!'
|
|
208
216
|
);
|
|
209
217
|
|
|
210
218
|
-- Promote user to leader
|
|
211
|
-
SELECT
|
|
219
|
+
SELECT rbac_role_grant(
|
|
212
220
|
'user-uuid-here',
|
|
213
221
|
'org-uuid-here',
|
|
214
222
|
'leader',
|
|
223
|
+
'organisation',
|
|
215
224
|
auth.uid(),
|
|
216
225
|
'Promoted due to excellent performance'
|
|
217
226
|
);
|
|
@@ -219,6 +228,50 @@ SELECT grant_organisation_role(
|
|
|
219
228
|
|
|
220
229
|
For complete documentation on role management functions, see **[Role Management Functions](../rbac/role-management-functions.md)**.
|
|
221
230
|
|
|
231
|
+
## RBAC Compliance & Recent Changes
|
|
232
|
+
|
|
233
|
+
### Database-Driven Permissions
|
|
234
|
+
|
|
235
|
+
PACE Core RBAC is now **100% compliant** with enterprise RBAC requirements:
|
|
236
|
+
|
|
237
|
+
- **No Hardcoded Permissions** - All permissions are stored in and retrieved from the database
|
|
238
|
+
- **CRUD Operations Only** - Only read, create, update, delete operations are allowed (no 'manage' operations)
|
|
239
|
+
- **Automatic Cache Invalidation** - Cache is automatically cleared when permissions change via database triggers
|
|
240
|
+
- **Comprehensive Audit Logging** - All permission changes and role modifications are automatically logged
|
|
241
|
+
|
|
242
|
+
### Key Compliance Features
|
|
243
|
+
|
|
244
|
+
#### 1. Database-First Architecture
|
|
245
|
+
- All permission logic resides in PostgreSQL RPC functions
|
|
246
|
+
- No hardcoded permission mappings in application code
|
|
247
|
+
- Single source of truth for all permissions
|
|
248
|
+
|
|
249
|
+
#### 2. Automatic Cache Management
|
|
250
|
+
- Cache invalidation triggered by database changes
|
|
251
|
+
- Real-time subscription to permission changes
|
|
252
|
+
- Pattern-based cache clearing for optimal performance
|
|
253
|
+
|
|
254
|
+
#### 3. Complete Audit Trail
|
|
255
|
+
- Database triggers automatically log all role and permission changes
|
|
256
|
+
- Cache source tracking in audit events
|
|
257
|
+
- Comprehensive metadata for compliance reporting
|
|
258
|
+
|
|
259
|
+
#### 4. Organisation-Specific Permissions
|
|
260
|
+
- Each organisation can define custom page-level permissions
|
|
261
|
+
- Admin app integration for permission management
|
|
262
|
+
- Dynamic RLS policies based on database permissions
|
|
263
|
+
|
|
264
|
+
### Migration from Legacy Systems
|
|
265
|
+
|
|
266
|
+
If you're upgrading from a system with hardcoded permissions:
|
|
267
|
+
|
|
268
|
+
1. **Remove Hardcoded Permission Mappings** - Replace with database queries
|
|
269
|
+
2. **Update Permission Checks** - Use `rbac_permissions_get()` RPC function
|
|
270
|
+
3. **Replace 'manage' Operations** - Use specific CRUD operations instead
|
|
271
|
+
4. **Enable Cache Invalidation** - Ensure realtime subscriptions are active
|
|
272
|
+
|
|
273
|
+
For detailed migration instructions, see the **[RBAC Migration Guide](../migration/rbac-migration.md)**.
|
|
274
|
+
|
|
222
275
|
## What's Next?
|
|
223
276
|
|
|
224
277
|
- **[Role Management Functions](../rbac/role-management-functions.md)** - Complete guide to role management functions
|
|
@@ -492,7 +492,6 @@ The app uses PACE Core's design system. You can customize:
|
|
|
492
492
|
- **Forms**: Use PACE Core's Form components
|
|
493
493
|
- **Data Tables**: Add DataTable for data management
|
|
494
494
|
- **Permissions**: Implement RBAC with useCan hook
|
|
495
|
-
- **Print Reports**: Add PrintLayout components
|
|
496
495
|
|
|
497
496
|
## 📚 Next Steps
|
|
498
497
|
|
|
@@ -38,8 +38,8 @@ function DishesPage() {
|
|
|
38
38
|
creation: true, // Will be controlled by create:page.dishes permission
|
|
39
39
|
editing: true, // Will be controlled by update:page.dishes permission
|
|
40
40
|
deletion: true, // Will be controlled by delete:page.dishes permission
|
|
41
|
-
export: true, // Will be controlled by
|
|
42
|
-
import: true // Will be controlled by
|
|
41
|
+
export: true, // Will be controlled by read:page.dishes permission
|
|
42
|
+
import: true // Will be controlled by create:page.dishes permission
|
|
43
43
|
}}
|
|
44
44
|
getRowId={(row) => row.id}
|
|
45
45
|
/>
|
|
@@ -87,8 +87,8 @@ The DataTable now checks the following page-based permissions:
|
|
|
87
87
|
| **Create Button** | `create:page.{pageId}` | Controls create functionality |
|
|
88
88
|
| **Edit Actions** | `update:page.{pageId}` | Controls edit/update functionality |
|
|
89
89
|
| **Delete Actions** | `delete:page.{pageId}` | Controls delete functionality |
|
|
90
|
-
| **Export** | `
|
|
91
|
-
| **Import** | `
|
|
90
|
+
| **Export** | `read:page.{pageId}` | Controls export functionality |
|
|
91
|
+
| **Import** | `create:page.{pageId}` | Controls import functionality |
|
|
92
92
|
|
|
93
93
|
### Role-Based Examples
|
|
94
94
|
|
|
@@ -109,8 +109,8 @@ The DataTable now checks the following page-based permissions:
|
|
|
109
109
|
creation: true, // ✅ Allowed if planner has create:page.dishes
|
|
110
110
|
editing: true, // ✅ Allowed if planner has update:page.dishes
|
|
111
111
|
deletion: false, // ❌ Disabled if planner lacks delete:page.dishes
|
|
112
|
-
export: true, // ✅ Allowed if planner has
|
|
113
|
-
import: false // ❌ Disabled if planner lacks
|
|
112
|
+
export: true, // ✅ Allowed if planner has read:page.dishes
|
|
113
|
+
import: false // ❌ Disabled if planner lacks create:page.dishes
|
|
114
114
|
}}
|
|
115
115
|
getRowId={(row) => row.id}
|
|
116
116
|
/>
|
|
@@ -133,8 +133,8 @@ The DataTable now checks the following page-based permissions:
|
|
|
133
133
|
creation: false, // ❌ Disabled - viewer typically lacks create:page.dishes
|
|
134
134
|
editing: false, // ❌ Disabled - viewer typically lacks update:page.dishes
|
|
135
135
|
deletion: false, // ❌ Disabled - viewer typically lacks delete:page.dishes
|
|
136
|
-
export: false, // ❌ Disabled - viewer typically lacks
|
|
137
|
-
import: false // ❌ Disabled - viewer typically lacks
|
|
136
|
+
export: false, // ❌ Disabled - viewer typically lacks read:page.dishes
|
|
137
|
+
import: false // ❌ Disabled - viewer typically lacks create:page.dishes
|
|
138
138
|
}}
|
|
139
139
|
getRowId={(row) => row.id}
|
|
140
140
|
/>
|
|
@@ -291,8 +291,8 @@ function DishesPage() {
|
|
|
291
291
|
creation: true, // Controlled by create:page.dishes permission
|
|
292
292
|
editing: true, // Controlled by update:page.dishes permission
|
|
293
293
|
deletion: true, // Controlled by delete:page.dishes permission
|
|
294
|
-
export: true, // Controlled by
|
|
295
|
-
import: true // Controlled by
|
|
294
|
+
export: true, // Controlled by read:page.dishes permission
|
|
295
|
+
import: true // Controlled by create:page.dishes permission
|
|
296
296
|
}}
|
|
297
297
|
onCreateRow={handleCreateDish}
|
|
298
298
|
onEditRow={handleEditDish}
|
|
@@ -311,6 +311,7 @@ This implementation ensures that:
|
|
|
311
311
|
- Users with `create:page.dishes` can create new dishes
|
|
312
312
|
- Users with `update:page.dishes` can edit existing dishes
|
|
313
313
|
- Users with `delete:page.dishes` can delete dishes
|
|
314
|
-
- Users with `
|
|
314
|
+
- Users with `read:page.dishes` can export data
|
|
315
|
+
- Users with `create:page.dishes` can import data
|
|
315
316
|
|
|
316
317
|
The DataTable will automatically show/hide features based on the user's actual permissions for the dishes page.
|