@jmruthers/pace-core 0.5.109 → 0.5.110

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.
Files changed (144) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/{DataTable-5HITILXS.js → DataTable-D3BK2FCN.js} +4 -4
  3. package/dist/{api-5I3E47G2.js → api-PIE4JRFS.js} +2 -2
  4. package/dist/{chunk-P72NKAT5.js → chunk-3J5N2T2N.js} +51 -11
  5. package/dist/chunk-3J5N2T2N.js.map +1 -0
  6. package/dist/{chunk-3TKTL5AZ.js → chunk-7GBEBJLR.js} +26 -34
  7. package/dist/chunk-7GBEBJLR.js.map +1 -0
  8. package/dist/{chunk-S4D3Z723.js → chunk-AWK2FAUN.js} +3 -3
  9. package/dist/{chunk-WWNOVFDC.js → chunk-HADXAZT3.js} +2 -2
  10. package/dist/{chunk-UW2DE6JX.js → chunk-HGZSO43Y.js} +2 -2
  11. package/dist/{chunk-F6TSYCKP.js → chunk-XRSP3H52.js} +12 -7
  12. package/dist/chunk-XRSP3H52.js.map +1 -0
  13. package/dist/components.js +4 -4
  14. package/dist/hooks.js +1 -1
  15. package/dist/index.js +6 -6
  16. package/dist/rbac/index.d.ts +34 -22
  17. package/dist/rbac/index.js +3 -3
  18. package/dist/utils.js +1 -1
  19. package/docs/api/classes/ColumnFactory.md +1 -1
  20. package/docs/api/classes/ErrorBoundary.md +1 -1
  21. package/docs/api/classes/InvalidScopeError.md +1 -1
  22. package/docs/api/classes/MissingUserContextError.md +1 -1
  23. package/docs/api/classes/OrganisationContextRequiredError.md +1 -1
  24. package/docs/api/classes/PermissionDeniedError.md +1 -1
  25. package/docs/api/classes/PublicErrorBoundary.md +1 -1
  26. package/docs/api/classes/RBACAuditManager.md +1 -1
  27. package/docs/api/classes/RBACCache.md +1 -1
  28. package/docs/api/classes/RBACEngine.md +9 -8
  29. package/docs/api/classes/RBACError.md +1 -1
  30. package/docs/api/classes/RBACNotInitializedError.md +1 -1
  31. package/docs/api/classes/SecureSupabaseClient.md +1 -1
  32. package/docs/api/classes/StorageUtils.md +1 -1
  33. package/docs/api/enums/FileCategory.md +1 -1
  34. package/docs/api/interfaces/AggregateConfig.md +1 -1
  35. package/docs/api/interfaces/ButtonProps.md +1 -1
  36. package/docs/api/interfaces/CardProps.md +1 -1
  37. package/docs/api/interfaces/ColorPalette.md +1 -1
  38. package/docs/api/interfaces/ColorShade.md +1 -1
  39. package/docs/api/interfaces/DataAccessRecord.md +1 -1
  40. package/docs/api/interfaces/DataRecord.md +1 -1
  41. package/docs/api/interfaces/DataTableAction.md +1 -1
  42. package/docs/api/interfaces/DataTableColumn.md +1 -1
  43. package/docs/api/interfaces/DataTableProps.md +1 -1
  44. package/docs/api/interfaces/DataTableToolbarButton.md +1 -1
  45. package/docs/api/interfaces/EmptyStateConfig.md +1 -1
  46. package/docs/api/interfaces/EnhancedNavigationMenuProps.md +1 -1
  47. package/docs/api/interfaces/FileDisplayProps.md +1 -1
  48. package/docs/api/interfaces/FileMetadata.md +1 -1
  49. package/docs/api/interfaces/FileReference.md +1 -1
  50. package/docs/api/interfaces/FileSizeLimits.md +1 -1
  51. package/docs/api/interfaces/FileUploadOptions.md +1 -1
  52. package/docs/api/interfaces/FileUploadProps.md +1 -1
  53. package/docs/api/interfaces/FooterProps.md +1 -1
  54. package/docs/api/interfaces/InactivityWarningModalProps.md +1 -1
  55. package/docs/api/interfaces/InputProps.md +1 -1
  56. package/docs/api/interfaces/LabelProps.md +1 -1
  57. package/docs/api/interfaces/LoginFormProps.md +1 -1
  58. package/docs/api/interfaces/NavigationAccessRecord.md +1 -1
  59. package/docs/api/interfaces/NavigationContextType.md +1 -1
  60. package/docs/api/interfaces/NavigationGuardProps.md +1 -1
  61. package/docs/api/interfaces/NavigationItem.md +1 -1
  62. package/docs/api/interfaces/NavigationMenuProps.md +1 -1
  63. package/docs/api/interfaces/NavigationProviderProps.md +1 -1
  64. package/docs/api/interfaces/Organisation.md +1 -1
  65. package/docs/api/interfaces/OrganisationContextType.md +1 -1
  66. package/docs/api/interfaces/OrganisationMembership.md +1 -1
  67. package/docs/api/interfaces/OrganisationProviderProps.md +1 -1
  68. package/docs/api/interfaces/OrganisationSecurityError.md +1 -1
  69. package/docs/api/interfaces/PaceAppLayoutProps.md +1 -1
  70. package/docs/api/interfaces/PaceLoginPageProps.md +1 -1
  71. package/docs/api/interfaces/PageAccessRecord.md +1 -1
  72. package/docs/api/interfaces/PagePermissionContextType.md +1 -1
  73. package/docs/api/interfaces/PagePermissionGuardProps.md +1 -1
  74. package/docs/api/interfaces/PagePermissionProviderProps.md +1 -1
  75. package/docs/api/interfaces/PaletteData.md +1 -1
  76. package/docs/api/interfaces/PermissionEnforcerProps.md +1 -1
  77. package/docs/api/interfaces/ProtectedRouteProps.md +1 -1
  78. package/docs/api/interfaces/PublicErrorBoundaryProps.md +1 -1
  79. package/docs/api/interfaces/PublicErrorBoundaryState.md +1 -1
  80. package/docs/api/interfaces/PublicLoadingSpinnerProps.md +1 -1
  81. package/docs/api/interfaces/PublicPageFooterProps.md +1 -1
  82. package/docs/api/interfaces/PublicPageHeaderProps.md +1 -1
  83. package/docs/api/interfaces/PublicPageLayoutProps.md +1 -1
  84. package/docs/api/interfaces/RBACConfig.md +19 -8
  85. package/docs/api/interfaces/RBACLogger.md +5 -5
  86. package/docs/api/interfaces/RoleBasedRouterContextType.md +1 -1
  87. package/docs/api/interfaces/RoleBasedRouterProps.md +1 -1
  88. package/docs/api/interfaces/RouteAccessRecord.md +1 -1
  89. package/docs/api/interfaces/RouteConfig.md +1 -1
  90. package/docs/api/interfaces/SecureDataContextType.md +1 -1
  91. package/docs/api/interfaces/SecureDataProviderProps.md +1 -1
  92. package/docs/api/interfaces/StorageConfig.md +1 -1
  93. package/docs/api/interfaces/StorageFileInfo.md +1 -1
  94. package/docs/api/interfaces/StorageFileMetadata.md +1 -1
  95. package/docs/api/interfaces/StorageListOptions.md +1 -1
  96. package/docs/api/interfaces/StorageListResult.md +1 -1
  97. package/docs/api/interfaces/StorageUploadOptions.md +1 -1
  98. package/docs/api/interfaces/StorageUploadResult.md +1 -1
  99. package/docs/api/interfaces/StorageUrlOptions.md +1 -1
  100. package/docs/api/interfaces/StyleImport.md +1 -1
  101. package/docs/api/interfaces/SwitchProps.md +1 -1
  102. package/docs/api/interfaces/ToastActionElement.md +1 -1
  103. package/docs/api/interfaces/ToastProps.md +1 -1
  104. package/docs/api/interfaces/UnifiedAuthContextType.md +1 -1
  105. package/docs/api/interfaces/UnifiedAuthProviderProps.md +1 -1
  106. package/docs/api/interfaces/UseInactivityTrackerOptions.md +1 -1
  107. package/docs/api/interfaces/UseInactivityTrackerReturn.md +1 -1
  108. package/docs/api/interfaces/UsePublicEventOptions.md +1 -1
  109. package/docs/api/interfaces/UsePublicEventReturn.md +1 -1
  110. package/docs/api/interfaces/UsePublicFileDisplayOptions.md +1 -1
  111. package/docs/api/interfaces/UsePublicFileDisplayReturn.md +1 -1
  112. package/docs/api/interfaces/UsePublicRouteParamsReturn.md +1 -1
  113. package/docs/api/interfaces/UseResolvedScopeOptions.md +1 -1
  114. package/docs/api/interfaces/UseResolvedScopeReturn.md +1 -1
  115. package/docs/api/interfaces/UserEventAccess.md +1 -1
  116. package/docs/api/interfaces/UserMenuProps.md +1 -1
  117. package/docs/api/interfaces/UserProfile.md +1 -1
  118. package/docs/api/modules.md +21 -20
  119. package/docs/documentation-index.md +0 -2
  120. package/docs/rbac/README.md +114 -38
  121. package/docs/rbac/api-reference.md +63 -16
  122. package/docs/rbac/getting-started.md +16 -16
  123. package/docs/rbac/quick-start.md +110 -35
  124. package/docs/rbac/troubleshooting.md +125 -2
  125. package/package.json +1 -1
  126. package/src/components/NavigationMenu/NavigationMenu.test.tsx +38 -4
  127. package/src/components/NavigationMenu/NavigationMenu.tsx +71 -6
  128. package/src/rbac/api.test.ts +2 -2
  129. package/src/rbac/api.ts +2 -1
  130. package/src/rbac/components/PagePermissionGuard.tsx +21 -38
  131. package/src/rbac/components/__tests__/PagePermissionGuard.test.tsx +1 -1
  132. package/src/rbac/config.ts +2 -0
  133. package/src/rbac/engine.ts +15 -5
  134. package/src/rbac/security.ts +1 -1
  135. package/dist/chunk-3TKTL5AZ.js.map +0 -1
  136. package/dist/chunk-F6TSYCKP.js.map +0 -1
  137. package/dist/chunk-P72NKAT5.js.map +0 -1
  138. package/docs/rbac/breaking-changes-v3.md +0 -222
  139. package/docs/rbac/migration-guide.md +0 -260
  140. /package/dist/{DataTable-5HITILXS.js.map → DataTable-D3BK2FCN.js.map} +0 -0
  141. /package/dist/{api-5I3E47G2.js.map → api-PIE4JRFS.js.map} +0 -0
  142. /package/dist/{chunk-S4D3Z723.js.map → chunk-AWK2FAUN.js.map} +0 -0
  143. /package/dist/{chunk-WWNOVFDC.js.map → chunk-HADXAZT3.js.map} +0 -0
  144. /package/dist/{chunk-UW2DE6JX.js.map → chunk-HGZSO43Y.js.map} +0 -0
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / RouteConfig
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / RouteConfig
2
2
 
