@budibase/backend-core 3.2.41 → 3.2.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +3 -3
- package/dist/src/accounts/accounts.js +83 -0
- package/dist/src/accounts/accounts.js.map +1 -0
- package/dist/src/accounts/api.js +102 -0
- package/dist/src/accounts/api.js.map +1 -0
- package/dist/src/accounts/index.js +18 -0
- package/dist/src/accounts/index.js.map +1 -0
- package/dist/src/cache/appMetadata.js +96 -0
- package/dist/src/cache/appMetadata.js.map +1 -0
- package/dist/src/cache/base/index.js +189 -0
- package/dist/src/cache/base/index.js.map +1 -0
- package/dist/src/cache/docWritethrough.js +123 -0
- package/dist/src/cache/docWritethrough.js.map +1 -0
- package/dist/src/cache/generic.js +37 -0
- package/dist/src/cache/generic.js.map +1 -0
- package/dist/src/cache/index.js +48 -0
- package/dist/src/cache/index.js.map +1 -0
- package/dist/src/cache/invite.js +128 -0
- package/dist/src/cache/invite.js.map +1 -0
- package/dist/src/cache/passwordReset.js +92 -0
- package/dist/src/cache/passwordReset.js.map +1 -0
- package/dist/src/cache/user.js +183 -0
- package/dist/src/cache/user.js.map +1 -0
- package/dist/src/cache/writethrough.js +170 -0
- package/dist/src/cache/writethrough.js.map +1 -0
- package/dist/src/configs/configs.js +294 -0
- package/dist/src/configs/configs.js.map +1 -0
- package/dist/src/configs/index.js +18 -0
- package/dist/src/configs/index.js.map +1 -0
- package/dist/src/constants/db.js +75 -0
- package/dist/src/constants/db.js.map +1 -0
- package/dist/src/constants/index.js +19 -0
- package/dist/src/constants/index.js.map +1 -0
- package/dist/src/constants/misc.js +40 -0
- package/dist/src/constants/misc.js.map +1 -0
- package/dist/src/context/Context.js +14 -0
- package/dist/src/context/Context.js.map +1 -0
- package/dist/src/context/identity.js +81 -0
- package/dist/src/context/identity.js.map +1 -0
- package/dist/src/context/index.js +44 -0
- package/dist/src/context/index.js.map +1 -0
- package/dist/src/context/mainContext.js +446 -0
- package/dist/src/context/mainContext.js.map +1 -0
- package/dist/src/context/types.js +3 -0
- package/dist/src/context/types.js.map +1 -0
- package/dist/src/db/Replication.js +90 -0
- package/dist/src/db/Replication.js.map +1 -0
- package/dist/src/db/couch/DatabaseImpl.js +475 -0
- package/dist/src/db/couch/DatabaseImpl.js.map +1 -0
- package/dist/src/db/couch/connections.js +101 -0
- package/dist/src/db/couch/connections.js.map +1 -0
- package/dist/src/db/couch/index.js +26 -0
- package/dist/src/db/couch/index.js.map +1 -0
- package/dist/src/db/couch/pouchDB.js +108 -0
- package/dist/src/db/couch/pouchDB.js.map +1 -0
- package/dist/src/db/couch/utils.js +60 -0
- package/dist/src/db/couch/utils.js.map +1 -0
- package/dist/src/db/db.js +47 -0
- package/dist/src/db/db.js.map +1 -0
- package/dist/src/db/errors.js +21 -0
- package/dist/src/db/errors.js.map +1 -0
- package/dist/src/db/index.js +58 -0
- package/dist/src/db/index.js.map +1 -0
- package/dist/src/db/instrumentation.js +202 -0
- package/dist/src/db/instrumentation.js.map +1 -0
- package/dist/src/db/lucene.js +638 -0
- package/dist/src/db/lucene.js.map +1 -0
- package/dist/src/db/searchIndexes/index.js +18 -0
- package/dist/src/db/searchIndexes/index.js.map +1 -0
- package/dist/src/db/searchIndexes/searchIndexes.js +76 -0
- package/dist/src/db/searchIndexes/searchIndexes.js.map +1 -0
- package/dist/src/db/utils.js +212 -0
- package/dist/src/db/utils.js.map +1 -0
- package/dist/src/db/views.js +224 -0
- package/dist/src/db/views.js.map +1 -0
- package/dist/src/docIds/conversions.js +62 -0
- package/dist/src/docIds/conversions.js.map +1 -0
- package/dist/src/docIds/ids.js +125 -0
- package/dist/src/docIds/ids.js.map +1 -0
- package/dist/src/docIds/index.js +19 -0
- package/dist/src/docIds/index.js.map +1 -0
- package/dist/src/docIds/newid.js +8 -0
- package/dist/src/docIds/newid.js.map +1 -0
- package/dist/src/docIds/params.js +141 -0
- package/dist/src/docIds/params.js.map +1 -0
- package/dist/src/environment.js +182 -0
- package/dist/src/environment.js.map +1 -0
- package/dist/src/errors/errors.js +97 -0
- package/dist/src/errors/errors.js.map +1 -0
- package/dist/src/errors/index.js +18 -0
- package/dist/src/errors/index.js.map +1 -0
- package/dist/src/events/analytics.js +52 -0
- package/dist/src/events/analytics.js.map +1 -0
- package/dist/src/events/asyncEvents/index.js +19 -0
- package/dist/src/events/asyncEvents/index.js.map +1 -0
- package/dist/src/events/asyncEvents/publisher.js +26 -0
- package/dist/src/events/asyncEvents/publisher.js.map +1 -0
- package/dist/src/events/asyncEvents/queue.js +26 -0
- package/dist/src/events/asyncEvents/queue.js.map +1 -0
- package/dist/src/events/backfill.js +189 -0
- package/dist/src/events/backfill.js.map +1 -0
- package/dist/src/events/events.js +87 -0
- package/dist/src/events/events.js.map +1 -0
- package/dist/src/events/identification.js +299 -0
- package/dist/src/events/identification.js.map +1 -0
- package/dist/src/events/index.js +59 -0
- package/dist/src/events/index.js.map +1 -0
- package/dist/src/events/processors/AnalyticsProcessor.js +103 -0
- package/dist/src/events/processors/AnalyticsProcessor.js.map +1 -0
- package/dist/src/events/processors/AuditLogsProcessor.js +86 -0
- package/dist/src/events/processors/AuditLogsProcessor.js.map +1 -0
- package/dist/src/events/processors/LoggingProcessor.js +47 -0
- package/dist/src/events/processors/LoggingProcessor.js.map +1 -0
- package/dist/src/events/processors/Processors.js +52 -0
- package/dist/src/events/processors/Processors.js.map +1 -0
- package/dist/src/events/processors/index.js +23 -0
- package/dist/src/events/processors/index.js.map +1 -0
- package/dist/src/events/processors/posthog/PosthogProcessor.js +147 -0
- package/dist/src/events/processors/posthog/PosthogProcessor.js.map +1 -0
- package/dist/src/events/processors/posthog/index.js +8 -0
- package/dist/src/events/processors/posthog/index.js.map +1 -0
- package/dist/src/events/processors/posthog/rateLimiting.js +129 -0
- package/dist/src/events/processors/posthog/rateLimiting.js.map +1 -0
- package/dist/src/events/processors/types.js +3 -0
- package/dist/src/events/processors/types.js.map +1 -0
- package/dist/src/events/publishers/account.js +43 -0
- package/dist/src/events/publishers/account.js.map +1 -0
- package/dist/src/events/publishers/ai.js +30 -0
- package/dist/src/events/publishers/ai.js.map +1 -0
- package/dist/src/events/publishers/app.js +166 -0
- package/dist/src/events/publishers/app.js.map +1 -0
- package/dist/src/events/publishers/auditLog.js +34 -0
- package/dist/src/events/publishers/auditLog.js.map +1 -0
- package/dist/src/events/publishers/auth.js +80 -0
- package/dist/src/events/publishers/auth.js.map +1 -0
- package/dist/src/events/publishers/automation.js +117 -0
- package/dist/src/events/publishers/automation.js.map +1 -0
- package/dist/src/events/publishers/backfill.js +85 -0
- package/dist/src/events/publishers/backfill.js.map +1 -0
- package/dist/src/events/publishers/backup.js +41 -0
- package/dist/src/events/publishers/backup.js.map +1 -0
- package/dist/src/events/publishers/datasource.js +54 -0
- package/dist/src/events/publishers/datasource.js.map +1 -0
- package/dist/src/events/publishers/email.js +30 -0
- package/dist/src/events/publishers/email.js.map +1 -0
- package/dist/src/events/publishers/environmentVariable.js +44 -0
- package/dist/src/events/publishers/environmentVariable.js.map +1 -0
- package/dist/src/events/publishers/group.js +107 -0
- package/dist/src/events/publishers/group.js.map +1 -0
- package/dist/src/events/publishers/index.js +59 -0
- package/dist/src/events/publishers/index.js.map +1 -0
- package/dist/src/events/publishers/installation.js +52 -0
- package/dist/src/events/publishers/installation.js.map +1 -0
- package/dist/src/events/publishers/layout.js +34 -0
- package/dist/src/events/publishers/layout.js.map +1 -0
- package/dist/src/events/publishers/license.js +77 -0
- package/dist/src/events/publishers/license.js.map +1 -0
- package/dist/src/events/publishers/org.js +52 -0
- package/dist/src/events/publishers/org.js.map +1 -0
- package/dist/src/events/publishers/plugin.js +55 -0
- package/dist/src/events/publishers/plugin.js.map +1 -0
- package/dist/src/events/publishers/query.js +73 -0
- package/dist/src/events/publishers/query.js.map +1 -0
- package/dist/src/events/publishers/role.js +69 -0
- package/dist/src/events/publishers/role.js.map +1 -0
- package/dist/src/events/publishers/rowAction.js +22 -0
- package/dist/src/events/publishers/rowAction.js.map +1 -0
- package/dist/src/events/publishers/rows.js +31 -0
- package/dist/src/events/publishers/rows.js.map +1 -0
- package/dist/src/events/publishers/screen.js +46 -0
- package/dist/src/events/publishers/screen.js.map +1 -0
- package/dist/src/events/publishers/serve.js +47 -0
- package/dist/src/events/publishers/serve.js.map +1 -0
- package/dist/src/events/publishers/table.js +95 -0
- package/dist/src/events/publishers/table.js.map +1 -0
- package/dist/src/events/publishers/user.js +201 -0
- package/dist/src/events/publishers/user.js.map +1 -0
- package/dist/src/events/publishers/view.js +123 -0
- package/dist/src/events/publishers/view.js.map +1 -0
- package/dist/src/helpers.js +13 -0
- package/dist/src/helpers.js.map +1 -0
- package/dist/src/installation.js +159 -0
- package/dist/src/installation.js.map +1 -0
- package/dist/src/logging/alerts.js +23 -0
- package/dist/src/logging/alerts.js.map +1 -0
- package/dist/src/logging/correlation/correlation.js +18 -0
- package/dist/src/logging/correlation/correlation.js.map +1 -0
- package/dist/src/logging/correlation/index.js +18 -0
- package/dist/src/logging/correlation/index.js.map +1 -0
- package/dist/src/logging/index.js +45 -0
- package/dist/src/logging/index.js.map +1 -0
- package/dist/src/logging/pino/logger.js +234 -0
- package/dist/src/logging/pino/logger.js.map +1 -0
- package/dist/src/logging/system.js +110 -0
- package/dist/src/logging/system.js.map +1 -0
- package/dist/src/objectStore/buckets/app.js +95 -0
- package/dist/src/objectStore/buckets/app.js.map +1 -0
- package/dist/src/objectStore/buckets/global.js +68 -0
- package/dist/src/objectStore/buckets/global.js.map +1 -0
- package/dist/src/objectStore/buckets/index.js +20 -0
- package/dist/src/objectStore/buckets/index.js.map +1 -0
- package/dist/src/objectStore/buckets/plugins.js +104 -0
- package/dist/src/objectStore/buckets/plugins.js.map +1 -0
- package/dist/src/objectStore/cloudfront.js +73 -0
- package/dist/src/objectStore/cloudfront.js.map +1 -0
- package/dist/src/objectStore/index.js +20 -0
- package/dist/src/objectStore/index.js.map +1 -0
- package/dist/src/objectStore/objectStore.js +509 -0
- package/dist/src/objectStore/objectStore.js.map +1 -0
- package/dist/src/objectStore/utils.js +148 -0
- package/dist/src/objectStore/utils.js.map +1 -0
- package/dist/src/platform/index.js +43 -0
- package/dist/src/platform/index.js.map +1 -0
- package/dist/src/platform/platformDb.js +9 -0
- package/dist/src/platform/platformDb.js.map +1 -0
- package/dist/src/platform/tenants.js +149 -0
- package/dist/src/platform/tenants.js.map +1 -0
- package/dist/src/platform/users.js +118 -0
- package/dist/src/platform/users.js.map +1 -0
- package/dist/src/queue/constants.js +13 -0
- package/dist/src/queue/constants.js.map +1 -0
- package/dist/src/queue/inMemoryQueue.js +192 -0
- package/dist/src/queue/inMemoryQueue.js.map +1 -0
- package/dist/src/queue/index.js +19 -0
- package/dist/src/queue/index.js.map +1 -0
- package/dist/src/queue/listeners.js +199 -0
- package/dist/src/queue/listeners.js.map +1 -0
- package/dist/src/queue/queue.js +124 -0
- package/dist/src/queue/queue.js.map +1 -0
- package/dist/src/redis/index.js +47 -0
- package/dist/src/redis/index.js.map +1 -0
- package/dist/src/redis/init.js +184 -0
- package/dist/src/redis/init.js.map +1 -0
- package/dist/src/redis/redis.js +396 -0
- package/dist/src/redis/redis.js.map +1 -0
- package/dist/src/redis/redlockImpl.js +181 -0
- package/dist/src/redis/redlockImpl.js.map +1 -0
- package/dist/src/redis/utils.js +131 -0
- package/dist/src/redis/utils.js.map +1 -0
- package/dist/src/security/auth.js +26 -0
- package/dist/src/security/auth.js.map +1 -0
- package/dist/src/security/index.js +18 -0
- package/dist/src/security/index.js.map +1 -0
- package/dist/src/security/roles.js +566 -0
- package/dist/src/security/roles.js.map +1 -0
- package/dist/src/security/sessions.js +156 -0
- package/dist/src/security/sessions.js.map +1 -0
- package/dist/src/sql/utils.js +180 -0
- package/dist/src/sql/utils.js.map +1 -0
- package/dist/src/tenancy/db.js +9 -0
- package/dist/src/tenancy/db.js.map +1 -0
- package/dist/src/tenancy/index.js +19 -0
- package/dist/src/tenancy/index.js.map +1 -0
- package/dist/src/tenancy/tenancy.js +125 -0
- package/dist/src/tenancy/tenancy.js.map +1 -0
- package/dist/src/timers/index.js +18 -0
- package/dist/src/timers/index.js.map +1 -0
- package/dist/src/timers/timers.js +25 -0
- package/dist/src/timers/timers.js.map +1 -0
- package/dist/src/users/db.js +489 -0
- package/dist/src/users/db.js.map +1 -0
- package/dist/src/users/events.js +179 -0
- package/dist/src/users/events.js.map +1 -0
- package/dist/src/users/index.js +23 -0
- package/dist/src/users/index.js.map +1 -0
- package/dist/src/users/lookup.js +126 -0
- package/dist/src/users/lookup.js.map +1 -0
- package/dist/src/users/users.js +376 -0
- package/dist/src/users/users.js.map +1 -0
- package/dist/src/users/utils.js +127 -0
- package/dist/src/users/utils.js.map +1 -0
- package/dist/src/utils/Duration.js +54 -0
- package/dist/src/utils/Duration.js.map +1 -0
- package/dist/src/utils/hashing.js +46 -0
- package/dist/src/utils/hashing.js.map +1 -0
- package/dist/src/utils/index.js +21 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/stringUtils.js +8 -0
- package/dist/src/utils/stringUtils.js.map +1 -0
- package/dist/src/utils/utils.js +267 -0
- package/dist/src/utils/utils.js.map +1 -0
- package/dist/tests/core/logging.js +33 -0
- package/dist/tests/core/logging.js.map +1 -0
- package/dist/tests/core/utilities/index.js +48 -0
- package/dist/tests/core/utilities/index.js.map +1 -0
- package/dist/tests/core/utilities/jestUtils.js +21 -0
- package/dist/tests/core/utilities/jestUtils.js.map +1 -0
- package/dist/tests/core/utilities/mocks/alerts.js +40 -0
- package/dist/tests/core/utilities/mocks/alerts.js.map +1 -0
- package/dist/tests/core/utilities/mocks/date.js +6 -0
- package/dist/tests/core/utilities/mocks/date.js.map +1 -0
- package/dist/tests/core/utilities/mocks/events.js +155 -0
- package/dist/tests/core/utilities/mocks/events.js.map +1 -0
- package/dist/tests/core/utilities/mocks/index.js +47 -0
- package/dist/tests/core/utilities/mocks/index.js.map +1 -0
- package/dist/tests/core/utilities/mocks/licenses.js +109 -0
- package/dist/tests/core/utilities/mocks/licenses.js.map +1 -0
- package/dist/tests/core/utilities/queue.js +21 -0
- package/dist/tests/core/utilities/queue.js.map +1 -0
- package/dist/tests/core/utilities/structures/Chance.js +21 -0
- package/dist/tests/core/utilities/structures/Chance.js.map +1 -0
- package/dist/tests/core/utilities/structures/accounts.js +43 -0
- package/dist/tests/core/utilities/structures/accounts.js.map +1 -0
- package/dist/tests/core/utilities/structures/apps.js +23 -0
- package/dist/tests/core/utilities/structures/apps.js.map +1 -0
- package/dist/tests/core/utilities/structures/common.js +11 -0
- package/dist/tests/core/utilities/structures/common.js.map +1 -0
- package/dist/tests/core/utilities/structures/db.js +15 -0
- package/dist/tests/core/utilities/structures/db.js.map +1 -0
- package/dist/tests/core/utilities/structures/documents/index.js +18 -0
- package/dist/tests/core/utilities/structures/documents/index.js.map +1 -0
- package/dist/tests/core/utilities/structures/documents/platform/index.js +38 -0
- package/dist/tests/core/utilities/structures/documents/platform/index.js.map +1 -0
- package/dist/tests/core/utilities/structures/documents/platform/installation.js +47 -0
- package/dist/tests/core/utilities/structures/documents/platform/installation.js.map +1 -0
- package/dist/tests/core/utilities/structures/generator.js +9 -0
- package/dist/tests/core/utilities/structures/generator.js.map +1 -0
- package/dist/tests/core/utilities/structures/index.js +56 -0
- package/dist/tests/core/utilities/structures/index.js.map +1 -0
- package/dist/tests/core/utilities/structures/koa.js +10 -0
- package/dist/tests/core/utilities/structures/koa.js.map +1 -0
- package/dist/tests/core/utilities/structures/licenses.js +157 -0
- package/dist/tests/core/utilities/structures/licenses.js.map +1 -0
- package/dist/tests/core/utilities/structures/plugins.js +22 -0
- package/dist/tests/core/utilities/structures/plugins.js.map +1 -0
- package/dist/tests/core/utilities/structures/quotas.js +73 -0
- package/dist/tests/core/utilities/structures/quotas.js.map +1 -0
- package/dist/tests/core/utilities/structures/scim.js +62 -0
- package/dist/tests/core/utilities/structures/scim.js.map +1 -0
- package/dist/tests/core/utilities/structures/sso.js +140 -0
- package/dist/tests/core/utilities/structures/sso.js.map +1 -0
- package/dist/tests/core/utilities/structures/tenants.js +8 -0
- package/dist/tests/core/utilities/structures/tenants.js.map +1 -0
- package/dist/tests/core/utilities/structures/userGroups.js +12 -0
- package/dist/tests/core/utilities/structures/userGroups.js.map +1 -0
- package/dist/tests/core/utilities/structures/users.js +53 -0
- package/dist/tests/core/utilities/structures/users.js.map +1 -0
- package/dist/tests/core/utilities/testContainerUtils.js +161 -0
- package/dist/tests/core/utilities/testContainerUtils.js.map +1 -0
- package/dist/tests/core/utilities/utils/index.js +39 -0
- package/dist/tests/core/utilities/utils/index.js.map +1 -0
- package/dist/tests/core/utilities/utils/queue.js +37 -0
- package/dist/tests/core/utilities/utils/queue.js.map +1 -0
- package/dist/tests/core/utilities/utils/time.js +7 -0
- package/dist/tests/core/utilities/utils/time.js.map +1 -0
- package/dist/tests/extra/DBTestConfiguration.js +65 -0
- package/dist/tests/extra/DBTestConfiguration.js.map +1 -0
- package/dist/tests/extra/index.js +43 -0
- package/dist/tests/extra/index.js.map +1 -0
- package/dist/tests/extra/testEnv.js +136 -0
- package/dist/tests/extra/testEnv.js.map +1 -0
- package/dist/tests/index.js +19 -0
- package/dist/tests/index.js.map +1 -0
- package/dist/tests/jestEnv.js +12 -0
- package/dist/tests/jestEnv.js.map +1 -0
- package/dist/tests/jestSetup.js +33 -0
- package/dist/tests/jestSetup.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,566 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.AccessController = exports.RoleHierarchyTraversal = exports.Role = exports.RoleIDVersion = exports.BUILTIN_ROLE_IDS = void 0;
|
|
16
|
+
exports.getBuiltinRoles = getBuiltinRoles;
|
|
17
|
+
exports.isBuiltin = isBuiltin;
|
|
18
|
+
exports.prefixRoleIDNoBuiltin = prefixRoleIDNoBuiltin;
|
|
19
|
+
exports.getBuiltinRole = getBuiltinRole;
|
|
20
|
+
exports.validInherits = validInherits;
|
|
21
|
+
exports.builtinRoleToNumber = builtinRoleToNumber;
|
|
22
|
+
exports.roleToNumber = roleToNumber;
|
|
23
|
+
exports.lowerBuiltinRoleID = lowerBuiltinRoleID;
|
|
24
|
+
exports.roleIDsAreEqual = roleIDsAreEqual;
|
|
25
|
+
exports.externalRole = externalRole;
|
|
26
|
+
exports.findRole = findRole;
|
|
27
|
+
exports.getRole = getRole;
|
|
28
|
+
exports.saveRoles = saveRoles;
|
|
29
|
+
exports.getUserRoleIdHierarchy = getUserRoleIdHierarchy;
|
|
30
|
+
exports.getUserRoleHierarchy = getUserRoleHierarchy;
|
|
31
|
+
exports.checkForRoleResourceArray = checkForRoleResourceArray;
|
|
32
|
+
exports.getAllRoleIds = getAllRoleIds;
|
|
33
|
+
exports.getAllRoles = getAllRoles;
|
|
34
|
+
exports.getDBRoleID = getDBRoleID;
|
|
35
|
+
exports.getExternalRoleID = getExternalRoleID;
|
|
36
|
+
exports.getExternalRoleIDs = getExternalRoleIDs;
|
|
37
|
+
const semver_1 = __importDefault(require("semver"));
|
|
38
|
+
const db_1 = require("../db");
|
|
39
|
+
const context_1 = require("../context");
|
|
40
|
+
const types_1 = require("@budibase/types");
|
|
41
|
+
const cloneDeep_1 = __importDefault(require("lodash/fp/cloneDeep"));
|
|
42
|
+
const shared_core_1 = require("@budibase/shared-core");
|
|
43
|
+
const lodash_1 = require("lodash");
|
|
44
|
+
const environment_1 = __importDefault(require("../environment"));
|
|
45
|
+
exports.BUILTIN_ROLE_IDS = {
|
|
46
|
+
ADMIN: "ADMIN",
|
|
47
|
+
POWER: "POWER",
|
|
48
|
+
BASIC: "BASIC",
|
|
49
|
+
PUBLIC: "PUBLIC",
|
|
50
|
+
};
|
|
51
|
+
const BUILTIN_IDS = Object.assign(Object.assign({}, exports.BUILTIN_ROLE_IDS), { BUILDER: "BUILDER" });
|
|
52
|
+
exports.RoleIDVersion = {
|
|
53
|
+
// original version, with a UUID based ID
|
|
54
|
+
UUID: undefined,
|
|
55
|
+
// new version - with name based ID
|
|
56
|
+
NAME: "name",
|
|
57
|
+
};
|
|
58
|
+
function rolesInList(roleIds, ids) {
|
|
59
|
+
if (Array.isArray(ids)) {
|
|
60
|
+
return ids.filter(id => roleIds.includes(id)).length === ids.length;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
return roleIds.includes(ids);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
class Role {
|
|
67
|
+
constructor(id, name, permissionId, uiMetadata) {
|
|
68
|
+
this.permissions = {};
|
|
69
|
+
this._id = id;
|
|
70
|
+
this.name = name;
|
|
71
|
+
this.uiMetadata = uiMetadata;
|
|
72
|
+
this.permissionId = permissionId;
|
|
73
|
+
// version for managing the ID - removing the role_ when responding
|
|
74
|
+
this.version = exports.RoleIDVersion.NAME;
|
|
75
|
+
}
|
|
76
|
+
addInheritance(inherits) {
|
|
77
|
+
// make sure IDs are correct format
|
|
78
|
+
if (inherits && typeof inherits === "string") {
|
|
79
|
+
inherits = prefixRoleIDNoBuiltin(inherits);
|
|
80
|
+
}
|
|
81
|
+
else if (inherits && Array.isArray(inherits)) {
|
|
82
|
+
inherits = inherits.map(prefixRoleIDNoBuiltin);
|
|
83
|
+
}
|
|
84
|
+
this.inherits = inherits;
|
|
85
|
+
return this;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.Role = Role;
|
|
89
|
+
class RoleHierarchyTraversal {
|
|
90
|
+
constructor(allRoles, opts) {
|
|
91
|
+
this.allRoles = allRoles;
|
|
92
|
+
this.opts = opts;
|
|
93
|
+
}
|
|
94
|
+
walk(role) {
|
|
95
|
+
const opts = this.opts, allRoles = this.allRoles;
|
|
96
|
+
// this will be a full walked list of roles - which may contain duplicates
|
|
97
|
+
let roleList = [];
|
|
98
|
+
if (!role || !role._id) {
|
|
99
|
+
return roleList;
|
|
100
|
+
}
|
|
101
|
+
roleList.push(role);
|
|
102
|
+
if (Array.isArray(role.inherits)) {
|
|
103
|
+
for (let roleId of role.inherits) {
|
|
104
|
+
const foundRole = findRole(roleId, allRoles, opts);
|
|
105
|
+
if (foundRole) {
|
|
106
|
+
roleList = roleList.concat(this.walk(foundRole));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
const foundRoleIds = [];
|
|
112
|
+
let currentRole = role;
|
|
113
|
+
while (currentRole &&
|
|
114
|
+
currentRole.inherits &&
|
|
115
|
+
!rolesInList(foundRoleIds, currentRole.inherits)) {
|
|
116
|
+
if (Array.isArray(currentRole.inherits)) {
|
|
117
|
+
return roleList.concat(this.walk(currentRole));
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
foundRoleIds.push(currentRole.inherits);
|
|
121
|
+
currentRole = findRole(currentRole.inherits, allRoles, opts);
|
|
122
|
+
if (currentRole) {
|
|
123
|
+
roleList.push(currentRole);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// loop now found - stop iterating
|
|
127
|
+
if (shared_core_1.helpers.roles.checkForRoleInheritanceLoops(roleList)) {
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return (0, lodash_1.uniqBy)(roleList, role => role._id);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.RoleHierarchyTraversal = RoleHierarchyTraversal;
|
|
136
|
+
const BUILTIN_ROLES = {
|
|
137
|
+
ADMIN: new Role(BUILTIN_IDS.ADMIN, BUILTIN_IDS.ADMIN, types_1.BuiltinPermissionID.ADMIN, {
|
|
138
|
+
displayName: "App admin",
|
|
139
|
+
description: "Can do everything",
|
|
140
|
+
color: shared_core_1.RoleColor.ADMIN,
|
|
141
|
+
}).addInheritance(BUILTIN_IDS.POWER),
|
|
142
|
+
POWER: new Role(BUILTIN_IDS.POWER, BUILTIN_IDS.POWER, types_1.BuiltinPermissionID.POWER, {
|
|
143
|
+
displayName: "App power user",
|
|
144
|
+
description: "An app user with more access",
|
|
145
|
+
color: shared_core_1.RoleColor.POWER,
|
|
146
|
+
}).addInheritance(BUILTIN_IDS.BASIC),
|
|
147
|
+
BASIC: new Role(BUILTIN_IDS.BASIC, BUILTIN_IDS.BASIC, types_1.BuiltinPermissionID.WRITE, {
|
|
148
|
+
displayName: "App user",
|
|
149
|
+
description: "Any logged in user",
|
|
150
|
+
color: shared_core_1.RoleColor.BASIC,
|
|
151
|
+
}).addInheritance(BUILTIN_IDS.PUBLIC),
|
|
152
|
+
PUBLIC: new Role(BUILTIN_IDS.PUBLIC, BUILTIN_IDS.PUBLIC, types_1.BuiltinPermissionID.PUBLIC, {
|
|
153
|
+
displayName: "Public user",
|
|
154
|
+
description: "Accessible to anyone",
|
|
155
|
+
color: shared_core_1.RoleColor.PUBLIC,
|
|
156
|
+
}),
|
|
157
|
+
BUILDER: new Role(BUILTIN_IDS.BUILDER, BUILTIN_IDS.BUILDER, types_1.BuiltinPermissionID.ADMIN, {
|
|
158
|
+
displayName: "Builder user",
|
|
159
|
+
description: "Users that can edit this app",
|
|
160
|
+
color: shared_core_1.RoleColor.BUILDER,
|
|
161
|
+
}),
|
|
162
|
+
};
|
|
163
|
+
function getBuiltinRoles() {
|
|
164
|
+
return (0, cloneDeep_1.default)(BUILTIN_ROLES);
|
|
165
|
+
}
|
|
166
|
+
function isBuiltin(role) {
|
|
167
|
+
return Object.values(exports.BUILTIN_ROLE_IDS).includes(role);
|
|
168
|
+
}
|
|
169
|
+
function prefixRoleIDNoBuiltin(roleId) {
|
|
170
|
+
if (isBuiltin(roleId)) {
|
|
171
|
+
return roleId;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
return (0, db_1.prefixRoleID)(roleId);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function getBuiltinRole(roleId) {
|
|
178
|
+
const role = Object.values(BUILTIN_ROLES).find(role => roleId.includes(role._id));
|
|
179
|
+
if (!role) {
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
return (0, cloneDeep_1.default)(role);
|
|
183
|
+
}
|
|
184
|
+
function validInherits(allRoles, inherits) {
|
|
185
|
+
if (!inherits) {
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
const find = (id) => allRoles.find(r => roleIDsAreEqual(r._id, id));
|
|
189
|
+
if (Array.isArray(inherits)) {
|
|
190
|
+
const filtered = inherits.filter(roleId => find(roleId));
|
|
191
|
+
return inherits.length !== 0 && filtered.length === inherits.length;
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
return !!find(inherits);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Works through the inheritance ranks to see how far up the builtin stack this ID is.
|
|
199
|
+
*/
|
|
200
|
+
function builtinRoleToNumber(id) {
|
|
201
|
+
const builtins = getBuiltinRoles();
|
|
202
|
+
const MAX = Object.values(builtins).length + 1;
|
|
203
|
+
if (roleIDsAreEqual(id, BUILTIN_IDS.ADMIN) ||
|
|
204
|
+
roleIDsAreEqual(id, BUILTIN_IDS.BUILDER)) {
|
|
205
|
+
return MAX;
|
|
206
|
+
}
|
|
207
|
+
let role = builtins[id], count = 0;
|
|
208
|
+
do {
|
|
209
|
+
if (!role) {
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
if (Array.isArray(role.inherits)) {
|
|
213
|
+
throw new Error("Built-in roles don't support multi-inheritance");
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
role = builtins[role.inherits];
|
|
217
|
+
}
|
|
218
|
+
count++;
|
|
219
|
+
} while (role !== null);
|
|
220
|
+
return count;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Converts any role to a number, but has to be async to get the roles from db.
|
|
224
|
+
*/
|
|
225
|
+
function roleToNumber(id) {
|
|
226
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
227
|
+
if (isBuiltin(id)) {
|
|
228
|
+
return builtinRoleToNumber(id);
|
|
229
|
+
}
|
|
230
|
+
const hierarchy = (yield getUserRoleHierarchy(id, {
|
|
231
|
+
defaultPublic: true,
|
|
232
|
+
}));
|
|
233
|
+
const findNumber = (role) => {
|
|
234
|
+
if (!role.inherits) {
|
|
235
|
+
return 0;
|
|
236
|
+
}
|
|
237
|
+
if (Array.isArray(role.inherits)) {
|
|
238
|
+
// find the built-in roles, get their number, sort it, then get the last one
|
|
239
|
+
const highestBuiltin = role.inherits
|
|
240
|
+
.map(roleId => {
|
|
241
|
+
const foundRole = hierarchy.find(role => roleIDsAreEqual(role._id, roleId));
|
|
242
|
+
if (foundRole) {
|
|
243
|
+
return findNumber(foundRole) + 1;
|
|
244
|
+
}
|
|
245
|
+
})
|
|
246
|
+
.filter(number => number)
|
|
247
|
+
.sort()
|
|
248
|
+
.pop();
|
|
249
|
+
if (highestBuiltin != undefined) {
|
|
250
|
+
return highestBuiltin;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
else if (isBuiltin(role.inherits)) {
|
|
254
|
+
return builtinRoleToNumber(role.inherits) + 1;
|
|
255
|
+
}
|
|
256
|
+
return 0;
|
|
257
|
+
};
|
|
258
|
+
return Math.max(...hierarchy.map(findNumber));
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Returns whichever builtin roleID is lower.
|
|
263
|
+
*/
|
|
264
|
+
function lowerBuiltinRoleID(roleId1, roleId2) {
|
|
265
|
+
if (!roleId1) {
|
|
266
|
+
return roleId2;
|
|
267
|
+
}
|
|
268
|
+
if (!roleId2) {
|
|
269
|
+
return roleId1;
|
|
270
|
+
}
|
|
271
|
+
return builtinRoleToNumber(roleId1) > builtinRoleToNumber(roleId2)
|
|
272
|
+
? roleId2
|
|
273
|
+
: roleId1;
|
|
274
|
+
}
|
|
275
|
+
function roleIDsAreEqual(roleId1, roleId2) {
|
|
276
|
+
// make sure both role IDs are prefixed correctly
|
|
277
|
+
return (0, db_1.prefixRoleID)(roleId1) === (0, db_1.prefixRoleID)(roleId2);
|
|
278
|
+
}
|
|
279
|
+
function externalRole(role) {
|
|
280
|
+
let _id;
|
|
281
|
+
if (role._id) {
|
|
282
|
+
_id = getExternalRoleID(role._id);
|
|
283
|
+
}
|
|
284
|
+
return Object.assign(Object.assign({}, role), { _id, inherits: getExternalRoleIDs(role.inherits, role.version) });
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Given a list of roles, this will pick the role out, accounting for built ins.
|
|
288
|
+
*/
|
|
289
|
+
function findRole(roleId, roles, opts) {
|
|
290
|
+
// built in roles mostly come from the in-code implementation,
|
|
291
|
+
// but can be extended by a doc stored about them (e.g. permissions)
|
|
292
|
+
let role = getBuiltinRole(roleId);
|
|
293
|
+
if (!role) {
|
|
294
|
+
// make sure has the prefix (if it has it then it won't be added)
|
|
295
|
+
roleId = (0, db_1.prefixRoleID)(roleId);
|
|
296
|
+
}
|
|
297
|
+
const dbRole = roles.find(role => role._id && roleIDsAreEqual(role._id, roleId));
|
|
298
|
+
if (!dbRole && !isBuiltin(roleId) && (opts === null || opts === void 0 ? void 0 : opts.defaultPublic)) {
|
|
299
|
+
return (0, cloneDeep_1.default)(BUILTIN_ROLES.PUBLIC);
|
|
300
|
+
}
|
|
301
|
+
// combine the roles
|
|
302
|
+
role = Object.assign(role || {}, dbRole);
|
|
303
|
+
// finalise the ID
|
|
304
|
+
if (role === null || role === void 0 ? void 0 : role._id) {
|
|
305
|
+
role._id = getExternalRoleID(role._id, role.version);
|
|
306
|
+
}
|
|
307
|
+
return Object.keys(role).length === 0 ? undefined : role;
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Gets the role object, this is mainly useful for two purposes, to check if the level exists and
|
|
311
|
+
* to check if the role inherits any others.
|
|
312
|
+
* @param roleId The level ID to lookup.
|
|
313
|
+
* @param opts options for the function, like whether to halt errors, instead return public.
|
|
314
|
+
* @returns The role object, which may contain an "inherits" property.
|
|
315
|
+
*/
|
|
316
|
+
function getRole(roleId, opts) {
|
|
317
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
318
|
+
const db = (0, context_1.getAppDB)();
|
|
319
|
+
const roleList = [];
|
|
320
|
+
if (!isBuiltin(roleId)) {
|
|
321
|
+
const role = yield db.tryGet(getDBRoleID(roleId));
|
|
322
|
+
if (role) {
|
|
323
|
+
roleList.push(role);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
return findRole(roleId, roleList, opts);
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
function saveRoles(roles) {
|
|
330
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
331
|
+
const db = (0, context_1.getAppDB)();
|
|
332
|
+
yield db.bulkDocs(roles
|
|
333
|
+
.filter(role => role._id)
|
|
334
|
+
.map(role => (Object.assign(Object.assign({}, role), { _id: (0, db_1.prefixRoleID)(role._id) }))));
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Simple function to get all the roles based on the top level user role ID.
|
|
339
|
+
*/
|
|
340
|
+
function getAllUserRoles(userRoleId, opts) {
|
|
341
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
342
|
+
const allRoles = yield getAllRoles();
|
|
343
|
+
// admins have access to all roles
|
|
344
|
+
if (roleIDsAreEqual(userRoleId, BUILTIN_IDS.ADMIN)) {
|
|
345
|
+
return allRoles;
|
|
346
|
+
}
|
|
347
|
+
// get all the inherited roles
|
|
348
|
+
const foundRole = findRole(userRoleId, allRoles, opts);
|
|
349
|
+
let roles = [];
|
|
350
|
+
if (foundRole) {
|
|
351
|
+
const traversal = new RoleHierarchyTraversal(allRoles, opts);
|
|
352
|
+
roles = traversal.walk(foundRole);
|
|
353
|
+
}
|
|
354
|
+
return roles;
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
function getUserRoleIdHierarchy(userRoleId) {
|
|
358
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
359
|
+
const roles = yield getUserRoleHierarchy(userRoleId);
|
|
360
|
+
return roles.map(role => role._id);
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Returns an ordered array of the user's inherited role IDs, this can be used
|
|
365
|
+
* to determine if a user can access something that requires a specific role.
|
|
366
|
+
* @param userRoleId The user's role ID, this can be found in their access token.
|
|
367
|
+
* @param opts optional - if want to default to public use this.
|
|
368
|
+
* @returns returns an ordered array of the roles, with the first being their
|
|
369
|
+
* highest level of access and the last being the lowest level.
|
|
370
|
+
*/
|
|
371
|
+
function getUserRoleHierarchy(userRoleId, opts) {
|
|
372
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
373
|
+
// special case, if they don't have a role then they are a public user
|
|
374
|
+
return getAllUserRoles(userRoleId, opts);
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
// this function checks that the provided permissions are in an array format
|
|
378
|
+
// some templates/older apps will use a simple string instead of array for roles
|
|
379
|
+
// convert the string to an array using the theory that write is higher than read
|
|
380
|
+
function checkForRoleResourceArray(rolePerms, resourceId) {
|
|
381
|
+
if (rolePerms && !Array.isArray(rolePerms[resourceId])) {
|
|
382
|
+
const permLevel = rolePerms[resourceId];
|
|
383
|
+
rolePerms[resourceId] = [permLevel];
|
|
384
|
+
if (permLevel === types_1.PermissionLevel.WRITE) {
|
|
385
|
+
rolePerms[resourceId].push(types_1.PermissionLevel.READ);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
return rolePerms;
|
|
389
|
+
}
|
|
390
|
+
function getAllRoleIds(appId) {
|
|
391
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
392
|
+
const roles = yield getAllRoles(appId);
|
|
393
|
+
return roles.map(role => role._id);
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Given an app ID this will retrieve all of the roles that are currently within that app.
|
|
398
|
+
* @return An array of the role objects that were found.
|
|
399
|
+
*/
|
|
400
|
+
function getAllRoles(appId) {
|
|
401
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
402
|
+
if (appId) {
|
|
403
|
+
return (0, db_1.doWithDB)(appId, internal);
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
let appDB;
|
|
407
|
+
try {
|
|
408
|
+
appDB = (0, context_1.getAppDB)();
|
|
409
|
+
}
|
|
410
|
+
catch (error) {
|
|
411
|
+
// We don't have any apps, so we'll just use the built-in roles
|
|
412
|
+
}
|
|
413
|
+
return internal(appDB);
|
|
414
|
+
}
|
|
415
|
+
function internal(db) {
|
|
416
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
417
|
+
let roles = [];
|
|
418
|
+
if (db) {
|
|
419
|
+
const body = yield db.allDocs((0, db_1.getRoleParams)(null, {
|
|
420
|
+
include_docs: true,
|
|
421
|
+
}));
|
|
422
|
+
roles = body.rows.map((row) => row.doc);
|
|
423
|
+
roles.forEach(role => (role._id = getExternalRoleID(role._id, role.version)));
|
|
424
|
+
}
|
|
425
|
+
const builtinRoles = getBuiltinRoles();
|
|
426
|
+
// exclude internal roles like builder
|
|
427
|
+
let externalBuiltinRoles = [];
|
|
428
|
+
if (!db || (yield shouldIncludePowerRole(db))) {
|
|
429
|
+
externalBuiltinRoles = [
|
|
430
|
+
BUILTIN_IDS.ADMIN,
|
|
431
|
+
BUILTIN_IDS.POWER,
|
|
432
|
+
BUILTIN_IDS.BASIC,
|
|
433
|
+
BUILTIN_IDS.PUBLIC,
|
|
434
|
+
];
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
externalBuiltinRoles = [
|
|
438
|
+
BUILTIN_IDS.ADMIN,
|
|
439
|
+
BUILTIN_IDS.BASIC,
|
|
440
|
+
BUILTIN_IDS.PUBLIC,
|
|
441
|
+
];
|
|
442
|
+
}
|
|
443
|
+
// need to combine builtin with any DB record of them (for sake of permissions)
|
|
444
|
+
for (let builtinRoleId of externalBuiltinRoles) {
|
|
445
|
+
const builtinRole = builtinRoles[builtinRoleId];
|
|
446
|
+
const dbBuiltin = roles.filter(dbRole => roleIDsAreEqual(dbRole._id, builtinRoleId))[0];
|
|
447
|
+
if (dbBuiltin == null) {
|
|
448
|
+
roles.push(builtinRole || builtinRoles.BASIC);
|
|
449
|
+
}
|
|
450
|
+
else {
|
|
451
|
+
// remove role and all back after combining with the builtin
|
|
452
|
+
roles = roles.filter(role => role._id !== dbBuiltin._id);
|
|
453
|
+
dbBuiltin._id = getExternalRoleID(builtinRole._id, dbBuiltin.version);
|
|
454
|
+
roles.push(Object.assign(Object.assign(Object.assign({}, builtinRole), dbBuiltin), { name: builtinRole.name, _id: getExternalRoleID(builtinRole._id, builtinRole.version) }));
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
// check permissions
|
|
458
|
+
for (let role of roles) {
|
|
459
|
+
if (!role.permissions) {
|
|
460
|
+
continue;
|
|
461
|
+
}
|
|
462
|
+
for (let resourceId of Object.keys(role.permissions)) {
|
|
463
|
+
role.permissions = checkForRoleResourceArray(role.permissions, resourceId);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
return roles;
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
function shouldIncludePowerRole(db) {
|
|
472
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
473
|
+
const app = yield db.tryGet(db_1.DocumentType.APP_METADATA);
|
|
474
|
+
const creationVersion = app === null || app === void 0 ? void 0 : app.creationVersion;
|
|
475
|
+
if (!creationVersion || !semver_1.default.valid(creationVersion)) {
|
|
476
|
+
// Old apps don't have creationVersion, so we should include it for backward compatibility
|
|
477
|
+
return true;
|
|
478
|
+
}
|
|
479
|
+
const isGreaterThan3x = semver_1.default.gte(creationVersion, environment_1.default.MIN_VERSION_WITHOUT_POWER_ROLE);
|
|
480
|
+
return !isGreaterThan3x;
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
class AccessController {
|
|
484
|
+
constructor() {
|
|
485
|
+
this.userHierarchies = {};
|
|
486
|
+
}
|
|
487
|
+
hasAccess(tryingRoleId, userRoleId) {
|
|
488
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
489
|
+
// special cases, the screen has no role, the roles are the same or the user
|
|
490
|
+
// is currently in the builder
|
|
491
|
+
if (tryingRoleId == null ||
|
|
492
|
+
tryingRoleId === "" ||
|
|
493
|
+
roleIDsAreEqual(tryingRoleId, BUILTIN_IDS.BUILDER) ||
|
|
494
|
+
roleIDsAreEqual(userRoleId, tryingRoleId) ||
|
|
495
|
+
roleIDsAreEqual(userRoleId, BUILTIN_IDS.BUILDER)) {
|
|
496
|
+
return true;
|
|
497
|
+
}
|
|
498
|
+
let roleIds = userRoleId ? this.userHierarchies[userRoleId] : null;
|
|
499
|
+
if (!roleIds && userRoleId) {
|
|
500
|
+
roleIds = yield getUserRoleIdHierarchy(userRoleId);
|
|
501
|
+
this.userHierarchies[userRoleId] = roleIds;
|
|
502
|
+
}
|
|
503
|
+
return ((roleIds === null || roleIds === void 0 ? void 0 : roleIds.find(roleId => roleIDsAreEqual(roleId, tryingRoleId))) !==
|
|
504
|
+
undefined);
|
|
505
|
+
});
|
|
506
|
+
}
|
|
507
|
+
checkScreensAccess(screens, userRoleId) {
|
|
508
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
509
|
+
let accessibleScreens = [];
|
|
510
|
+
// don't want to handle this with Promise.all as this would mean all custom roles would be
|
|
511
|
+
// retrieved at same time, it is likely a custom role will be re-used and therefore want
|
|
512
|
+
// to work in sync for performance save
|
|
513
|
+
for (let screen of screens) {
|
|
514
|
+
const accessible = yield this.checkScreenAccess(screen, userRoleId);
|
|
515
|
+
if (accessible) {
|
|
516
|
+
accessibleScreens.push(accessible);
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
return accessibleScreens;
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
checkScreenAccess(screen, userRoleId) {
|
|
523
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
524
|
+
const roleId = screen && screen.routing ? screen.routing.roleId : undefined;
|
|
525
|
+
if (yield this.hasAccess(roleId, userRoleId)) {
|
|
526
|
+
return screen;
|
|
527
|
+
}
|
|
528
|
+
return null;
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
exports.AccessController = AccessController;
|
|
533
|
+
/**
|
|
534
|
+
* Adds the "role_" for builtin role IDs which are to be written to the DB (for permissions).
|
|
535
|
+
*/
|
|
536
|
+
function getDBRoleID(roleName) {
|
|
537
|
+
if (roleName === null || roleName === void 0 ? void 0 : roleName.startsWith(db_1.DocumentType.ROLE)) {
|
|
538
|
+
return roleName;
|
|
539
|
+
}
|
|
540
|
+
return (0, db_1.prefixRoleID)(roleName);
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Remove the "role_" from builtin role IDs that have been written to the DB (for permissions).
|
|
544
|
+
*/
|
|
545
|
+
function getExternalRoleID(roleId, version) {
|
|
546
|
+
// for built-in roles we want to remove the DB role ID element (role_)
|
|
547
|
+
if (roleId.startsWith(`${db_1.DocumentType.ROLE}${db_1.SEPARATOR}`) &&
|
|
548
|
+
(isBuiltin(roleId) || version === exports.RoleIDVersion.NAME)) {
|
|
549
|
+
const parts = roleId.split(db_1.SEPARATOR);
|
|
550
|
+
parts.shift();
|
|
551
|
+
return parts.join(db_1.SEPARATOR);
|
|
552
|
+
}
|
|
553
|
+
return roleId;
|
|
554
|
+
}
|
|
555
|
+
function getExternalRoleIDs(roleIds, version) {
|
|
556
|
+
if (!roleIds) {
|
|
557
|
+
return roleIds;
|
|
558
|
+
}
|
|
559
|
+
else if (typeof roleIds === "string") {
|
|
560
|
+
return getExternalRoleID(roleIds, version);
|
|
561
|
+
}
|
|
562
|
+
else {
|
|
563
|
+
return roleIds.map(roleId => getExternalRoleID(roleId, version));
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
//# sourceMappingURL=roles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles.js","sourceRoot":"","sources":["../../../src/security/roles.ts"],"names":[],"mappings":"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"}
|