@budibase/server 1.0.98-alpha.3 → 1.0.99

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 (227) hide show
  1. package/builder/assets/index.44b5c19a.js +1291 -0
  2. package/builder/assets/{index.64ecb83d.css → index.7c8961b4.css} +1 -1
  3. package/builder/assets/{vendor.8e34a169.js → vendor.a7c6ad0a.js} +1 -1
  4. package/builder/index.html +3 -3
  5. package/coverage/clover.xml +282 -277
  6. package/coverage/coverage-final.json +13 -13
  7. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/component.js.html +4 -4
  15. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +5 -5
  18. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/permission.js.html +7 -7
  23. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  24. package/coverage/lcov-report/api/controllers/query/index.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/query/validation.js.html +2 -2
  26. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/index.html +10 -10
  30. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/internal.js.html +7 -19
  32. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/row/utils.js.html +6 -6
  35. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  40. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  47. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  48. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  49. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  50. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  51. package/coverage/lcov-report/api/index.html +1 -1
  52. package/coverage/lcov-report/api/index.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/analytics.js.html +3 -3
  54. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  63. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/index.html +1 -1
  65. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/table.js.html +2 -2
  79. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  80. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  82. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  83. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  84. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  85. package/coverage/lcov-report/automations/actions.js.html +1 -1
  86. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  87. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  88. package/coverage/lcov-report/automations/index.html +1 -1
  89. package/coverage/lcov-report/automations/index.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/index.html +1 -1
  99. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  104. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  106. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  107. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  111. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  112. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  113. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  114. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  115. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  116. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  117. package/coverage/lcov-report/automations/utils.js.html +1 -1
  118. package/coverage/lcov-report/constants/index.html +1 -1
  119. package/coverage/lcov-report/constants/index.js.html +1 -1
  120. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  121. package/coverage/lcov-report/constants/screens.js.html +1 -1
  122. package/coverage/lcov-report/db/client.js.html +1 -1
  123. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  124. package/coverage/lcov-report/db/index.html +1 -1
  125. package/coverage/lcov-report/db/index.js.html +1 -1
  126. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  127. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  128. package/coverage/lcov-report/db/linkedRows/index.js.html +10 -10
  129. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +7 -7
  130. package/coverage/lcov-report/db/newid.js.html +2 -2
  131. package/coverage/lcov-report/db/utils.js.html +2 -2
  132. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  133. package/coverage/lcov-report/events/index.html +1 -1
  134. package/coverage/lcov-report/events/index.js.html +1 -1
  135. package/coverage/lcov-report/events/utils.js.html +1 -1
  136. package/coverage/lcov-report/index.html +21 -21
  137. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  138. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  139. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  140. package/coverage/lcov-report/middleware/authorized.js.html +75 -15
  141. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  142. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  143. package/coverage/lcov-report/middleware/index.html +15 -15
  144. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  145. package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
  146. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  147. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  148. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  149. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  150. package/coverage/lcov-report/threads/automation.js.html +1 -1
  151. package/coverage/lcov-report/threads/index.html +1 -1
  152. package/coverage/lcov-report/threads/index.js.html +1 -1
  153. package/coverage/lcov-report/threads/query.js.html +1 -1
  154. package/coverage/lcov-report/threads/utils.js.html +1 -1
  155. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  156. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  157. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  158. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  159. package/coverage/lcov-report/utilities/global.js.html +1 -1
  160. package/coverage/lcov-report/utilities/index.html +1 -1
  161. package/coverage/lcov-report/utilities/index.js.html +1 -1
  162. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  163. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  164. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  165. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  166. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  167. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +12 -12
  168. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +8 -8
  169. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  170. package/coverage/lcov-report/utilities/security.js.html +1 -1
  171. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  172. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  173. package/coverage/lcov-report/utilities/usageQuota/index.js.html +1 -1
  174. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  175. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  176. package/coverage/lcov-report/utilities/users.js.html +1 -1
  177. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  178. package/coverage/lcov.info +459 -440
  179. package/dist/api/controllers/permission.js +3 -4
  180. package/dist/api/controllers/query/import/index.js +1 -2
  181. package/dist/api/controllers/query/import/sources/base/index.js +1 -12
  182. package/dist/api/controllers/query/import/sources/curl.js +2 -2
  183. package/dist/api/controllers/row/internal.js +1 -2
  184. package/dist/api/routes/analytics.js +2 -2
  185. package/dist/api/routes/table.js +1 -1
  186. package/dist/definitions/datasource.js +0 -1
  187. package/dist/integrations/base/sql.js +9 -16
  188. package/dist/integrations/dynamodb.js +1 -3
  189. package/dist/integrations/index.js +0 -3
  190. package/dist/integrations/rest.js +1 -2
  191. package/dist/middleware/authorized.js +24 -7
  192. package/dist/package.json +4 -7
  193. package/dist/tsconfig.tsbuildinfo +1 -1
  194. package/package.json +5 -8
  195. package/scripts/dev/manage.js +1 -2
  196. package/specs/openapi.json +23 -3
  197. package/specs/openapi.yaml +20 -4
  198. package/specs/resources/query.js +27 -5
  199. package/src/api/controllers/permission.js +3 -3
  200. package/src/api/controllers/query/import/index.ts +1 -2
  201. package/src/api/controllers/query/import/sources/base/index.ts +2 -12
  202. package/src/api/controllers/query/import/sources/curl.ts +2 -2
  203. package/src/api/controllers/query/import/tests/index.spec.js +0 -43
  204. package/src/api/controllers/row/internal.js +1 -5
  205. package/src/api/routes/analytics.js +2 -2
  206. package/src/api/routes/table.js +1 -1
  207. package/src/api/routes/tests/misc.spec.js +2 -2
  208. package/src/definitions/datasource.ts +0 -1
  209. package/src/definitions/openapi.ts +483 -473
  210. package/src/integrations/base/sql.ts +9 -14
  211. package/src/integrations/dynamodb.ts +1 -3
  212. package/src/integrations/index.ts +0 -3
  213. package/src/integrations/rest.ts +1 -2
  214. package/src/integrations/tests/sql.spec.js +0 -51
  215. package/src/middleware/authorized.js +26 -6
  216. package/builder/assets/index.47d835a9.js +0 -1292
  217. package/dist/api/controllers/query/import/sources/openapi3.js +0 -174
  218. package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +0 -253
  219. package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +0 -1225
  220. package/dist/integrations/firebase.js +0 -192
  221. package/src/api/controllers/query/import/sources/openapi3.ts +0 -205
  222. package/src/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +0 -253
  223. package/src/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.yaml +0 -153
  224. package/src/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +0 -1225
  225. package/src/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.yaml +0 -804
  226. package/src/api/controllers/query/import/sources/tests/openapi3/openapi3.spec.js +0 -240
  227. package/src/integrations/firebase.ts +0 -205
