@decaf-ts/integrations 0.11.0 → 0.12.0

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 (496) hide show
  1. package/README.md +164 -0
  2. package/dist/integrations.cjs +1 -1
  3. package/dist/integrations.cjs.map +1 -1
  4. package/dist/integrations.js +1 -1
  5. package/dist/integrations.js.map +1 -1
  6. package/docker/mailpit-compose.yml +17 -0
  7. package/docker/postgres-compose.yml +26 -0
  8. package/lib/cjs/blob/azure/AzureBlobStoreService.cjs +12 -23
  9. package/lib/cjs/blob/azure/AzureBlobStoreService.cjs.map +1 -1
  10. package/lib/cjs/blob/core/BlobStoreService.cjs +26 -25
  11. package/lib/cjs/blob/core/BlobStoreService.cjs.map +1 -1
  12. package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs +12 -23
  13. package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs.map +1 -1
  14. package/lib/cjs/blob/s3/S3BlobStoreService.cjs +11 -16
  15. package/lib/cjs/blob/s3/S3BlobStoreService.cjs.map +1 -1
  16. package/lib/cjs/blob/s3/S3CompatibleBlobStoreService.cjs +14 -16
  17. package/lib/cjs/blob/s3/S3CompatibleBlobStoreService.cjs.map +1 -1
  18. package/lib/cjs/comms/email/EmailService.cjs +376 -0
  19. package/lib/cjs/comms/email/EmailService.cjs.map +1 -0
  20. package/lib/cjs/comms/email/index.cjs +29 -0
  21. package/lib/cjs/comms/email/index.cjs.map +1 -0
  22. package/lib/cjs/comms/email/mime.cjs +225 -0
  23. package/lib/cjs/comms/email/mime.cjs.map +1 -0
  24. package/lib/cjs/comms/email/smtp.cjs +204 -0
  25. package/lib/cjs/comms/email/smtp.cjs.map +1 -0
  26. package/lib/cjs/comms/environment.cjs +63 -0
  27. package/lib/cjs/comms/environment.cjs.map +1 -0
  28. package/lib/cjs/comms/gmail/GmailService.cjs +235 -0
  29. package/lib/cjs/comms/gmail/GmailService.cjs.map +1 -0
  30. package/lib/cjs/comms/gmail/index.cjs +24 -0
  31. package/lib/cjs/comms/gmail/index.cjs.map +1 -0
  32. package/lib/cjs/comms/index.cjs +31 -0
  33. package/lib/cjs/comms/index.cjs.map +1 -0
  34. package/lib/cjs/comms/slack/SlackService.cjs +264 -0
  35. package/lib/cjs/comms/slack/SlackService.cjs.map +1 -0
  36. package/lib/cjs/comms/slack/index.cjs +24 -0
  37. package/lib/cjs/comms/slack/index.cjs.map +1 -0
  38. package/lib/cjs/comms/teams/TeamsService.cjs +212 -0
  39. package/lib/cjs/comms/teams/TeamsService.cjs.map +1 -0
  40. package/lib/cjs/comms/teams/index.cjs +24 -0
  41. package/lib/cjs/comms/teams/index.cjs.map +1 -0
  42. package/lib/cjs/comms/telegram/TelegramService.cjs +196 -0
  43. package/lib/cjs/comms/telegram/TelegramService.cjs.map +1 -0
  44. package/lib/cjs/comms/telegram/index.cjs +24 -0
  45. package/lib/cjs/comms/telegram/index.cjs.map +1 -0
  46. package/lib/cjs/devops/environment.cjs +43 -0
  47. package/lib/cjs/devops/environment.cjs.map +1 -0
  48. package/lib/cjs/devops/github/GithubService.cjs +302 -0
  49. package/lib/cjs/devops/github/GithubService.cjs.map +1 -0
  50. package/lib/cjs/devops/github/index.cjs +24 -0
  51. package/lib/cjs/devops/github/index.cjs.map +1 -0
  52. package/lib/cjs/devops/gitlab/GitlabService.cjs +282 -0
  53. package/lib/cjs/devops/gitlab/GitlabService.cjs.map +1 -0
  54. package/lib/cjs/devops/gitlab/index.cjs +24 -0
  55. package/lib/cjs/devops/gitlab/index.cjs.map +1 -0
  56. package/lib/cjs/devops/index.cjs +28 -0
  57. package/lib/cjs/devops/index.cjs.map +1 -0
  58. package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs +2 -0
  59. package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs.map +1 -1
  60. package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs +2 -0
  61. package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs.map +1 -1
  62. package/lib/cjs/index.cjs +3 -3
  63. package/lib/cjs/io/airtable/AirtableService.cjs +266 -0
  64. package/lib/cjs/io/airtable/AirtableService.cjs.map +1 -0
  65. package/lib/cjs/io/airtable/index.cjs +24 -0
  66. package/lib/cjs/io/airtable/index.cjs.map +1 -0
  67. package/lib/cjs/io/environment.cjs +46 -0
  68. package/lib/cjs/io/environment.cjs.map +1 -0
  69. package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs +288 -0
  70. package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs.map +1 -0
  71. package/lib/cjs/io/google-sheets/index.cjs +24 -0
  72. package/lib/cjs/io/google-sheets/index.cjs.map +1 -0
  73. package/lib/cjs/io/graphql/GraphqlService.cjs +143 -0
  74. package/lib/cjs/io/graphql/GraphqlService.cjs.map +1 -0
  75. package/lib/cjs/io/graphql/index.cjs +24 -0
  76. package/lib/cjs/io/graphql/index.cjs.map +1 -0
  77. package/lib/cjs/io/index.cjs +30 -0
  78. package/lib/cjs/io/index.cjs.map +1 -0
  79. package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs +205 -0
  80. package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs.map +1 -0
  81. package/lib/cjs/io/spreadsheet/index.cjs +25 -0
  82. package/lib/cjs/io/spreadsheet/index.cjs.map +1 -0
  83. package/lib/cjs/namespaces/index.cjs +1 -0
  84. package/lib/cjs/namespaces/index.cjs.map +1 -1
  85. package/lib/cjs/namespaces/models/credential.model.cjs +115 -0
  86. package/lib/cjs/namespaces/models/credential.model.cjs.map +1 -0
  87. package/lib/cjs/namespaces/models/effective-permission.model.cjs +2 -0
  88. package/lib/cjs/namespaces/models/effective-permission.model.cjs.map +1 -1
  89. package/lib/cjs/namespaces/models/group-membership.model.cjs +2 -0
  90. package/lib/cjs/namespaces/models/group-membership.model.cjs.map +1 -1
  91. package/lib/cjs/namespaces/models/group.model.cjs +2 -0
  92. package/lib/cjs/namespaces/models/group.model.cjs.map +1 -1
  93. package/lib/cjs/namespaces/models/index.cjs +1 -0
  94. package/lib/cjs/namespaces/models/index.cjs.map +1 -1
  95. package/lib/cjs/namespaces/models/inheritance-block.model.cjs +2 -0
  96. package/lib/cjs/namespaces/models/inheritance-block.model.cjs.map +1 -1
  97. package/lib/cjs/namespaces/models/org-unit-closure.model.cjs +2 -0
  98. package/lib/cjs/namespaces/models/org-unit-closure.model.cjs.map +1 -1
  99. package/lib/cjs/namespaces/models/org-unit-membership.model.cjs +2 -0
  100. package/lib/cjs/namespaces/models/org-unit-membership.model.cjs.map +1 -1
  101. package/lib/cjs/namespaces/models/org-unit-profile.model.cjs +2 -0
  102. package/lib/cjs/namespaces/models/org-unit-profile.model.cjs.map +1 -1
  103. package/lib/cjs/namespaces/models/org-unit.model.cjs +2 -0
  104. package/lib/cjs/namespaces/models/org-unit.model.cjs.map +1 -1
  105. package/lib/cjs/namespaces/models/permission.model.cjs +2 -0
  106. package/lib/cjs/namespaces/models/permission.model.cjs.map +1 -1
  107. package/lib/cjs/namespaces/models/principal.model.cjs +2 -0
  108. package/lib/cjs/namespaces/models/principal.model.cjs.map +1 -1
  109. package/lib/cjs/namespaces/models/protected-resource.model.cjs +2 -0
  110. package/lib/cjs/namespaces/models/protected-resource.model.cjs.map +1 -1
  111. package/lib/cjs/namespaces/models/resource-grant.model.cjs +2 -0
  112. package/lib/cjs/namespaces/models/resource-grant.model.cjs.map +1 -1
  113. package/lib/cjs/namespaces/models/role-assignment.model.cjs +2 -0
  114. package/lib/cjs/namespaces/models/role-assignment.model.cjs.map +1 -1
  115. package/lib/cjs/namespaces/models/role-permission.model.cjs +2 -0
  116. package/lib/cjs/namespaces/models/role-permission.model.cjs.map +1 -1
  117. package/lib/cjs/namespaces/models/role.model.cjs +2 -0
  118. package/lib/cjs/namespaces/models/role.model.cjs.map +1 -1
  119. package/lib/cjs/namespaces/models/storage-binding.model.cjs +2 -0
  120. package/lib/cjs/namespaces/models/storage-binding.model.cjs.map +1 -1
  121. package/lib/cjs/namespaces/models/tenant-membership.model.cjs +2 -0
  122. package/lib/cjs/namespaces/models/tenant-membership.model.cjs.map +1 -1
  123. package/lib/cjs/namespaces/models/tenant-profile.model.cjs +2 -0
  124. package/lib/cjs/namespaces/models/tenant-profile.model.cjs.map +1 -1
  125. package/lib/cjs/namespaces/models/tenant.model.cjs +2 -0
  126. package/lib/cjs/namespaces/models/tenant.model.cjs.map +1 -1
  127. package/lib/cjs/namespaces/models/user.model.cjs +2 -0
  128. package/lib/cjs/namespaces/models/user.model.cjs.map +1 -1
  129. package/lib/cjs/namespaces/rls/index.cjs +28 -0
  130. package/lib/cjs/namespaces/rls/index.cjs.map +1 -0
  131. package/lib/cjs/namespaces/rls/principal-resolver.cjs +66 -0
  132. package/lib/cjs/namespaces/rls/principal-resolver.cjs.map +1 -0
  133. package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs +269 -0
  134. package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs.map +1 -0
  135. package/lib/cjs/namespaces/rls/rls.constants.cjs +79 -0
  136. package/lib/cjs/namespaces/rls/rls.constants.cjs.map +1 -0
  137. package/lib/cjs/namespaces/rls/rls.template.cjs +719 -0
  138. package/lib/cjs/namespaces/rls/rls.template.cjs.map +1 -0
  139. package/lib/cjs/namespaces/rls/rls.types.cjs +4 -0
  140. package/lib/cjs/namespaces/rls/rls.types.cjs.map +1 -0
  141. package/lib/cjs/namespaces/rls/session-binding.cjs +70 -0
  142. package/lib/cjs/namespaces/rls/session-binding.cjs.map +1 -0
  143. package/lib/cjs/namespaces/services/credential.service.cjs +327 -0
  144. package/lib/cjs/namespaces/services/credential.service.cjs.map +1 -0
  145. package/lib/cjs/namespaces/services/index.cjs +1 -0
  146. package/lib/cjs/namespaces/services/index.cjs.map +1 -1
  147. package/lib/cjs/namespaces/types.cjs +6 -1
  148. package/lib/cjs/namespaces/types.cjs.map +1 -1
  149. package/lib/cjs/redis/adapter.cjs +7 -1
  150. package/lib/cjs/redis/adapter.cjs.map +1 -1
  151. package/lib/cjs/secrets/InfraCredentialBootstrap.cjs +80 -0
  152. package/lib/cjs/secrets/InfraCredentialBootstrap.cjs.map +1 -0
  153. package/lib/cjs/secrets/aws/AwsSecretService.cjs +2 -15
  154. package/lib/cjs/secrets/aws/AwsSecretService.cjs.map +1 -1
  155. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs +2 -16
  156. package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs.map +1 -1
  157. package/lib/cjs/secrets/core/SecretReference.cjs +1 -0
  158. package/lib/cjs/secrets/core/SecretReference.cjs.map +1 -1
  159. package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs +28 -0
  160. package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs.map +1 -0
  161. package/lib/cjs/secrets/fs/FsSecretService.cjs +420 -0
  162. package/lib/cjs/secrets/fs/FsSecretService.cjs.map +1 -0
  163. package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs +25 -0
  164. package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs.map +1 -0
  165. package/lib/cjs/secrets/fs/index.cjs +27 -0
  166. package/lib/cjs/secrets/fs/index.cjs.map +1 -0
  167. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs +2 -16
  168. package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs.map +1 -1
  169. package/lib/cjs/secrets/index.cjs +2 -0
  170. package/lib/cjs/secrets/index.cjs.map +1 -1
  171. package/lib/cjs/secrets/model/ModelSecretService.cjs +335 -43
  172. package/lib/cjs/secrets/model/ModelSecretService.cjs.map +1 -1
  173. package/lib/cjs/secrets/model/Secret.cjs +83 -5
  174. package/lib/cjs/secrets/model/Secret.cjs.map +1 -1
  175. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs +2 -16
  176. package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs.map +1 -1
  177. package/lib/cjs/secrets/vault/VaultSecretService.cjs +2 -16
  178. package/lib/cjs/secrets/vault/VaultSecretService.cjs.map +1 -1
  179. package/lib/cjs/shared/environmentValue.cjs +24 -0
  180. package/lib/cjs/shared/environmentValue.cjs.map +1 -1
  181. package/lib/cjs/shared/http/HttpApiService.cjs +190 -0
  182. package/lib/cjs/shared/http/HttpApiService.cjs.map +1 -0
  183. package/lib/cjs/shared/http/hermeticBoot.cjs +150 -0
  184. package/lib/cjs/shared/http/hermeticBoot.cjs.map +1 -0
  185. package/lib/cjs/shared/http/index.cjs +28 -0
  186. package/lib/cjs/shared/http/index.cjs.map +1 -0
  187. package/lib/esm/blob/azure/AzureBlobStoreService.js +13 -21
  188. package/lib/esm/blob/azure/AzureBlobStoreService.js.map +1 -1
  189. package/lib/esm/blob/core/BlobStoreService.js +26 -25
  190. package/lib/esm/blob/core/BlobStoreService.js.map +1 -1
  191. package/lib/esm/blob/gcp/GcsBlobStoreService.js +13 -21
  192. package/lib/esm/blob/gcp/GcsBlobStoreService.js.map +1 -1
  193. package/lib/esm/blob/s3/S3BlobStoreService.js +12 -14
  194. package/lib/esm/blob/s3/S3BlobStoreService.js.map +1 -1
  195. package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js +14 -16
  196. package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js.map +1 -1
  197. package/lib/esm/comms/email/EmailService.js +338 -0
  198. package/lib/esm/comms/email/EmailService.js.map +1 -0
  199. package/lib/esm/comms/email/index.js +12 -0
  200. package/lib/esm/comms/email/index.js.map +1 -0
  201. package/lib/esm/comms/email/mime.js +218 -0
  202. package/lib/esm/comms/email/mime.js.map +1 -0
  203. package/lib/esm/comms/email/smtp.js +166 -0
  204. package/lib/esm/comms/email/smtp.js.map +1 -0
  205. package/lib/esm/comms/environment.js +59 -0
  206. package/lib/esm/comms/environment.js.map +1 -0
  207. package/lib/esm/comms/gmail/GmailService.js +230 -0
  208. package/lib/esm/comms/gmail/GmailService.js.map +1 -0
  209. package/lib/esm/comms/gmail/index.js +7 -0
  210. package/lib/esm/comms/gmail/index.js.map +1 -0
  211. package/lib/esm/comms/index.js +14 -0
  212. package/lib/esm/comms/index.js.map +1 -0
  213. package/lib/esm/comms/slack/SlackService.js +259 -0
  214. package/lib/esm/comms/slack/SlackService.js.map +1 -0
  215. package/lib/esm/comms/slack/index.js +7 -0
  216. package/lib/esm/comms/slack/index.js.map +1 -0
  217. package/lib/esm/comms/teams/TeamsService.js +204 -0
  218. package/lib/esm/comms/teams/TeamsService.js.map +1 -0
  219. package/lib/esm/comms/teams/index.js +7 -0
  220. package/lib/esm/comms/teams/index.js.map +1 -0
  221. package/lib/esm/comms/telegram/TelegramService.js +191 -0
  222. package/lib/esm/comms/telegram/TelegramService.js.map +1 -0
  223. package/lib/esm/comms/telegram/index.js +7 -0
  224. package/lib/esm/comms/telegram/index.js.map +1 -0
  225. package/lib/esm/devops/environment.js +39 -0
  226. package/lib/esm/devops/environment.js.map +1 -0
  227. package/lib/esm/devops/github/GithubService.js +297 -0
  228. package/lib/esm/devops/github/GithubService.js.map +1 -0
  229. package/lib/esm/devops/github/index.js +7 -0
  230. package/lib/esm/devops/github/index.js.map +1 -0
  231. package/lib/esm/devops/gitlab/GitlabService.js +277 -0
  232. package/lib/esm/devops/gitlab/GitlabService.js.map +1 -0
  233. package/lib/esm/devops/gitlab/index.js +7 -0
  234. package/lib/esm/devops/gitlab/index.js.map +1 -0
  235. package/lib/esm/devops/index.js +11 -0
  236. package/lib/esm/devops/index.js.map +1 -0
  237. package/lib/esm/feature-flags/models/FeatureFlag.model.js +2 -0
  238. package/lib/esm/feature-flags/models/FeatureFlag.model.js.map +1 -1
  239. package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js +2 -0
  240. package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js.map +1 -1
  241. package/lib/esm/index.js +3 -3
  242. package/lib/esm/io/airtable/AirtableService.js +261 -0
  243. package/lib/esm/io/airtable/AirtableService.js.map +1 -0
  244. package/lib/esm/io/airtable/index.js +7 -0
  245. package/lib/esm/io/airtable/index.js.map +1 -0
  246. package/lib/esm/io/environment.js +42 -0
  247. package/lib/esm/io/environment.js.map +1 -0
  248. package/lib/esm/io/google-sheets/GoogleSheetsService.js +283 -0
  249. package/lib/esm/io/google-sheets/GoogleSheetsService.js.map +1 -0
  250. package/lib/esm/io/google-sheets/index.js +7 -0
  251. package/lib/esm/io/google-sheets/index.js.map +1 -0
  252. package/lib/esm/io/graphql/GraphqlService.js +138 -0
  253. package/lib/esm/io/graphql/GraphqlService.js.map +1 -0
  254. package/lib/esm/io/graphql/index.js +7 -0
  255. package/lib/esm/io/graphql/index.js.map +1 -0
  256. package/lib/esm/io/index.js +13 -0
  257. package/lib/esm/io/index.js.map +1 -0
  258. package/lib/esm/io/spreadsheet/SpreadsheetService.js +200 -0
  259. package/lib/esm/io/spreadsheet/SpreadsheetService.js.map +1 -0
  260. package/lib/esm/io/spreadsheet/index.js +8 -0
  261. package/lib/esm/io/spreadsheet/index.js.map +1 -0
  262. package/lib/esm/namespaces/index.js +1 -0
  263. package/lib/esm/namespaces/index.js.map +1 -1
  264. package/lib/esm/namespaces/models/credential.model.js +106 -0
  265. package/lib/esm/namespaces/models/credential.model.js.map +1 -0
  266. package/lib/esm/namespaces/models/effective-permission.model.js +2 -0
  267. package/lib/esm/namespaces/models/effective-permission.model.js.map +1 -1
  268. package/lib/esm/namespaces/models/group-membership.model.js +2 -0
  269. package/lib/esm/namespaces/models/group-membership.model.js.map +1 -1
  270. package/lib/esm/namespaces/models/group.model.js +2 -0
  271. package/lib/esm/namespaces/models/group.model.js.map +1 -1
  272. package/lib/esm/namespaces/models/index.js +1 -0
  273. package/lib/esm/namespaces/models/index.js.map +1 -1
  274. package/lib/esm/namespaces/models/inheritance-block.model.js +2 -0
  275. package/lib/esm/namespaces/models/inheritance-block.model.js.map +1 -1
  276. package/lib/esm/namespaces/models/org-unit-closure.model.js +2 -0
  277. package/lib/esm/namespaces/models/org-unit-closure.model.js.map +1 -1
  278. package/lib/esm/namespaces/models/org-unit-membership.model.js +2 -0
  279. package/lib/esm/namespaces/models/org-unit-membership.model.js.map +1 -1
  280. package/lib/esm/namespaces/models/org-unit-profile.model.js +2 -0
  281. package/lib/esm/namespaces/models/org-unit-profile.model.js.map +1 -1
  282. package/lib/esm/namespaces/models/org-unit.model.js +2 -0
  283. package/lib/esm/namespaces/models/org-unit.model.js.map +1 -1
  284. package/lib/esm/namespaces/models/permission.model.js +2 -0
  285. package/lib/esm/namespaces/models/permission.model.js.map +1 -1
  286. package/lib/esm/namespaces/models/principal.model.js +2 -0
  287. package/lib/esm/namespaces/models/principal.model.js.map +1 -1
  288. package/lib/esm/namespaces/models/protected-resource.model.js +2 -0
  289. package/lib/esm/namespaces/models/protected-resource.model.js.map +1 -1
  290. package/lib/esm/namespaces/models/resource-grant.model.js +2 -0
  291. package/lib/esm/namespaces/models/resource-grant.model.js.map +1 -1
  292. package/lib/esm/namespaces/models/role-assignment.model.js +2 -0
  293. package/lib/esm/namespaces/models/role-assignment.model.js.map +1 -1
  294. package/lib/esm/namespaces/models/role-permission.model.js +2 -0
  295. package/lib/esm/namespaces/models/role-permission.model.js.map +1 -1
  296. package/lib/esm/namespaces/models/role.model.js +2 -0
  297. package/lib/esm/namespaces/models/role.model.js.map +1 -1
  298. package/lib/esm/namespaces/models/storage-binding.model.js +2 -0
  299. package/lib/esm/namespaces/models/storage-binding.model.js.map +1 -1
  300. package/lib/esm/namespaces/models/tenant-membership.model.js +2 -0
  301. package/lib/esm/namespaces/models/tenant-membership.model.js.map +1 -1
  302. package/lib/esm/namespaces/models/tenant-profile.model.js +2 -0
  303. package/lib/esm/namespaces/models/tenant-profile.model.js.map +1 -1
  304. package/lib/esm/namespaces/models/tenant.model.js +2 -0
  305. package/lib/esm/namespaces/models/tenant.model.js.map +1 -1
  306. package/lib/esm/namespaces/models/user.model.js +2 -0
  307. package/lib/esm/namespaces/models/user.model.js.map +1 -1
  308. package/lib/esm/namespaces/rls/index.js +11 -0
  309. package/lib/esm/namespaces/rls/index.js.map +1 -0
  310. package/lib/esm/namespaces/rls/principal-resolver.js +61 -0
  311. package/lib/esm/namespaces/rls/principal-resolver.js.map +1 -0
  312. package/lib/esm/namespaces/rls/rls-bootstrap.service.js +261 -0
  313. package/lib/esm/namespaces/rls/rls-bootstrap.service.js.map +1 -0
  314. package/lib/esm/namespaces/rls/rls.constants.js +75 -0
  315. package/lib/esm/namespaces/rls/rls.constants.js.map +1 -0
  316. package/lib/esm/namespaces/rls/rls.template.js +711 -0
  317. package/lib/esm/namespaces/rls/rls.template.js.map +1 -0
  318. package/lib/esm/namespaces/rls/rls.types.js +9 -0
  319. package/lib/esm/namespaces/rls/rls.types.js.map +1 -0
  320. package/lib/esm/namespaces/rls/session-binding.js +65 -0
  321. package/lib/esm/namespaces/rls/session-binding.js.map +1 -0
  322. package/lib/esm/namespaces/services/credential.service.js +322 -0
  323. package/lib/esm/namespaces/services/credential.service.js.map +1 -0
  324. package/lib/esm/namespaces/services/index.js +1 -0
  325. package/lib/esm/namespaces/services/index.js.map +1 -1
  326. package/lib/esm/namespaces/types.js +6 -0
  327. package/lib/esm/namespaces/types.js.map +1 -1
  328. package/lib/esm/redis/adapter.js +7 -1
  329. package/lib/esm/redis/adapter.js.map +1 -1
  330. package/lib/esm/secrets/InfraCredentialBootstrap.js +74 -0
  331. package/lib/esm/secrets/InfraCredentialBootstrap.js.map +1 -0
  332. package/lib/esm/secrets/aws/AwsSecretService.js +3 -13
  333. package/lib/esm/secrets/aws/AwsSecretService.js.map +1 -1
  334. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js +2 -13
  335. package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js.map +1 -1
  336. package/lib/esm/secrets/core/SecretReference.js +1 -0
  337. package/lib/esm/secrets/core/SecretReference.js.map +1 -1
  338. package/lib/esm/secrets/fs/FsSecretEnvironment.js +24 -0
  339. package/lib/esm/secrets/fs/FsSecretEnvironment.js.map +1 -0
  340. package/lib/esm/secrets/fs/FsSecretService.js +412 -0
  341. package/lib/esm/secrets/fs/FsSecretService.js.map +1 -0
  342. package/lib/esm/secrets/fs/FsSecretServiceConfig.js +21 -0
  343. package/lib/esm/secrets/fs/FsSecretServiceConfig.js.map +1 -0
  344. package/lib/esm/secrets/fs/index.js +10 -0
  345. package/lib/esm/secrets/fs/index.js.map +1 -0
  346. package/lib/esm/secrets/gcp/GcpSecretManagerService.js +2 -13
  347. package/lib/esm/secrets/gcp/GcpSecretManagerService.js.map +1 -1
  348. package/lib/esm/secrets/index.js +2 -0
  349. package/lib/esm/secrets/index.js.map +1 -1
  350. package/lib/esm/secrets/model/ModelSecretService.js +337 -42
  351. package/lib/esm/secrets/model/ModelSecretService.js.map +1 -1
  352. package/lib/esm/secrets/model/Secret.js +86 -7
  353. package/lib/esm/secrets/model/Secret.js.map +1 -1
  354. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js +2 -13
  355. package/lib/esm/secrets/onepassword/OnePasswordSecretService.js.map +1 -1
  356. package/lib/esm/secrets/vault/VaultSecretService.js +2 -13
  357. package/lib/esm/secrets/vault/VaultSecretService.js.map +1 -1
  358. package/lib/esm/shared/environmentValue.js +24 -0
  359. package/lib/esm/shared/environmentValue.js.map +1 -1
  360. package/lib/esm/shared/http/HttpApiService.js +181 -0
  361. package/lib/esm/shared/http/HttpApiService.js.map +1 -0
  362. package/lib/esm/shared/http/hermeticBoot.js +146 -0
  363. package/lib/esm/shared/http/hermeticBoot.js.map +1 -0
  364. package/lib/esm/shared/http/index.js +11 -0
  365. package/lib/esm/shared/http/index.js.map +1 -0
  366. package/lib/types/blob/azure/AzureBlobStoreService.d.cts +7 -7
  367. package/lib/types/blob/azure/AzureBlobStoreService.d.mts +7 -7
  368. package/lib/types/blob/core/BlobStoreService.d.cts +28 -27
  369. package/lib/types/blob/core/BlobStoreService.d.mts +28 -27
  370. package/lib/types/blob/gcp/GcsBlobStoreService.d.cts +7 -7
  371. package/lib/types/blob/gcp/GcsBlobStoreService.d.mts +7 -7
  372. package/lib/types/blob/s3/S3BlobStoreService.d.cts +9 -1
  373. package/lib/types/blob/s3/S3BlobStoreService.d.mts +9 -1
  374. package/lib/types/blob/s3/S3CompatibleBlobStoreService.d.cts +11 -15
  375. package/lib/types/blob/s3/S3CompatibleBlobStoreService.d.mts +11 -15
  376. package/lib/types/comms/email/EmailService.d.cts +184 -0
  377. package/lib/types/comms/email/EmailService.d.mts +184 -0
  378. package/lib/types/comms/email/index.d.cts +11 -0
  379. package/lib/types/comms/email/index.d.mts +11 -0
  380. package/lib/types/comms/email/mime.d.cts +84 -0
  381. package/lib/types/comms/email/mime.d.mts +84 -0
  382. package/lib/types/comms/email/smtp.d.cts +107 -0
  383. package/lib/types/comms/email/smtp.d.mts +107 -0
  384. package/lib/types/comms/environment.d.cts +84 -0
  385. package/lib/types/comms/environment.d.mts +84 -0
  386. package/lib/types/comms/gmail/GmailService.d.cts +190 -0
  387. package/lib/types/comms/gmail/GmailService.d.mts +190 -0
  388. package/lib/types/comms/gmail/index.d.cts +6 -0
  389. package/lib/types/comms/gmail/index.d.mts +6 -0
  390. package/lib/types/comms/index.d.cts +13 -0
  391. package/lib/types/comms/index.d.mts +13 -0
  392. package/lib/types/comms/slack/SlackService.d.cts +259 -0
  393. package/lib/types/comms/slack/SlackService.d.mts +259 -0
  394. package/lib/types/comms/slack/index.d.cts +6 -0
  395. package/lib/types/comms/slack/index.d.mts +6 -0
  396. package/lib/types/comms/teams/TeamsService.d.cts +172 -0
  397. package/lib/types/comms/teams/TeamsService.d.mts +172 -0
  398. package/lib/types/comms/teams/index.d.cts +6 -0
  399. package/lib/types/comms/teams/index.d.mts +6 -0
  400. package/lib/types/comms/telegram/TelegramService.d.cts +202 -0
  401. package/lib/types/comms/telegram/TelegramService.d.mts +202 -0
  402. package/lib/types/comms/telegram/index.d.cts +6 -0
  403. package/lib/types/comms/telegram/index.d.mts +6 -0
  404. package/lib/types/devops/environment.d.cts +62 -0
  405. package/lib/types/devops/environment.d.mts +62 -0
  406. package/lib/types/devops/github/GithubService.d.cts +287 -0
  407. package/lib/types/devops/github/GithubService.d.mts +287 -0
  408. package/lib/types/devops/github/index.d.cts +6 -0
  409. package/lib/types/devops/github/index.d.mts +6 -0
  410. package/lib/types/devops/gitlab/GitlabService.d.cts +277 -0
  411. package/lib/types/devops/gitlab/GitlabService.d.mts +277 -0
  412. package/lib/types/devops/gitlab/index.d.cts +6 -0
  413. package/lib/types/devops/gitlab/index.d.mts +6 -0
  414. package/lib/types/devops/index.d.cts +10 -0
  415. package/lib/types/devops/index.d.mts +10 -0
  416. package/lib/types/index.d.cts +2 -2
  417. package/lib/types/index.d.mts +2 -2
  418. package/lib/types/io/airtable/AirtableService.d.cts +268 -0
  419. package/lib/types/io/airtable/AirtableService.d.mts +268 -0
  420. package/lib/types/io/airtable/index.d.cts +6 -0
  421. package/lib/types/io/airtable/index.d.mts +6 -0
  422. package/lib/types/io/environment.d.cts +67 -0
  423. package/lib/types/io/environment.d.mts +67 -0
  424. package/lib/types/io/google-sheets/GoogleSheetsService.d.cts +204 -0
  425. package/lib/types/io/google-sheets/GoogleSheetsService.d.mts +204 -0
  426. package/lib/types/io/google-sheets/index.d.cts +6 -0
  427. package/lib/types/io/google-sheets/index.d.mts +6 -0
  428. package/lib/types/io/graphql/GraphqlService.d.cts +173 -0
  429. package/lib/types/io/graphql/GraphqlService.d.mts +173 -0
  430. package/lib/types/io/graphql/index.d.cts +6 -0
  431. package/lib/types/io/graphql/index.d.mts +6 -0
  432. package/lib/types/io/index.d.cts +12 -0
  433. package/lib/types/io/index.d.mts +12 -0
  434. package/lib/types/io/spreadsheet/SpreadsheetService.d.cts +144 -0
  435. package/lib/types/io/spreadsheet/SpreadsheetService.d.mts +144 -0
  436. package/lib/types/io/spreadsheet/index.d.cts +7 -0
  437. package/lib/types/io/spreadsheet/index.d.mts +7 -0
  438. package/lib/types/namespaces/index.d.cts +1 -0
  439. package/lib/types/namespaces/index.d.mts +1 -0
  440. package/lib/types/namespaces/models/credential.model.d.cts +23 -0
  441. package/lib/types/namespaces/models/credential.model.d.mts +23 -0
  442. package/lib/types/namespaces/models/index.d.cts +1 -0
  443. package/lib/types/namespaces/models/index.d.mts +1 -0
  444. package/lib/types/namespaces/rls/index.d.cts +10 -0
  445. package/lib/types/namespaces/rls/index.d.mts +10 -0
  446. package/lib/types/namespaces/rls/principal-resolver.d.cts +47 -0
  447. package/lib/types/namespaces/rls/principal-resolver.d.mts +47 -0
  448. package/lib/types/namespaces/rls/rls-bootstrap.service.d.cts +157 -0
  449. package/lib/types/namespaces/rls/rls-bootstrap.service.d.mts +157 -0
  450. package/lib/types/namespaces/rls/rls.constants.d.cts +52 -0
  451. package/lib/types/namespaces/rls/rls.constants.d.mts +52 -0
  452. package/lib/types/namespaces/rls/rls.template.d.cts +42 -0
  453. package/lib/types/namespaces/rls/rls.template.d.mts +42 -0
  454. package/lib/types/namespaces/rls/rls.types.d.cts +77 -0
  455. package/lib/types/namespaces/rls/rls.types.d.mts +77 -0
  456. package/lib/types/namespaces/rls/session-binding.d.cts +87 -0
  457. package/lib/types/namespaces/rls/session-binding.d.mts +87 -0
  458. package/lib/types/namespaces/services/credential.service.d.cts +175 -0
  459. package/lib/types/namespaces/services/credential.service.d.mts +175 -0
  460. package/lib/types/namespaces/services/index.d.cts +1 -0
  461. package/lib/types/namespaces/services/index.d.mts +1 -0
  462. package/lib/types/namespaces/types.d.cts +37 -0
  463. package/lib/types/namespaces/types.d.mts +37 -0
  464. package/lib/types/redis/adapter.d.cts +2 -0
  465. package/lib/types/redis/adapter.d.mts +2 -0
  466. package/lib/types/redis/types.d.cts +27 -2
  467. package/lib/types/redis/types.d.mts +27 -2
  468. package/lib/types/secrets/InfraCredentialBootstrap.d.cts +100 -0
  469. package/lib/types/secrets/InfraCredentialBootstrap.d.mts +100 -0
  470. package/lib/types/secrets/core/SecretTypes.d.cts +15 -1
  471. package/lib/types/secrets/core/SecretTypes.d.mts +15 -1
  472. package/lib/types/secrets/fs/FsSecretEnvironment.d.cts +42 -0
  473. package/lib/types/secrets/fs/FsSecretEnvironment.d.mts +42 -0
  474. package/lib/types/secrets/fs/FsSecretService.d.cts +207 -0
  475. package/lib/types/secrets/fs/FsSecretService.d.mts +207 -0
  476. package/lib/types/secrets/fs/FsSecretServiceConfig.d.cts +37 -0
  477. package/lib/types/secrets/fs/FsSecretServiceConfig.d.mts +37 -0
  478. package/lib/types/secrets/fs/index.d.cts +9 -0
  479. package/lib/types/secrets/fs/index.d.mts +9 -0
  480. package/lib/types/secrets/index.d.cts +2 -0
  481. package/lib/types/secrets/index.d.mts +2 -0
  482. package/lib/types/secrets/model/ModelSecretService.d.cts +190 -1
  483. package/lib/types/secrets/model/ModelSecretService.d.mts +190 -1
  484. package/lib/types/secrets/model/Secret.d.cts +44 -3
  485. package/lib/types/secrets/model/Secret.d.mts +44 -3
  486. package/lib/types/shared/environmentValue.d.cts +24 -0
  487. package/lib/types/shared/environmentValue.d.mts +24 -0
  488. package/lib/types/shared/http/HttpApiService.d.cts +193 -0
  489. package/lib/types/shared/http/HttpApiService.d.mts +193 -0
  490. package/lib/types/shared/http/hermeticBoot.d.cts +84 -0
  491. package/lib/types/shared/http/hermeticBoot.d.mts +84 -0
  492. package/lib/types/shared/http/index.d.cts +10 -0
  493. package/lib/types/shared/http/index.d.mts +10 -0
  494. package/package.json +180 -3
  495. package/sql/002_rls.sql +660 -15
  496. package/sql/004_credentials.sql +46 -0