3
3
  # Interface: RouteConfig
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / SecureDataContextType
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / SecureDataContextType
2
2
 
3
3
  # Interface: SecureDataContextType
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / SecureDataProviderProps
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / SecureDataProviderProps
2
2
 
3
3
  # Interface: SecureDataProviderProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / StorageConfig
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / StorageConfig
2
2
 
3
3
  # Interface: StorageConfig
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / StorageFileInfo
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / StorageFileInfo
2
2
 
3
3
  # Interface: StorageFileInfo
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / StorageFileMetadata
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / StorageFileMetadata
2
2
 
3
3
  # Interface: StorageFileMetadata
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / StorageListOptions
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / StorageListOptions
2
2
 
3
3
  # Interface: StorageListOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / StorageListResult
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / StorageListResult
2
2
 
3
3
  # Interface: StorageListResult
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / StorageUploadOptions
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / StorageUploadOptions
2
2
 
3
3
  # Interface: StorageUploadOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / StorageUploadResult
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / StorageUploadResult
2
2
 
3
3
  # Interface: StorageUploadResult
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / StorageUrlOptions
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / StorageUrlOptions
2
2
 
3
3
  # Interface: StorageUrlOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / StyleImport
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / StyleImport
2
2
 