@@ -31,8 +31,11 @@ function parse(input: any) {
31
31
  if (typeof input !== "string") {
32
32
  return input
33
33
  }
34
- if (input === MAX_ISO_DATE || input === MIN_ISO_DATE) {
35
- return null
34
+ if (input === MAX_ISO_DATE) {
35
+ return new Date(8640000000000000)
36
+ }
37
+ if (input === MIN_ISO_DATE) {
38
+ return new Date(-8640000000000000)
36
39
  }
37
40
  if (isIsoDateString(input)) {
38
41
  return new Date(input)
@@ -131,19 +134,11 @@ class InternalBuilder {
131
134
  }
132
135
  if (filters.range) {
133
136
  iterate(filters.range, (key, value) => {
134
- if (value.low && value.high) {
135
- // Use a between operator if we have 2 valid range values
136
- const fnc = allOr ? "orWhereBetween" : "whereBetween"
137
- query = query[fnc](key, [value.low, value.high])
138
- } else if (value.low) {
139
- // Use just a single greater than operator if we only have a low
140
- const fnc = allOr ? "orWhere" : "where"
141
- query = query[fnc](key, ">", value.low)
142
- } else if (value.high) {
143
- // Use just a single less than operator if we only have a high
144
- const fnc = allOr ? "orWhere" : "where"
145
- query = query[fnc](key, "<", value.high)
137
+ if (!value.high || !value.low) {
138
+ return
146
139
  }
140
+ const fnc = allOr ? "orWhereBetween" : "whereBetween"
141
+ query = query[fnc](key, [value.low, value.high])
147
142
  })
148
143
  }
149
144
  if (filters.equal) {
@@ -131,9 +131,7 @@ module DynamoModule {
131
131
 
132
132
  constructor(config: DynamoDBConfig) {
133
133
  this.config = config
134
- if (!this.config.endpoint) {
135
- this.connect()
136
- }
134
+ this.connect()
137
135
  let options = {
138
136
  correctClockSkew: true,
139
137
  endpoint: config.endpoint ? config.endpoint : undefined,
@@ -10,7 +10,6 @@ const mysql = require("./mysql")
10
10
  const arangodb = require("./arangodb")
11
11
  const rest = require("./rest")
12
12
  const googlesheets = require("./googlesheets")
13
- const firebase = require("./firebase")
14
13
  const { SourceNames } = require("../definitions/datasource")
15
14
  const environment = require("../environment")
16
15
 
@@ -26,7 +25,6 @@ const DEFINITIONS = {
26
25
  [SourceNames.MYSQL]: mysql.schema,
27
26
  [SourceNames.ARANGODB]: arangodb.schema,
28
27
  [SourceNames.REST]: rest.schema,
29
- [SourceNames.FIREBASE]: firebase.schema,
30
28
  }
31
29
 
32
30
  const INTEGRATIONS = {
@@ -41,7 +39,6 @@ const INTEGRATIONS = {
41
39
  [SourceNames.MYSQL]: mysql.integration,
42
40
  [SourceNames.ARANGODB]: arangodb.integration,
43
41
  [SourceNames.REST]: rest.integration,
44
- [SourceNames.FIREBASE]: firebase.integration,
45
42
  }
46
43
 
47
44
  // optionally add oracle integration if the oracle binary can be installed
@@ -11,7 +11,6 @@ import {
11
11
  PaginationValues,
12
12
  } from "../definitions/datasource"
13
13
  import { IntegrationBase } from "./base/IntegrationBase"
14
- import { get } from "lodash"
15
14
 
16
15
  const BodyTypes = {
17
16
  NONE: "none",
@@ -164,7 +163,7 @@ module RestModule {
164
163
  // Check if a pagination cursor exists in the response
165
164
  let nextCursor = null
166
165
  if (pagination?.responseParam) {
167
- nextCursor = get(data, pagination.responseParam)
166
+ nextCursor = data?.[pagination.responseParam]
168
167
  }
169
168
 
170
169
  return {
@@ -187,55 +187,4 @@ describe("SQL query builder", () => {
187
187
  sql: `select * from (select * from \`${TABLE_NAME}\` limit ?) as \`${TABLE_NAME}\``
188
188
  })
189
189
  })
190
-
191
- it("should use greater than when only low range specified", () => {
192
- const date = new Date()
193
- const query = sql._query(generateReadJson({
194
- filters: {
195
- range: {
196
- property: {
197
- low: date,
198
- }
199
- }
200
- }
201
- }))
202
- expect(query).toEqual({
203
- bindings: [date, limit],
204
- sql: `select * from (select * from "${TABLE_NAME}" where "${TABLE_NAME}"."property" > $1 limit $2) as "${TABLE_NAME}"`
205
- })
206
- })
207
-
208
- it("should use less than when only high range specified", () => {
209
- const date = new Date()
210
- const query = sql._query(generateReadJson({
211
- filters: {
212
- range: {
213
- property: {
214
- high: date,
215
- }
216
- }
217
- }
218
- }))
219
- expect(query).toEqual({
220
- bindings: [date, limit],
221
- sql: `select * from (select * from "${TABLE_NAME}" where "${TABLE_NAME}"."property" < $1 limit $2) as "${TABLE_NAME}"`
222
- })
223
- })
224
-
225
- it("should use greater than when only low range specified", () => {
226
- const date = new Date()
227
- const query = sql._query(generateReadJson({
228
- filters: {
229
- range: {
230
- property: {
231
- low: date,
232
- }
233
- }
234
- }
235
- }))
236
- expect(query).toEqual({
237
- bindings: [date, limit],
238
- sql: `select * from (select * from "${TABLE_NAME}" where "${TABLE_NAME}"."property" > $1 limit $2) as "${TABLE_NAME}"`
239
- })
240
- })
241
190
  })
@@ -5,6 +5,7 @@ const {
5
5
  } = require("@budibase/backend-core/roles")
6
6
  const {
7
7
  PermissionTypes,
8
+ PermissionLevels,
8
9
  doesHaveBasePermission,
9
10
  } = require("@budibase/backend-core/permissions")
10
11
  const builderMiddleware = require("./builder")
@@ -64,7 +65,7 @@ const checkAuthorizedResource = async (
64
65
  }
65
66
 
66
67
  module.exports =
67
- (permType, permLevel = null) =>
68
+ (permType, permLevel = null, opts = { schema: false }) =>
68
69
  async (ctx, next) => {
69
70
  // webhooks don't need authentication, each webhook unique
70
71
  // also internal requests (between services) don't need authorized
@@ -81,15 +82,25 @@ module.exports =
81
82
  await builderMiddleware(ctx, permType)
82
83
 
83
84
  // get the resource roles
84
- let resourceRoles = []
85
+ let resourceRoles = [],
86
+ otherLevelRoles
87
+ const otherLevel =
88
+ permLevel === PermissionLevels.READ
89
+ ? PermissionLevels.WRITE
90
+ : PermissionLevels.READ
85
91
  const appId = getAppId()
86
92
  if (appId && hasResource(ctx)) {
87
93
  resourceRoles = await getRequiredResourceRole(permLevel, ctx)
94
+ if (opts && opts.schema) {
95
+ otherLevelRoles = await getRequiredResourceRole(otherLevel, ctx)
96
+ }
88
97
  }
89
98
 
90
99
  // if the resource is public, proceed
91
- const isPublicResource = resourceRoles.includes(BUILTIN_ROLE_IDS.PUBLIC)
92
- if (isPublicResource) {
100
+ if (
101
+ resourceRoles.includes(BUILTIN_ROLE_IDS.PUBLIC) ||
102
+ (otherLevelRoles && otherLevelRoles.includes(BUILTIN_ROLE_IDS.PUBLIC))
103
+ ) {
93
104
  return next()
94
105
  }
95
106
 
@@ -98,8 +109,17 @@ module.exports =
98
109
  return ctx.throw(403, "Session not authenticated")
99
110
  }
100
111
 
101
- // check authorized
102
- await checkAuthorized(ctx, resourceRoles, permType, permLevel)
112
+ try {
113
+ // check authorized
114
+ await checkAuthorized(ctx, resourceRoles, permType, permLevel)
115
+ } catch (err) {
116
+ // this is a schema, check if
117
+ if (opts && opts.schema && permLevel) {
118
+ await checkAuthorized(ctx, otherLevelRoles, permType, otherLevel)
119
+ } else {
120
+ throw err
121
+ }
122
+ }
103
123
 
104
124
  // csrf protection
105
125
  return csrf(ctx, next)