package/sql/002_rls.sql CHANGED
@@ -1,20 +1,665 @@
1
- ALTER TABLE protected_resources ENABLE ROW LEVEL SECURITY;
2
- ALTER TABLE protected_resources FORCE ROW LEVEL SECURITY;
3
-
4
- CREATE POLICY protected_resources_select_policy
5
- ON protected_resources
6
- FOR SELECT
7
- USING (
8
- EXISTS (
1
+ -- Namespace row-level security template.
2
+ -- Generated from src/namespaces/rls/rls.template.ts; do not edit by hand.
3
+ -- Apply with RlsBootstrapService.apply() or a migration runner.
4
+ CREATE OR REPLACE FUNCTION app_rls_principal_id()
5
+ RETURNS uuid
6
+ LANGUAGE sql
7
+ STABLE
8
+ AS $fn$
9
+ SELECT NULLIF(current_setting('app.principal_id', true), '')::uuid
10
+ $fn$;
11
+ CREATE OR REPLACE FUNCTION app_rls_subject_id()
12
+ RETURNS text
13
+ LANGUAGE sql
14
+ STABLE
15
+ SECURITY DEFINER
16
+ SET search_path = public, pg_temp
17
+ AS $fn$
18
+ SELECT p.subject_id
19
+ FROM principals p
20
+ WHERE p.id = app_rls_principal_id()
21
+ $fn$;
22
+ CREATE OR REPLACE FUNCTION app_rls_principal_for_subject(
23
+ p_subject text,
24
+ p_tenant uuid DEFAULT NULL
25
+ )
26
+ RETURNS uuid
27
+ LANGUAGE sql
28
+ STABLE
29
+ SECURITY DEFINER
30
+ SET search_path = public, pg_temp
31
+ AS $fn$
32
+ SELECT CASE WHEN COUNT(*) = 1 THEN (MIN(p.id::text))::uuid ELSE NULL END
33
+ FROM principals p
34
+ WHERE p.subject_id = NULLIF(p_subject, '')
35
+ AND (p_tenant IS NULL OR p.tenant_id = p_tenant)
36
+ $fn$;
37
+ REVOKE ALL ON FUNCTION app_rls_principal_for_subject(text, uuid) FROM PUBLIC;
38
+ CREATE OR REPLACE FUNCTION app_rls_org_unit_tenant(p_org_unit uuid)
39
+ RETURNS uuid
40
+ LANGUAGE sql
41
+ STABLE
42
+ SECURITY DEFINER
43
+ SET search_path = public, pg_temp
44
+ AS $fn$
45
+ SELECT ou.tenant_id
46
+ FROM org_units ou
47
+ WHERE ou.id = p_org_unit
48
+ $fn$;
49
+ CREATE OR REPLACE FUNCTION app_rls_has_permission(
50
+ p_tenant uuid,
51
+ p_permission text,
52
+ p_scope_kind text,
53
+ p_scope_id text
54
+ )
55
+ RETURNS boolean
56
+ LANGUAGE sql
57
+ STABLE
58
+ SECURITY DEFINER
59
+ SET search_path = public, pg_temp
60
+ AS $fn$
61
+ SELECT EXISTS (
62
+ SELECT 1
63
+ FROM effective_permissions ep
64
+ WHERE ep.tenant_id = p_tenant
65
+ AND ep.principal_id = app_rls_principal_id()
66
+ AND ep.permission_key = p_permission
67
+ AND ep.scope_kind = p_scope_kind
68
+ AND ep.scope_id = p_scope_id
69
+ AND (ep.starts_at IS NULL OR ep.starts_at <= now())
70
+ AND (ep.expires_at IS NULL OR ep.expires_at >= now())
71
+ )
72
+ $fn$;
73
+ CREATE OR REPLACE FUNCTION app_rls_tenant_permission(
74
+ p_tenant uuid,
75
+ p_permission text
76
+ )
77
+ RETURNS boolean
78
+ LANGUAGE sql
79
+ STABLE
80
+ SECURITY DEFINER
81
+ SET search_path = public, pg_temp
82
+ AS $fn$
83
+ SELECT app_rls_has_permission(
84
+ p_tenant,
85
+ p_permission,
86
+ 'tenant',
87
+ p_tenant::text
88
+ )
89
+ $fn$;
90
+ CREATE OR REPLACE FUNCTION app_rls_org_unit_permission(
91
+ p_tenant uuid,
92
+ p_org_unit uuid,
93
+ p_permission text
94
+ )
95
+ RETURNS boolean
96
+ LANGUAGE sql
97
+ STABLE
98
+ SECURITY DEFINER
99
+ SET search_path = public, pg_temp
100
+ AS $fn$
101
+ SELECT app_rls_has_permission(
102
+ p_tenant,
103
+ p_permission,
104
+ 'tenant',
105
+ p_tenant::text
106
+ )
107
+ OR (
108
+ p_org_unit IS NOT NULL
109
+ AND app_rls_has_permission(
110
+ p_tenant,
111
+ p_permission,
112
+ 'org_unit',
113
+ p_org_unit::text
114
+ )
115
+ )
116
+ $fn$;
117
+ CREATE OR REPLACE FUNCTION app_rls_is_tenant_member(p_tenant uuid)
118
+ RETURNS boolean
119
+ LANGUAGE sql
120
+ STABLE
121
+ SECURITY DEFINER
122
+ SET search_path = public, pg_temp
123
+ AS $fn$
124
+ SELECT EXISTS (
125
+ SELECT 1
126
+ FROM tenant_memberships tm
127
+ WHERE tm.tenant_id = p_tenant
128
+ AND tm.status = 'active'
129
+ AND tm.user_id::text = app_rls_subject_id()
130
+ )
131
+ $fn$;
132
+ CREATE OR REPLACE FUNCTION app_rls_is_org_unit_member(
133
+ p_tenant uuid,
134
+ p_org_unit uuid
135
+ )
136
+ RETURNS boolean
137
+ LANGUAGE sql
138
+ STABLE
139
+ SECURITY DEFINER
140
+ SET search_path = public, pg_temp
141
+ AS $fn$
142
+ SELECT EXISTS (
143
+ SELECT 1
144
+ FROM org_unit_memberships m
145
+ WHERE m.tenant_id = p_tenant
146
+ AND m.org_unit_id = p_org_unit
147
+ AND m.status = 'active'
148
+ AND m.user_id::text = app_rls_subject_id()
149
+ )
150
+ $fn$;
151
+ CREATE OR REPLACE FUNCTION app_rls_can_read_tenant(p_tenant uuid)
152
+ RETURNS boolean
153
+ LANGUAGE sql
154
+ STABLE
155
+ SECURITY DEFINER
156
+ SET search_path = public, pg_temp
157
+ AS $fn$
158
+ SELECT app_rls_tenant_permission(p_tenant, 'namespace.admin')
159
+ OR app_rls_tenant_permission(p_tenant, 'namespace.write')
160
+ OR app_rls_tenant_permission(p_tenant, 'namespace.read')
161
+ $fn$;
162
+ CREATE OR REPLACE FUNCTION app_rls_can_write_tenant(p_tenant uuid)
163
+ RETURNS boolean
164
+ LANGUAGE sql
165
+ STABLE
166
+ SECURITY DEFINER
167
+ SET search_path = public, pg_temp
168
+ AS $fn$
169
+ SELECT app_rls_tenant_permission(p_tenant, 'namespace.admin')
170
+ OR app_rls_tenant_permission(p_tenant, 'namespace.write')
171
+ $fn$;
172
+ CREATE OR REPLACE FUNCTION app_rls_can_read_org_unit(
173
+ p_tenant uuid,
174
+ p_org_unit uuid
175
+ )
176
+ RETURNS boolean
177
+ LANGUAGE sql
178
+ STABLE
179
+ SECURITY DEFINER
180
+ SET search_path = public, pg_temp
181
+ AS $fn$
182
+ SELECT app_rls_can_read_tenant(p_tenant)
183
+ OR app_rls_org_unit_permission(p_tenant, p_org_unit, 'namespace.admin')
184
+ OR app_rls_org_unit_permission(p_tenant, p_org_unit, 'namespace.write')
185
+ OR app_rls_org_unit_permission(p_tenant, p_org_unit, 'namespace.read')
186
+ OR app_rls_is_org_unit_member(p_tenant, p_org_unit)
187
+ $fn$;
188
+ CREATE OR REPLACE FUNCTION app_rls_can_write_org_unit(
189
+ p_tenant uuid,
190
+ p_org_unit uuid
191
+ )
192
+ RETURNS boolean
193
+ LANGUAGE sql
194
+ STABLE
195
+ SECURITY DEFINER
196
+ SET search_path = public, pg_temp
197
+ AS $fn$
198
+ SELECT app_rls_can_write_tenant(p_tenant)
199
+ OR app_rls_org_unit_permission(p_tenant, p_org_unit, 'namespace.admin')
200
+ OR app_rls_org_unit_permission(p_tenant, p_org_unit, 'namespace.write')
201
+ $fn$;
202
+ CREATE OR REPLACE FUNCTION app_rls_is_admin()
203
+ RETURNS boolean
204
+ LANGUAGE sql
205
+ STABLE
206
+ SECURITY DEFINER
207
+ SET search_path = public, pg_temp
208
+ AS $fn$
209
+ SELECT EXISTS (
9
210
  SELECT 1
10
211
  FROM effective_permissions ep
11
- WHERE ep.tenant_id = protected_resources.tenant_id
12
- AND ep.principal_id = current_setting('app.principal_id')::uuid
13
- AND ep.permission_key = 'resource.read'
212
+ WHERE ep.principal_id = app_rls_principal_id()
213
+ AND ep.permission_key = 'namespace.admin'
214
+ AND (ep.starts_at IS NULL OR ep.starts_at <= now())
215
+ AND (ep.expires_at IS NULL OR ep.expires_at >= now())
216
+ )
217
+ $fn$;
218
+ CREATE OR REPLACE FUNCTION app_rls_is_tenant_admin(p_tenant uuid)
219
+ RETURNS boolean
220
+ LANGUAGE sql
221
+ STABLE
222
+ SECURITY DEFINER
223
+ SET search_path = public, pg_temp
224
+ AS $fn$
225
+ SELECT app_rls_tenant_permission(p_tenant, 'namespace.admin')
226
+ $fn$;
227
+ CREATE OR REPLACE FUNCTION app_rls_is_org_unit_admin(
228
+ p_tenant uuid,
229
+ p_org_unit uuid
230
+ )
231
+ RETURNS boolean
232
+ LANGUAGE sql
233
+ STABLE
234
+ SECURITY DEFINER
235
+ SET search_path = public, pg_temp
236
+ AS $fn$
237
+ SELECT app_rls_is_tenant_admin(p_tenant)
238
+ OR (
239
+ p_org_unit IS NOT NULL
240
+ AND app_rls_org_unit_permission(p_tenant, p_org_unit, 'namespace.admin')
241
+ )
242
+ $fn$;
243
+ CREATE OR REPLACE FUNCTION app_rls_is_scope_admin(
244
+ p_tenant uuid,
245
+ p_scope_kind text,
246
+ p_scope_id text
247
+ )
248
+ RETURNS boolean
249
+ LANGUAGE sql
250
+ STABLE
251
+ SECURITY DEFINER
252
+ SET search_path = public, pg_temp
253
+ AS $fn$
254
+ SELECT CASE
255
+ WHEN p_scope_kind = 'tenant' THEN app_rls_is_tenant_admin(p_tenant)
256
+ WHEN p_scope_kind = 'org_unit' THEN app_rls_is_org_unit_admin(
257
+ p_tenant,
258
+ p_scope_id::uuid
259
+ )
260
+ WHEN p_scope_kind = 'resource' THEN EXISTS (
261
+ SELECT 1
262
+ FROM protected_resources r
263
+ WHERE r.id = p_scope_id::uuid
264
+ AND r.tenant_id = p_tenant
265
+ AND app_rls_is_org_unit_admin(p_tenant, r.org_unit_id)
266
+ )
267
+ ELSE false
268
+ END
269
+ $fn$;
270
+ CREATE OR REPLACE FUNCTION app_rls_can_admin_user(p_user_id uuid)
271
+ RETURNS boolean
272
+ LANGUAGE sql
273
+ STABLE
274
+ SECURITY DEFINER
275
+ SET search_path = public, pg_temp
276
+ AS $fn$
277
+ SELECT EXISTS (
278
+ SELECT 1
279
+ FROM tenant_memberships tm
280
+ WHERE tm.user_id = p_user_id
281
+ AND app_rls_is_tenant_admin(tm.tenant_id)
282
+ )
283
+ $fn$;
284
+ CREATE OR REPLACE FUNCTION app_rls_can_read_group(
285
+ p_tenant uuid,
286
+ p_group uuid
287
+ )
288
+ RETURNS boolean
289
+ LANGUAGE sql
290
+ STABLE
291
+ SECURITY DEFINER
292
+ SET search_path = public, pg_temp
293
+ AS $fn$
294
+ SELECT EXISTS (
295
+ SELECT 1
296
+ FROM groups g
297
+ WHERE g.id = p_group
298
+ AND g.tenant_id = p_tenant
14
299
  AND (
15
- (ep.scope_kind = 'tenant' AND ep.scope_id = protected_resources.tenant_id)
16
- OR (ep.scope_kind = 'org_unit' AND ep.scope_id = protected_resources.org_unit_id)
17
- OR (ep.scope_kind = 'resource' AND ep.scope_id = protected_resources.id)
300
+ (g.org_unit_id IS NULL AND app_rls_can_read_tenant(p_tenant))
301
+ OR (
302
+ g.org_unit_id IS NOT NULL
303
+ AND app_rls_can_read_org_unit(p_tenant, g.org_unit_id)
304
+ )
18
305
  )
19
306
  )
20
- );
307
+ $fn$;
308
+ CREATE OR REPLACE FUNCTION app_rls_can_write_group(
309
+ p_tenant uuid,
310
+ p_group uuid
311
+ )
312
+ RETURNS boolean
313
+ LANGUAGE sql
314
+ STABLE
315
+ SECURITY DEFINER
316
+ SET search_path = public, pg_temp
317
+ AS $fn$
318
+ SELECT EXISTS (
319
+ SELECT 1
320
+ FROM groups g
321
+ WHERE g.id = p_group
322
+ AND g.tenant_id = p_tenant
323
+ AND (
324
+ (g.org_unit_id IS NULL AND app_rls_can_write_tenant(p_tenant))
325
+ OR (
326
+ g.org_unit_id IS NOT NULL
327
+ AND app_rls_can_write_org_unit(p_tenant, g.org_unit_id)
328
+ )
329
+ )
330
+ )
331
+ $fn$;
332
+ CREATE OR REPLACE FUNCTION app_rls_can_read_resource(
333
+ p_tenant uuid,
334
+ p_resource uuid
335
+ )
336
+ RETURNS boolean
337
+ LANGUAGE sql
338
+ STABLE
339
+ SECURITY DEFINER
340
+ SET search_path = public, pg_temp
341
+ AS $fn$
342
+ SELECT EXISTS (
343
+ SELECT 1
344
+ FROM protected_resources r
345
+ WHERE r.id = p_resource
346
+ AND r.tenant_id = p_tenant
347
+ AND (
348
+ r.owner_principal_id = app_rls_principal_id()
349
+ OR app_rls_is_org_unit_admin(p_tenant, r.org_unit_id)
350
+ OR (
351
+ r.visibility = 'tenant'
352
+ AND app_rls_can_read_tenant(p_tenant)
353
+ )
354
+ OR (
355
+ r.visibility IN ('org_unit', 'org_subtree')
356
+ AND app_rls_can_read_org_unit(p_tenant, r.org_unit_id)
357
+ )
358
+ OR EXISTS (
359
+ SELECT 1
360
+ FROM resource_grants g
361
+ WHERE g.resource_id = r.id
362
+ AND g.principal_id = app_rls_principal_id()
363
+ AND g.permission_key IN (
364
+ 'resource.read',
365
+ 'namespace.read',
366
+ 'namespace.write',
367
+ 'namespace.admin'
368
+ )
369
+ AND (g.starts_at IS NULL OR g.starts_at <= now())
370
+ AND (g.expires_at IS NULL OR g.expires_at >= now())
371
+ )
372
+ )
373
+ )
374
+ $fn$;
375
+ CREATE OR REPLACE FUNCTION app_rls_can_write_resource(
376
+ p_tenant uuid,
377
+ p_resource uuid
378
+ )
379
+ RETURNS boolean
380
+ LANGUAGE sql
381
+ STABLE
382
+ SECURITY DEFINER
383
+ SET search_path = public, pg_temp
384
+ AS $fn$
385
+ SELECT EXISTS (
386
+ SELECT 1
387
+ FROM protected_resources r
388
+ WHERE r.id = p_resource
389
+ AND r.tenant_id = p_tenant
390
+ AND (
391
+ app_rls_is_org_unit_admin(p_tenant, r.org_unit_id)
392
+ OR app_rls_can_write_org_unit(p_tenant, r.org_unit_id)
393
+ )
394
+ )
395
+ $fn$;
396
+ CREATE OR REPLACE FUNCTION app_rls_is_role_admin(p_role uuid)
397
+ RETURNS boolean
398
+ LANGUAGE sql
399
+ STABLE
400
+ SECURITY DEFINER
401
+ SET search_path = public, pg_temp
402
+ AS $fn$
403
+ SELECT EXISTS (
404
+ SELECT 1
405
+ FROM roles r
406
+ WHERE r.id = p_role
407
+ AND (
408
+ (r.tenant_id IS NULL AND app_rls_is_admin())
409
+ OR (
410
+ r.tenant_id IS NOT NULL
411
+ AND app_rls_is_tenant_admin(r.tenant_id)
412
+ )
413
+ )
414
+ )
415
+ $fn$;
416
+ CREATE OR REPLACE FUNCTION app_rls_can_read_credential_scope(
417
+ p_tenant uuid,
418
+ p_org_unit uuid
419
+ )
420
+ RETURNS boolean
421
+ LANGUAGE sql
422
+ STABLE
423
+ SECURITY DEFINER
424
+ SET search_path = public, pg_temp
425
+ AS $fn$
426
+ SELECT CASE
427
+ WHEN p_org_unit IS NULL THEN app_rls_can_read_tenant(p_tenant)
428
+ ELSE app_rls_can_read_org_unit(p_tenant, p_org_unit)
429
+ END
430
+ $fn$;
431
+ CREATE OR REPLACE FUNCTION app_rls_can_write_credential_scope(
432
+ p_tenant uuid,
433
+ p_org_unit uuid
434
+ )
435
+ RETURNS boolean
436
+ LANGUAGE sql
437
+ STABLE
438
+ SECURITY DEFINER
439
+ SET search_path = public, pg_temp
440
+ AS $fn$
441
+ SELECT CASE
442
+ WHEN p_org_unit IS NULL THEN app_rls_can_write_tenant(p_tenant)
443
+ ELSE app_rls_can_write_org_unit(p_tenant, p_org_unit)
444
+ END
445
+ $fn$;
446
+ ALTER TABLE tenants ENABLE ROW LEVEL SECURITY;
447
+ ALTER TABLE tenants FORCE ROW LEVEL SECURITY;
448
+ DROP POLICY IF EXISTS tenants_select_policy ON tenants;
449
+ CREATE POLICY tenants_select_policy ON tenants FOR SELECT USING (app_rls_is_tenant_member(id) OR app_rls_can_read_tenant(id));
450
+ DROP POLICY IF EXISTS tenants_insert_policy ON tenants;
451
+ CREATE POLICY tenants_insert_policy ON tenants FOR INSERT WITH CHECK (app_rls_is_admin());
452
+ DROP POLICY IF EXISTS tenants_update_policy ON tenants;
453
+ CREATE POLICY tenants_update_policy ON tenants FOR UPDATE USING (app_rls_is_tenant_admin(id)) WITH CHECK (app_rls_is_tenant_admin(id));
454
+ DROP POLICY IF EXISTS tenants_delete_policy ON tenants;
455
+ CREATE POLICY tenants_delete_policy ON tenants FOR DELETE USING (app_rls_is_tenant_admin(id));
456
+ ALTER TABLE org_units ENABLE ROW LEVEL SECURITY;
457
+ ALTER TABLE org_units FORCE ROW LEVEL SECURITY;
458
+ DROP POLICY IF EXISTS org_units_select_policy ON org_units;
459
+ CREATE POLICY org_units_select_policy ON org_units FOR SELECT USING (app_rls_can_read_org_unit(tenant_id, id) OR (parent_id IS NOT NULL AND app_rls_can_write_org_unit(tenant_id, parent_id)));
460
+ DROP POLICY IF EXISTS org_units_insert_policy ON org_units;
461
+ CREATE POLICY org_units_insert_policy ON org_units FOR INSERT WITH CHECK (app_rls_can_write_tenant(tenant_id) OR (parent_id IS NOT NULL AND app_rls_can_write_org_unit(tenant_id, parent_id)));
462
+ DROP POLICY IF EXISTS org_units_update_policy ON org_units;
463
+ CREATE POLICY org_units_update_policy ON org_units FOR UPDATE USING (app_rls_can_write_org_unit(tenant_id, id) OR (parent_id IS NOT NULL AND app_rls_can_write_org_unit(tenant_id, parent_id))) WITH CHECK (app_rls_can_write_org_unit(tenant_id, id) OR (parent_id IS NOT NULL AND app_rls_can_write_org_unit(tenant_id, parent_id)));
464
+ DROP POLICY IF EXISTS org_units_delete_policy ON org_units;
465
+ CREATE POLICY org_units_delete_policy ON org_units FOR DELETE USING (app_rls_can_write_org_unit(tenant_id, id) OR (parent_id IS NOT NULL AND app_rls_can_write_org_unit(tenant_id, parent_id)));
466
+ ALTER TABLE org_unit_closure ENABLE ROW LEVEL SECURITY;
467
+ ALTER TABLE org_unit_closure FORCE ROW LEVEL SECURITY;
468
+ DROP POLICY IF EXISTS org_unit_closure_select_policy ON org_unit_closure;
469
+ CREATE POLICY org_unit_closure_select_policy ON org_unit_closure FOR SELECT USING (app_rls_can_read_org_unit(tenant_id, descendant_org_unit_id));
470
+ DROP POLICY IF EXISTS org_unit_closure_insert_policy ON org_unit_closure;
471
+ CREATE POLICY org_unit_closure_insert_policy ON org_unit_closure FOR INSERT WITH CHECK (app_rls_can_write_org_unit(tenant_id, descendant_org_unit_id));
472
+ DROP POLICY IF EXISTS org_unit_closure_update_policy ON org_unit_closure;
473
+ CREATE POLICY org_unit_closure_update_policy ON org_unit_closure FOR UPDATE USING (app_rls_can_write_org_unit(tenant_id, descendant_org_unit_id)) WITH CHECK (app_rls_can_write_org_unit(tenant_id, descendant_org_unit_id));
474
+ DROP POLICY IF EXISTS org_unit_closure_delete_policy ON org_unit_closure;
475
+ CREATE POLICY org_unit_closure_delete_policy ON org_unit_closure FOR DELETE USING (app_rls_can_write_org_unit(tenant_id, descendant_org_unit_id));
476
+ ALTER TABLE users ENABLE ROW LEVEL SECURITY;
477
+ ALTER TABLE users FORCE ROW LEVEL SECURITY;
478
+ DROP POLICY IF EXISTS users_select_policy ON users;
479
+ CREATE POLICY users_select_policy ON users FOR SELECT USING (id::text = app_rls_subject_id() OR app_rls_can_admin_user(id));
480
+ DROP POLICY IF EXISTS users_insert_policy ON users;
481
+ CREATE POLICY users_insert_policy ON users FOR INSERT WITH CHECK (app_rls_is_admin());
482
+ DROP POLICY IF EXISTS users_update_policy ON users;
483
+ CREATE POLICY users_update_policy ON users FOR UPDATE USING (id::text = app_rls_subject_id() OR app_rls_can_admin_user(id)) WITH CHECK (id::text = app_rls_subject_id() OR app_rls_can_admin_user(id));
484
+ DROP POLICY IF EXISTS users_delete_policy ON users;
485
+ CREATE POLICY users_delete_policy ON users FOR DELETE USING (app_rls_can_admin_user(id));
486
+ ALTER TABLE groups ENABLE ROW LEVEL SECURITY;
487
+ ALTER TABLE groups FORCE ROW LEVEL SECURITY;
488
+ DROP POLICY IF EXISTS groups_select_policy ON groups;
489
+ CREATE POLICY groups_select_policy ON groups FOR SELECT USING (app_rls_can_read_group(tenant_id, id));
490
+ DROP POLICY IF EXISTS groups_insert_policy ON groups;
491
+ CREATE POLICY groups_insert_policy ON groups FOR INSERT WITH CHECK (app_rls_can_write_tenant(tenant_id) OR (org_unit_id IS NOT NULL AND app_rls_can_write_org_unit(tenant_id, org_unit_id)));
492
+ DROP POLICY IF EXISTS groups_update_policy ON groups;
493
+ CREATE POLICY groups_update_policy ON groups FOR UPDATE USING (app_rls_can_write_group(tenant_id, id)) WITH CHECK (app_rls_can_write_group(tenant_id, id));
494
+ DROP POLICY IF EXISTS groups_delete_policy ON groups;
495
+ CREATE POLICY groups_delete_policy ON groups FOR DELETE USING (app_rls_can_write_group(tenant_id, id));
496
+ ALTER TABLE principals ENABLE ROW LEVEL SECURITY;
497
+ ALTER TABLE principals FORCE ROW LEVEL SECURITY;
498
+ DROP POLICY IF EXISTS principals_select_policy ON principals;
499
+ CREATE POLICY principals_select_policy ON principals FOR SELECT USING (id = app_rls_principal_id() OR (kind = 'user' AND subject_id = app_rls_subject_id()) OR app_rls_is_tenant_admin(tenant_id));
500
+ DROP POLICY IF EXISTS principals_insert_policy ON principals;
501
+ CREATE POLICY principals_insert_policy ON principals FOR INSERT WITH CHECK (app_rls_is_tenant_admin(tenant_id));
502
+ DROP POLICY IF EXISTS principals_update_policy ON principals;
503
+ CREATE POLICY principals_update_policy ON principals FOR UPDATE USING (app_rls_is_tenant_admin(tenant_id)) WITH CHECK (app_rls_is_tenant_admin(tenant_id));
504
+ DROP POLICY IF EXISTS principals_delete_policy ON principals;
505
+ CREATE POLICY principals_delete_policy ON principals FOR DELETE USING (app_rls_is_tenant_admin(tenant_id));
506
+ ALTER TABLE tenant_memberships ENABLE ROW LEVEL SECURITY;
507
+ ALTER TABLE tenant_memberships FORCE ROW LEVEL SECURITY;
508
+ DROP POLICY IF EXISTS tenant_memberships_select_policy ON tenant_memberships;
509
+ CREATE POLICY tenant_memberships_select_policy ON tenant_memberships FOR SELECT USING (user_id::text = app_rls_subject_id() OR app_rls_can_read_tenant(tenant_id));
510
+ DROP POLICY IF EXISTS tenant_memberships_insert_policy ON tenant_memberships;
511
+ CREATE POLICY tenant_memberships_insert_policy ON tenant_memberships FOR INSERT WITH CHECK (app_rls_is_tenant_admin(tenant_id));
512
+ DROP POLICY IF EXISTS tenant_memberships_update_policy ON tenant_memberships;
513
+ CREATE POLICY tenant_memberships_update_policy ON tenant_memberships FOR UPDATE USING (app_rls_is_tenant_admin(tenant_id)) WITH CHECK (app_rls_is_tenant_admin(tenant_id));
514
+ DROP POLICY IF EXISTS tenant_memberships_delete_policy ON tenant_memberships;
515
+ CREATE POLICY tenant_memberships_delete_policy ON tenant_memberships FOR DELETE USING (app_rls_is_tenant_admin(tenant_id));
516
+ ALTER TABLE org_unit_memberships ENABLE ROW LEVEL SECURITY;
517
+ ALTER TABLE org_unit_memberships FORCE ROW LEVEL SECURITY;
518
+ DROP POLICY IF EXISTS org_unit_memberships_select_policy ON org_unit_memberships;
519
+ CREATE POLICY org_unit_memberships_select_policy ON org_unit_memberships FOR SELECT USING (user_id::text = app_rls_subject_id() OR app_rls_org_unit_permission(tenant_id, org_unit_id, 'namespace.admin') OR app_rls_org_unit_permission(tenant_id, org_unit_id, 'namespace.write') OR app_rls_org_unit_permission(tenant_id, org_unit_id, 'namespace.read'));
520
+ DROP POLICY IF EXISTS org_unit_memberships_insert_policy ON org_unit_memberships;
521
+ CREATE POLICY org_unit_memberships_insert_policy ON org_unit_memberships FOR INSERT WITH CHECK (app_rls_can_write_org_unit(tenant_id, org_unit_id));
522
+ DROP POLICY IF EXISTS org_unit_memberships_update_policy ON org_unit_memberships;
523
+ CREATE POLICY org_unit_memberships_update_policy ON org_unit_memberships FOR UPDATE USING (app_rls_can_write_org_unit(tenant_id, org_unit_id)) WITH CHECK (app_rls_can_write_org_unit(tenant_id, org_unit_id));
524
+ DROP POLICY IF EXISTS org_unit_memberships_delete_policy ON org_unit_memberships;
525
+ CREATE POLICY org_unit_memberships_delete_policy ON org_unit_memberships FOR DELETE USING (app_rls_can_write_org_unit(tenant_id, org_unit_id));
526
+ ALTER TABLE group_memberships ENABLE ROW LEVEL SECURITY;
527
+ ALTER TABLE group_memberships FORCE ROW LEVEL SECURITY;
528
+ DROP POLICY IF EXISTS group_memberships_select_policy ON group_memberships;
529
+ CREATE POLICY group_memberships_select_policy ON group_memberships FOR SELECT USING (app_rls_can_read_group(tenant_id, group_id));
530
+ DROP POLICY IF EXISTS group_memberships_insert_policy ON group_memberships;
531
+ CREATE POLICY group_memberships_insert_policy ON group_memberships FOR INSERT WITH CHECK (app_rls_can_write_group(tenant_id, group_id));
532
+ DROP POLICY IF EXISTS group_memberships_update_policy ON group_memberships;
533
+ CREATE POLICY group_memberships_update_policy ON group_memberships FOR UPDATE USING (app_rls_can_write_group(tenant_id, group_id)) WITH CHECK (app_rls_can_write_group(tenant_id, group_id));
534
+ DROP POLICY IF EXISTS group_memberships_delete_policy ON group_memberships;
535
+ CREATE POLICY group_memberships_delete_policy ON group_memberships FOR DELETE USING (app_rls_can_write_group(tenant_id, group_id));
536
+ ALTER TABLE permissions ENABLE ROW LEVEL SECURITY;
537
+ ALTER TABLE permissions FORCE ROW LEVEL SECURITY;
538
+ DROP POLICY IF EXISTS permissions_select_policy ON permissions;
539
+ CREATE POLICY permissions_select_policy ON permissions FOR SELECT USING (app_rls_is_admin());
540
+ DROP POLICY IF EXISTS permissions_insert_policy ON permissions;
541
+ CREATE POLICY permissions_insert_policy ON permissions FOR INSERT WITH CHECK (app_rls_is_admin());
542
+ DROP POLICY IF EXISTS permissions_update_policy ON permissions;
543
+ CREATE POLICY permissions_update_policy ON permissions FOR UPDATE USING (app_rls_is_admin()) WITH CHECK (app_rls_is_admin());
544
+ DROP POLICY IF EXISTS permissions_delete_policy ON permissions;
545
+ CREATE POLICY permissions_delete_policy ON permissions FOR DELETE USING (app_rls_is_admin());
546
+ ALTER TABLE roles ENABLE ROW LEVEL SECURITY;
547
+ ALTER TABLE roles FORCE ROW LEVEL SECURITY;
548
+ DROP POLICY IF EXISTS roles_select_policy ON roles;
549
+ CREATE POLICY roles_select_policy ON roles FOR SELECT USING ((tenant_id IS NOT NULL AND app_rls_is_tenant_admin(tenant_id)) OR (tenant_id IS NULL AND app_rls_is_admin()));
550
+ DROP POLICY IF EXISTS roles_insert_policy ON roles;
551
+ CREATE POLICY roles_insert_policy ON roles FOR INSERT WITH CHECK ((tenant_id IS NOT NULL AND app_rls_is_tenant_admin(tenant_id)) OR (tenant_id IS NULL AND app_rls_is_admin()));
552
+ DROP POLICY IF EXISTS roles_update_policy ON roles;
553
+ CREATE POLICY roles_update_policy ON roles FOR UPDATE USING ((tenant_id IS NOT NULL AND app_rls_is_tenant_admin(tenant_id)) OR (tenant_id IS NULL AND app_rls_is_admin())) WITH CHECK ((tenant_id IS NOT NULL AND app_rls_is_tenant_admin(tenant_id)) OR (tenant_id IS NULL AND app_rls_is_admin()));
554
+ DROP POLICY IF EXISTS roles_delete_policy ON roles;
555
+ CREATE POLICY roles_delete_policy ON roles FOR DELETE USING ((tenant_id IS NOT NULL AND app_rls_is_tenant_admin(tenant_id)) OR (tenant_id IS NULL AND app_rls_is_admin()));
556
+ ALTER TABLE role_permissions ENABLE ROW LEVEL SECURITY;
557
+ ALTER TABLE role_permissions FORCE ROW LEVEL SECURITY;
558
+ DROP POLICY IF EXISTS role_permissions_select_policy ON role_permissions;
559
+ CREATE POLICY role_permissions_select_policy ON role_permissions FOR SELECT USING (app_rls_is_role_admin(role_id));
560
+ DROP POLICY IF EXISTS role_permissions_insert_policy ON role_permissions;
561
+ CREATE POLICY role_permissions_insert_policy ON role_permissions FOR INSERT WITH CHECK (app_rls_is_role_admin(role_id));
562
+ DROP POLICY IF EXISTS role_permissions_update_policy ON role_permissions;
563
+ CREATE POLICY role_permissions_update_policy ON role_permissions FOR UPDATE USING (app_rls_is_role_admin(role_id)) WITH CHECK (app_rls_is_role_admin(role_id));
564
+ DROP POLICY IF EXISTS role_permissions_delete_policy ON role_permissions;
565
+ CREATE POLICY role_permissions_delete_policy ON role_permissions FOR DELETE USING (app_rls_is_role_admin(role_id));
566
+ ALTER TABLE role_assignments ENABLE ROW LEVEL SECURITY;
567
+ ALTER TABLE role_assignments FORCE ROW LEVEL SECURITY;
568
+ DROP POLICY IF EXISTS role_assignments_select_policy ON role_assignments;
569
+ CREATE POLICY role_assignments_select_policy ON role_assignments FOR SELECT USING (app_rls_is_scope_admin(tenant_id, scope_kind, scope_id));
570
+ DROP POLICY IF EXISTS role_assignments_insert_policy ON role_assignments;
571
+ CREATE POLICY role_assignments_insert_policy ON role_assignments FOR INSERT WITH CHECK (app_rls_is_scope_admin(tenant_id, scope_kind, scope_id));
572
+ DROP POLICY IF EXISTS role_assignments_update_policy ON role_assignments;
573
+ CREATE POLICY role_assignments_update_policy ON role_assignments FOR UPDATE USING (app_rls_is_scope_admin(tenant_id, scope_kind, scope_id)) WITH CHECK (app_rls_is_scope_admin(tenant_id, scope_kind, scope_id));
574
+ DROP POLICY IF EXISTS role_assignments_delete_policy ON role_assignments;
575
+ CREATE POLICY role_assignments_delete_policy ON role_assignments FOR DELETE USING (app_rls_is_scope_admin(tenant_id, scope_kind, scope_id));
576
+ ALTER TABLE inheritance_blocks ENABLE ROW LEVEL SECURITY;
577
+ ALTER TABLE inheritance_blocks FORCE ROW LEVEL SECURITY;
578
+ DROP POLICY IF EXISTS inheritance_blocks_select_policy ON inheritance_blocks;
579
+ CREATE POLICY inheritance_blocks_select_policy ON inheritance_blocks FOR SELECT USING (app_rls_is_org_unit_admin(tenant_id, org_unit_id));
580
+ DROP POLICY IF EXISTS inheritance_blocks_insert_policy ON inheritance_blocks;
581
+ CREATE POLICY inheritance_blocks_insert_policy ON inheritance_blocks FOR INSERT WITH CHECK (app_rls_is_org_unit_admin(tenant_id, org_unit_id));
582
+ DROP POLICY IF EXISTS inheritance_blocks_update_policy ON inheritance_blocks;
583
+ CREATE POLICY inheritance_blocks_update_policy ON inheritance_blocks FOR UPDATE USING (app_rls_is_org_unit_admin(tenant_id, org_unit_id)) WITH CHECK (app_rls_is_org_unit_admin(tenant_id, org_unit_id));
584
+ DROP POLICY IF EXISTS inheritance_blocks_delete_policy ON inheritance_blocks;
585
+ CREATE POLICY inheritance_blocks_delete_policy ON inheritance_blocks FOR DELETE USING (app_rls_is_org_unit_admin(tenant_id, org_unit_id));
586
+ ALTER TABLE protected_resources ENABLE ROW LEVEL SECURITY;
587
+ ALTER TABLE protected_resources FORCE ROW LEVEL SECURITY;
588
+ DROP POLICY IF EXISTS protected_resources_select_policy ON protected_resources;
589
+ CREATE POLICY protected_resources_select_policy ON protected_resources FOR SELECT USING (app_rls_can_read_resource(tenant_id, id));
590
+ DROP POLICY IF EXISTS protected_resources_insert_policy ON protected_resources;
591
+ CREATE POLICY protected_resources_insert_policy ON protected_resources FOR INSERT WITH CHECK (app_rls_can_write_tenant(tenant_id) OR (org_unit_id IS NOT NULL AND app_rls_can_write_org_unit(tenant_id, org_unit_id)));
592
+ DROP POLICY IF EXISTS protected_resources_update_policy ON protected_resources;
593
+ CREATE POLICY protected_resources_update_policy ON protected_resources FOR UPDATE USING (app_rls_can_write_resource(tenant_id, id)) WITH CHECK (app_rls_can_write_resource(tenant_id, id));
594
+ DROP POLICY IF EXISTS protected_resources_delete_policy ON protected_resources;
595
+ CREATE POLICY protected_resources_delete_policy ON protected_resources FOR DELETE USING (app_rls_can_write_resource(tenant_id, id));
596
+ ALTER TABLE resource_grants ENABLE ROW LEVEL SECURITY;
597
+ ALTER TABLE resource_grants FORCE ROW LEVEL SECURITY;
598
+ DROP POLICY IF EXISTS resource_grants_select_policy ON resource_grants;
599
+ CREATE POLICY resource_grants_select_policy ON resource_grants FOR SELECT USING (principal_id = app_rls_principal_id() OR app_rls_can_read_resource(tenant_id, resource_id));
600
+ DROP POLICY IF EXISTS resource_grants_insert_policy ON resource_grants;
601
+ CREATE POLICY resource_grants_insert_policy ON resource_grants FOR INSERT WITH CHECK (app_rls_can_write_resource(tenant_id, resource_id));
602
+ DROP POLICY IF EXISTS resource_grants_update_policy ON resource_grants;
603
+ CREATE POLICY resource_grants_update_policy ON resource_grants FOR UPDATE USING (app_rls_can_write_resource(tenant_id, resource_id)) WITH CHECK (app_rls_can_write_resource(tenant_id, resource_id));
604
+ DROP POLICY IF EXISTS resource_grants_delete_policy ON resource_grants;
605
+ CREATE POLICY resource_grants_delete_policy ON resource_grants FOR DELETE USING (app_rls_can_write_resource(tenant_id, resource_id));
606
+ ALTER TABLE effective_permissions ENABLE ROW LEVEL SECURITY;
607
+ ALTER TABLE effective_permissions FORCE ROW LEVEL SECURITY;
608
+ DROP POLICY IF EXISTS effective_permissions_select_policy ON effective_permissions;
609
+ CREATE POLICY effective_permissions_select_policy ON effective_permissions FOR SELECT USING (principal_id = app_rls_principal_id() OR app_rls_is_scope_admin(tenant_id, scope_kind, scope_id));
610
+ DROP POLICY IF EXISTS effective_permissions_insert_policy ON effective_permissions;
611
+ CREATE POLICY effective_permissions_insert_policy ON effective_permissions FOR INSERT WITH CHECK (app_rls_is_scope_admin(tenant_id, scope_kind, scope_id));
612
+ DROP POLICY IF EXISTS effective_permissions_update_policy ON effective_permissions;
613
+ CREATE POLICY effective_permissions_update_policy ON effective_permissions FOR UPDATE USING (app_rls_is_scope_admin(tenant_id, scope_kind, scope_id)) WITH CHECK (app_rls_is_scope_admin(tenant_id, scope_kind, scope_id));
614
+ DROP POLICY IF EXISTS effective_permissions_delete_policy ON effective_permissions;
615
+ CREATE POLICY effective_permissions_delete_policy ON effective_permissions FOR DELETE USING (app_rls_is_scope_admin(tenant_id, scope_kind, scope_id));
616
+ ALTER TABLE storage_bindings ENABLE ROW LEVEL SECURITY;
617
+ ALTER TABLE storage_bindings FORCE ROW LEVEL SECURITY;
618
+ DROP POLICY IF EXISTS storage_bindings_select_policy ON storage_bindings;
619
+ CREATE POLICY storage_bindings_select_policy ON storage_bindings FOR SELECT USING (app_rls_is_tenant_admin(tenant_id));
620
+ DROP POLICY IF EXISTS storage_bindings_insert_policy ON storage_bindings;
621
+ CREATE POLICY storage_bindings_insert_policy ON storage_bindings FOR INSERT WITH CHECK (app_rls_is_tenant_admin(tenant_id));
622
+ DROP POLICY IF EXISTS storage_bindings_update_policy ON storage_bindings;
623
+ CREATE POLICY storage_bindings_update_policy ON storage_bindings FOR UPDATE USING (app_rls_is_tenant_admin(tenant_id)) WITH CHECK (app_rls_is_tenant_admin(tenant_id));
624
+ DROP POLICY IF EXISTS storage_bindings_delete_policy ON storage_bindings;
625
+ CREATE POLICY storage_bindings_delete_policy ON storage_bindings FOR DELETE USING (app_rls_is_tenant_admin(tenant_id));
626
+ ALTER TABLE tenant_profiles ENABLE ROW LEVEL SECURITY;
627
+ ALTER TABLE tenant_profiles FORCE ROW LEVEL SECURITY;
628
+ DROP POLICY IF EXISTS tenant_profiles_select_policy ON tenant_profiles;
629
+ CREATE POLICY tenant_profiles_select_policy ON tenant_profiles FOR SELECT USING (app_rls_is_tenant_member(tenant_id) OR app_rls_can_read_tenant(tenant_id));
630
+ DROP POLICY IF EXISTS tenant_profiles_insert_policy ON tenant_profiles;
631
+ CREATE POLICY tenant_profiles_insert_policy ON tenant_profiles FOR INSERT WITH CHECK (app_rls_is_tenant_admin(tenant_id));
632
+ DROP POLICY IF EXISTS tenant_profiles_update_policy ON tenant_profiles;
633
+ CREATE POLICY tenant_profiles_update_policy ON tenant_profiles FOR UPDATE USING (app_rls_is_tenant_admin(tenant_id)) WITH CHECK (app_rls_is_tenant_admin(tenant_id));
634
+ DROP POLICY IF EXISTS tenant_profiles_delete_policy ON tenant_profiles;
635
+ CREATE POLICY tenant_profiles_delete_policy ON tenant_profiles FOR DELETE USING (app_rls_is_tenant_admin(tenant_id));
636
+ ALTER TABLE org_unit_profiles ENABLE ROW LEVEL SECURITY;
637
+ ALTER TABLE org_unit_profiles FORCE ROW LEVEL SECURITY;
638
+ DROP POLICY IF EXISTS org_unit_profiles_select_policy ON org_unit_profiles;
639
+ CREATE POLICY org_unit_profiles_select_policy ON org_unit_profiles FOR SELECT USING (app_rls_can_read_org_unit(app_rls_org_unit_tenant(org_unit_id), org_unit_id));
640
+ DROP POLICY IF EXISTS org_unit_profiles_insert_policy ON org_unit_profiles;
641
+ CREATE POLICY org_unit_profiles_insert_policy ON org_unit_profiles FOR INSERT WITH CHECK (app_rls_can_write_org_unit(app_rls_org_unit_tenant(org_unit_id), org_unit_id));
642
+ DROP POLICY IF EXISTS org_unit_profiles_update_policy ON org_unit_profiles;
643
+ CREATE POLICY org_unit_profiles_update_policy ON org_unit_profiles FOR UPDATE USING (app_rls_can_write_org_unit(app_rls_org_unit_tenant(org_unit_id), org_unit_id)) WITH CHECK (app_rls_can_write_org_unit(app_rls_org_unit_tenant(org_unit_id), org_unit_id));
644
+ DROP POLICY IF EXISTS org_unit_profiles_delete_policy ON org_unit_profiles;
645
+ CREATE POLICY org_unit_profiles_delete_policy ON org_unit_profiles FOR DELETE USING (app_rls_can_write_org_unit(app_rls_org_unit_tenant(org_unit_id), org_unit_id));
646
+ ALTER TABLE credentials ENABLE ROW LEVEL SECURITY;
647
+ ALTER TABLE credentials FORCE ROW LEVEL SECURITY;
648
+ DROP POLICY IF EXISTS credentials_select_policy ON credentials;
649
+ CREATE POLICY credentials_select_policy ON credentials FOR SELECT USING (owner_principal_id = app_rls_principal_id() OR app_rls_can_read_credential_scope(tenant_id, org_unit_id));
650
+ DROP POLICY IF EXISTS credentials_insert_policy ON credentials;
651
+ CREATE POLICY credentials_insert_policy ON credentials FOR INSERT WITH CHECK (app_rls_can_write_credential_scope(tenant_id, org_unit_id));
652
+ DROP POLICY IF EXISTS credentials_update_policy ON credentials;
653
+ CREATE POLICY credentials_update_policy ON credentials FOR UPDATE USING (app_rls_can_write_credential_scope(tenant_id, org_unit_id)) WITH CHECK (app_rls_can_write_credential_scope(tenant_id, org_unit_id));
654
+ DROP POLICY IF EXISTS credentials_delete_policy ON credentials;
655
+ CREATE POLICY credentials_delete_policy ON credentials FOR DELETE USING (app_rls_can_write_credential_scope(tenant_id, org_unit_id));
656
+ ALTER TABLE secrets ENABLE ROW LEVEL SECURITY;
657
+ ALTER TABLE secrets FORCE ROW LEVEL SECURITY;
658
+ DROP POLICY IF EXISTS secrets_select_policy ON secrets;
659
+ CREATE POLICY secrets_select_policy ON secrets FOR SELECT USING (owner_principal_id = app_rls_principal_id() OR app_rls_can_read_credential_scope(tenant_id, org_unit_id) OR (tenant_id IS NULL AND app_rls_is_admin()));
660
+ DROP POLICY IF EXISTS secrets_insert_policy ON secrets;
661
+ CREATE POLICY secrets_insert_policy ON secrets FOR INSERT WITH CHECK (app_rls_can_write_credential_scope(tenant_id, org_unit_id) OR (tenant_id IS NULL AND app_rls_is_admin()));
662
+ DROP POLICY IF EXISTS secrets_update_policy ON secrets;
663
+ CREATE POLICY secrets_update_policy ON secrets FOR UPDATE USING (app_rls_can_write_credential_scope(tenant_id, org_unit_id) OR (tenant_id IS NULL AND app_rls_is_admin())) WITH CHECK (app_rls_can_write_credential_scope(tenant_id, org_unit_id) OR (tenant_id IS NULL AND app_rls_is_admin()));
664
+ DROP POLICY IF EXISTS secrets_delete_policy ON secrets;
665
+ CREATE POLICY secrets_delete_policy ON secrets FOR DELETE USING (app_rls_can_write_credential_scope(tenant_id, org_unit_id) OR (tenant_id IS NULL AND app_rls_is_admin()));