3
3
  # Interface: StyleImport
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / SwitchProps
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / SwitchProps
2
2
 
3
3
  # Interface: SwitchProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / ToastActionElement
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / ToastActionElement
2
2
 
3
3
  # Interface: ToastActionElement
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / ToastProps
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / ToastProps
2
2
 
3
3
  # Interface: ToastProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / UnifiedAuthContextType
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / UnifiedAuthContextType
2
2
 
3
3
  # Interface: UnifiedAuthContextType
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / UnifiedAuthProviderProps
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / UnifiedAuthProviderProps
2
2
 
3
3
  # Interface: UnifiedAuthProviderProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / UseInactivityTrackerOptions
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / UseInactivityTrackerOptions
2
2
 
3
3
  # Interface: UseInactivityTrackerOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / UseInactivityTrackerReturn
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / UseInactivityTrackerReturn
2
2
 
3
3
  # Interface: UseInactivityTrackerReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / UsePublicEventOptions
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / UsePublicEventOptions
2
2
 
3
3
  # Interface: UsePublicEventOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / UsePublicEventReturn
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / UsePublicEventReturn
2
2
 
3
3
  # Interface: UsePublicEventReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / UsePublicFileDisplayOptions
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / UsePublicFileDisplayOptions
2
2
 
3
3
  # Interface: UsePublicFileDisplayOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / UsePublicFileDisplayReturn
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / UsePublicFileDisplayReturn
2
2
 
3
3
  # Interface: UsePublicFileDisplayReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / UsePublicRouteParamsReturn
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / UsePublicRouteParamsReturn
2
2
 
3
3
  # Interface: UsePublicRouteParamsReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / UseResolvedScopeOptions
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / UseResolvedScopeOptions
2
2
 
3
3
  # Interface: UseResolvedScopeOptions
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / UseResolvedScopeReturn
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / UseResolvedScopeReturn
2
2
 
3
3
  # Interface: UseResolvedScopeReturn
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / UserEventAccess
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / UserEventAccess
2
2
 
3
3
  # Interface: UserEventAccess
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / UserMenuProps
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / UserMenuProps
2
2
 
3
3
  # Interface: UserMenuProps
4
4
 
@@ -1,4 +1,4 @@
1
- [@jmruthers/pace-core - v0.5.109](../README.md) / [Exports](../modules.md) / UserProfile
1
+ [@jmruthers/pace-core - v0.5.110](../README.md) / [Exports](../modules.md) / UserProfile
2
2
 
3
3
  # Interface: UserProfile
4
4
 
@@ -1,6 +1,6 @@
1
- [@jmruthers/pace-core - v0.5.109](README.md) / Exports
1
+ [@jmruthers/pace-core - v0.5.110](README.md) / Exports
2
2
 
3
- # @jmruthers/pace-core - v0.5.109
3
+ # @jmruthers/pace-core - v0.5.110
4
4
 
5
5
  **`File`**
6
6
 
@@ -499,7 +499,7 @@ ___
499
499
 
500
500
  #### Defined in
501
501
 
502
- [packages/core/src/rbac/config.ts:13](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/config.ts#L13)
502
+ [packages/core/src/rbac/config.ts:14](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/config.ts#L14)
503
503
 
504
504
  ___
505
505
 
@@ -5027,7 +5027,7 @@ const accessLevel = await getAccessLevel({
5027
5027
 
5028
5028
  #### Defined in
5029
5029
 
5030
- [packages/core/src/rbac/api.ts:88](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L88)
5030
+ [packages/core/src/rbac/api.ts:89](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L89)
5031
5031
 
5032
5032
  ___
5033
5033
 
@@ -5066,7 +5066,7 @@ const permissions = await getPermissionMap({
5066
5066
 
5067
5067
  #### Defined in
5068
5068
 
5069
- [packages/core/src/rbac/api.ts:114](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L114)
5069
+ [packages/core/src/rbac/api.ts:115](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L115)
5070
5070
 
5071
5071
  ___
5072
5072
 
@@ -5088,7 +5088,7 @@ ___
5088
5088
 
5089
5089
  #### Defined in
5090
5090
 
5091
- [packages/core/src/rbac/api.ts:122](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L122)
5091
+ [packages/core/src/rbac/api.ts:123](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L123)
5092
5092
 
5093
5093
  ___
5094
5094
 
@@ -5110,7 +5110,7 @@ ___
5110
5110
 
5111
5111
  #### Defined in
5112
5112
 
5113
- [packages/core/src/rbac/api.ts:130](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L130)
5113
+ [packages/core/src/rbac/api.ts:131](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L131)
5114
5114
 
5115
5115
  ___
5116
5116
 
@@ -5145,7 +5145,7 @@ const canManage = await isPermitted({
5145
5145
 
5146
5146
  #### Defined in
5147
5147
 
5148
- [packages/core/src/rbac/api.ts:154](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L154)
5148
+ [packages/core/src/rbac/api.ts:155](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L155)
5149
5149
 
5150
5150
  ___
5151
5151
 
@@ -5169,7 +5169,7 @@ Promise resolving to permission result
5169
5169
 
5170
5170
  #### Defined in
5171
5171
 
5172
- [packages/core/src/rbac/api.ts:175](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L175)
5172
+ [packages/core/src/rbac/api.ts:176](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L176)
5173
5173
 
5174
5174
  ___
5175
5175
 
@@ -5193,7 +5193,7 @@ Promise<boolean> - True if user has permission
5193
5193
 
5194
5194
  #### Defined in
5195
5195
 
5196
- [packages/core/src/rbac/api.ts:208](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L208)
5196
+ [packages/core/src/rbac/api.ts:209](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L209)
5197
5197
 
5198
5198
  ___
5199
5199
 
@@ -5221,7 +5221,7 @@ Promise resolving to true if user has any permission
5221
5221
 
5222
5222
  #### Defined in
5223
5223
 
5224
- [packages/core/src/rbac/api.ts:218](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L218)
5224
+ [packages/core/src/rbac/api.ts:219](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L219)
5225
5225
 
5226
5226
  ___
5227
5227
 
@@ -5249,7 +5249,7 @@ Promise resolving to true if user has all permissions
5249
5249
 
5250
5250
  #### Defined in
5251
5251
 
5252
- [packages/core/src/rbac/api.ts:246](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L246)
5252
+ [packages/core/src/rbac/api.ts:247](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/api.ts#L247)
5253
5253
 
5254
5254
  ___
5255
5255
 
@@ -5467,7 +5467,7 @@ React element with permission enforcement
5467
5467
 
5468
5468
  #### Defined in
5469
5469
 
5470
- [packages/core/src/rbac/components/PagePermissionGuard.tsx:550](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/PagePermissionGuard.tsx#L550)
5470
+ [packages/core/src/rbac/components/PagePermissionGuard.tsx:533](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/components/PagePermissionGuard.tsx#L533)
5471
5471
 
5472
5472
  ___
5473
5473
 
@@ -5662,7 +5662,7 @@ ___
5662
5662
 
5663
5663
  #### Defined in
5664
5664
 
5665
- [packages/core/src/rbac/config.ts:110](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/config.ts#L110)
5665
+ [packages/core/src/rbac/config.ts:112](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/config.ts#L112)
5666
5666
 
5667
5667
  ___
5668
5668
 
@@ -5676,7 +5676,7 @@ ___
5676
5676
 
5677
5677
  #### Defined in
5678
5678
 
5679
- [packages/core/src/rbac/config.ts:115](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/config.ts#L115)
5679
+ [packages/core/src/rbac/config.ts:117](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/config.ts#L117)
5680
5680
 
5681
5681
  ___
5682
5682
 
@@ -5690,7 +5690,7 @@ ___
5690
5690
 
5691
5691
  #### Defined in
5692
5692
 
5693
- [packages/core/src/rbac/config.ts:119](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/config.ts#L119)
5693
+ [packages/core/src/rbac/config.ts:121](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/config.ts#L121)
5694
5694
 
5695
5695
  ___
5696
5696
 
@@ -5704,7 +5704,7 @@ ___
5704
5704
 
5705
5705
  #### Defined in
5706
5706
 
5707
- [packages/core/src/rbac/config.ts:123](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/config.ts#L123)
5707
+ [packages/core/src/rbac/config.ts:125](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/config.ts#L125)
5708
5708
 
5709
5709
  ___
5710
5710
 
@@ -5718,13 +5718,13 @@ ___
5718
5718
 
5719
5719
  #### Defined in
5720
5720
 
5721
- [packages/core/src/rbac/config.ts:127](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/config.ts#L127)
5721
+ [packages/core/src/rbac/config.ts:129](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/config.ts#L129)
5722
5722
 
5723
5723
  ___
5724
5724
 
5725
5725
  ### createRBACEngine
5726
5726
 
5727
- ▸ **createRBACEngine**(`supabase`): [`RBACEngine`](classes/RBACEngine.md)
5727
+ ▸ **createRBACEngine**(`supabase`, `securityConfig?`): [`RBACEngine`](classes/RBACEngine.md)
5728
5728
 
5729
5729
  Create an RBAC engine instance
5730
5730
 
@@ -5733,6 +5733,7 @@ Create an RBAC engine instance
5733
5733
  | Name | Type | Description |
5734
5734
  | :------ | :------ | :------ |
5735
5735
  | `supabase` | `default`\<`Database`, ``"public"``, ``"public"``, `never`, {}\> | Supabase client |
5736
+ | `securityConfig?` | `Partial`\<`RBACSecurityConfig`\> | Optional security configuration |
5736
5737
 
5737
5738
  #### Returns
5738
5739
 
@@ -5742,7 +5743,7 @@ RBACEngine instance
5742
5743
 
5743
5744
  #### Defined in
5744
5745
 
5745
- [packages/core/src/rbac/engine.ts:594](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/engine.ts#L594)
5746
+ [packages/core/src/rbac/engine.ts:601](https://github.com/jmruthers/pace-core/blob/main/packages/core/src/rbac/engine.ts#L601)
5746
5747
 
5747
5748
  ___
5748
5749
 
@@ -54,8 +54,6 @@ This index mirrors the folder layout in `packages/core/docs/` so teams can quick
54
54
  - [Advanced patterns](./rbac/advanced-patterns.md)
55
55
  - [Super admin guide](./rbac/super-admin-guide.md)
56
56
  - [RLS integration](./rbac/rbac-rls-integration.md)
57
- - [Migration guide](./rbac/migration-guide.md)
58
- - [Breaking changes v3](./rbac/breaking-changes-v3.md)
59
57
  - [Troubleshooting](./rbac/troubleshooting.md)
60
58
  - [Legacy RLS README](./rbac/README-rbac-rls-integration.md)
61
59
 
@@ -12,10 +12,35 @@ The PACE Core RBAC (Role-Based Access Control) system provides comprehensive per
12
12
 
13
13
  ## 🚨 Critical Rules (Follow These or It Won't Work)
14
14
 
15
- 1. **Never make direct database queries** to `rbac_apps`, `rbac_global_roles`, or other RBAC tables
16
- 2. **Always use `PagePermissionGuard`** for page-level permissions (not manual permission checks)
17
- 3. **Always set up providers correctly** in the exact order shown
18
- 4. **Use the exact app name** from your environment variable (must match database exactly)
15
+ **MANDATORY Setup Steps (in order):**
16
+
17
+ 1. **Call `setupRBAC(supabase)` FIRST** - Must be called before any RBAC components or hooks
18
+ ```typescript
19
+ // In main.tsx or App.tsx
20
+ import { setupRBAC } from '@jmruthers/pace-core/rbac';
21
+ setupRBAC(supabase); // Must be BEFORE rendering App
22
+ ```
23
+
24
+ 2. **Wrap app with providers** in exact order:
25
+ ```tsx
26
+ <UnifiedAuthProvider supabaseClient={supabase} appName={APP_NAME}>
27
+ <OrganisationProvider>
28
+ <YourApp />
29
+ </OrganisationProvider>
30
+ </UnifiedAuthProvider>
31
+ ```
32
+
33
+ 3. **Use `PagePermissionGuard` for ALL pages** - This is the ONLY correct way to protect pages
34
+ ```tsx
35
+ <PagePermissionGuard pageName="dashboard" operation="read">
36
+ <DashboardContent />
37
+ </PagePermissionGuard>
38
+ ```
39
+
40
+ 4. **Database must be configured** - App, pages, and permissions must exist in database
41
+ 5. **User must have organisation role** - Users need roles in `rbac_organisation_roles` table
42
+ 6. **App name must match exactly** - Environment variable must match `rbac_apps.name` (case-sensitive)
43
+ 7. **Never query RBAC tables directly** - Always use `PagePermissionGuard` or RBAC API functions
19
44
 
20
45
  ## 🚀 Quick Start
21
46
 
@@ -179,34 +204,58 @@ function App() {
179
204
  }
180
205
  ```
181
206
 
182
- ### 2. Check Permissions
207
+ ### 2. Protect Pages with PagePermissionGuard
208
+
209
+ **⚠️ CRITICAL: Always use `PagePermissionGuard` for page-level access. This is the ONLY way to ensure permissions are checked correctly.**
183
210
 
184
211
  ```tsx
185
212
  import { PagePermissionGuard } from '@jmruthers/pace-core/rbac';
186
213
 
187
- function UserActions() {
214
+ function UsersPage() {
188
215
  return (
189
- <div>
190
- <PagePermissionGuard
191
- pageName="users"
192
- operation="update"
193
- fallback={null}
194
- >
195
- <EditButton />
196
- </PagePermissionGuard>
197
-
198
- <PagePermissionGuard
199
- pageName="users"
200
- operation="delete"
201
- fallback={null}
202
- >
203
- <DeleteButton />
204
- </PagePermissionGuard>
205
- </div>
216
+ <PagePermissionGuard
217
+ pageName="users"
218
+ operation="read"
219
+ fallback={<div>You don't have permission to view this page</div>}
220
+ >
221
+ <div>
222
+ <h1>User Management</h1>
223
+
224
+ {/* Multiple operations on same page */}
225
+ <PagePermissionGuard
226
+ pageName="users"
227
+ operation="create"
228
+ fallback={null}
229
+ >
230
+ <AddUserButton />
231
+ </PagePermissionGuard>
232
+
233
+ <PagePermissionGuard
234
+ pageName="users"
235
+ operation="update"
236
+ fallback={null}
237
+ >
238
+ <EditUserButtons />
239
+ </PagePermissionGuard>
240
+
241
+ <PagePermissionGuard
242
+ pageName="users"
243
+ operation="delete"
244
+ fallback={null}
245
+ >
246
+ <DeleteUserButtons />
247
+ </PagePermissionGuard>
248
+ </div>
249
+ </PagePermissionGuard>
206
250
  );
207
251
  }
208
252
  ```
209
253
 
254
+ **Important**:
255
+ - `pageName` must match the `page_name` in `rbac_app_pages` table
256
+ - `operation` can be: `read`, `create`, `update`, or `delete`
257
+ - Permission checked in database is: `{operation}:page.{pageName}` (e.g., `read:page.users`)
258
+
210
259
  ### 3. Protect Components
211
260
 
212
261
  ```tsx
@@ -230,24 +279,51 @@ function AdminPanel() {
230
279
  The RBAC system uses **page-level permissions** with the format: `{operation}:page.{pageName}`
231
280
 
232
281
  ### Operations
233
- - `read` - View page content
282
+ - `read` - View page content (required for `PagePermissionGuard` with `operation="read"`)
234
283
  - `create` - Create new content on page
235
284
  - `update` - Modify existing content on page
236
285
  - `delete` - Remove content from page
237
- - `manage` - Full page management
238
-
239
- ### Page-Level Examples
240
- - `read:page.dashboard` - View dashboard page
241
- - `create:page.users` - Create users on users page
242
- - `update:page.settings` - Modify settings page
243
- - `delete:page.admin` - Remove content from admin page
244
- - `manage:page.system` - Full system page management
245
-
246
- ### Event-App Permissions
247
- - `read:events` - View event information
248
- - `create:events` - Create new events
249
- - `update:events` - Modify existing events
250
- - `delete:events` - Remove events
286
+
287
+ ### Page-Level Permission Format
288
+
289
+ When you use `PagePermissionGuard` with:
290
+ ```tsx
291
+ <PagePermissionGuard pageName="dashboard" operation="read">
292
+ ```
293
+
294
+ The system checks for permission: `read:page.dashboard` in the database.
295
+
296
+ ### Database Structure
297
+
298
+ Permissions are stored in `rbac_page_permissions` table with:
299
+ - `app_page_id` - Links to `rbac_app_pages` table
300
+ - `operation` - One of: `read`, `create`, `update`, `delete`
301
+ - `role_name` - User's role (e.g., `org_admin`, `leader`, `member`)
302
+ - `allowed` - Boolean (`true` if user has permission, `false` otherwise)
303
+ - `organisation_id` - Organisation context (must match user's organisation)
304
+
305
+ ### Examples
306
+
307
+ If you have a page named `"users"` and check `operation="read"`:
308
+ - System checks: `read:page.users` permission
309
+ - Database query looks in `rbac_page_permissions` for matching `operation='read'` and `page_name='users'`
310
+ - Permission is granted if user's role has `allowed=true` for that page, operation, and organisation
311
+
312
+ ### Complete Example
313
+
314
+ ```sql
315
+ -- Database setup for a "users" page with read permission for org_admin role
316
+ INSERT INTO rbac_page_permissions (app_page_id, operation, role_name, allowed, organisation_id)
317
+ VALUES (
318
+ (SELECT id FROM rbac_app_pages WHERE page_name = 'users'),
319
+ 'read',
320
+ 'org_admin',
321
+ true,
322
+ 'your-organisation-id'::uuid
323
+ );
324
+ ```
325
+
326
+ This allows users with `org_admin` role to access `<PagePermissionGuard pageName="users" operation="read">`.
251
327
 
252
328
  ## 🔒 Security Features
253
329