@intuitionrobotics/permissions 0.47.59 → 1.0.1
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/LICENSE +3 -0
- package/dist/app-backend/api/v1/permissions/_imports.d.ts +3 -0
- package/dist/app-backend/api/v1/permissions/_imports.d.ts.map +1 -0
- package/{shared/assign-types.js → dist/app-backend/api/v1/permissions/_imports.js} +3 -3
- package/{app-backend → dist/app-backend}/api/v1/permissions/_imports.js.map +1 -1
- package/dist/app-backend/api/v1/permissions/_permissions.d.ts +4 -0
- package/dist/app-backend/api/v1/permissions/_permissions.d.ts.map +1 -0
- package/{app-backend → dist/app-backend}/api/v1/permissions/_permissions.js +2 -4
- package/dist/app-backend/api/v1/permissions/_permissions.js.map +1 -0
- package/dist/app-backend/api/v1/permissions/assert.d.ts +10 -0
- package/dist/app-backend/api/v1/permissions/assert.d.ts.map +1 -0
- package/dist/app-backend/api/v1/permissions/assert.js +36 -0
- package/dist/app-backend/api/v1/permissions/assert.js.map +1 -0
- package/dist/app-backend/api/v1/permissions/assign/apis.d.ts +4 -0
- package/dist/app-backend/api/v1/permissions/assign/apis.d.ts.map +1 -0
- package/{app-backend → dist/app-backend}/api/v1/permissions/assign/apis.js +6 -7
- package/dist/app-backend/api/v1/permissions/assign/apis.js.map +1 -0
- package/dist/app-backend/api/v1/permissions/assign/app-permissions.d.ts +10 -0
- package/dist/app-backend/api/v1/permissions/assign/app-permissions.d.ts.map +1 -0
- package/dist/app-backend/api/v1/permissions/assign/app-permissions.js +42 -0
- package/dist/app-backend/api/v1/permissions/assign/app-permissions.js.map +1 -0
- package/dist/app-backend/api/v1/permissions/manage/apis.d.ts +4 -0
- package/dist/app-backend/api/v1/permissions/manage/apis.d.ts.map +1 -0
- package/{app-backend → dist/app-backend}/api/v1/permissions/manage/apis.js +8 -9
- package/dist/app-backend/api/v1/permissions/manage/apis.js.map +1 -0
- package/dist/app-backend/api/v1/permissions/tags/apis.d.ts +3 -0
- package/dist/app-backend/api/v1/permissions/tags/apis.d.ts.map +1 -0
- package/dist/app-backend/api/v1/permissions/tags/apis.js +3 -0
- package/{app-backend → dist/app-backend}/api/v1/permissions/tags/apis.js.map +1 -1
- package/dist/app-backend/api/v1/permissions/user-urls-permissions.d.ts +9 -0
- package/dist/app-backend/api/v1/permissions/user-urls-permissions.d.ts.map +1 -0
- package/dist/app-backend/api/v1/permissions/user-urls-permissions.js +34 -0
- package/dist/app-backend/api/v1/permissions/user-urls-permissions.js.map +1 -0
- package/dist/app-backend/api/v1/register/_register-project.d.ts +4 -0
- package/dist/app-backend/api/v1/register/_register-project.d.ts.map +1 -0
- package/dist/app-backend/api/v1/register/_register-project.js +20 -0
- package/dist/app-backend/api/v1/register/_register-project.js.map +1 -0
- package/dist/app-backend/api/v1/register/register-external-project.d.ts +9 -0
- package/dist/app-backend/api/v1/register/register-external-project.d.ts.map +1 -0
- package/dist/app-backend/api/v1/register/register-external-project.js +33 -0
- package/dist/app-backend/api/v1/register/register-external-project.js.map +1 -0
- package/dist/app-backend/api/v1/register/register-project.d.ts +11 -0
- package/dist/app-backend/api/v1/register/register-project.d.ts.map +1 -0
- package/dist/app-backend/api/v1/register/register-project.js +16 -0
- package/dist/app-backend/api/v1/register/register-project.js.map +1 -0
- package/dist/app-backend/api/v1/test/_imports.d.ts +2 -0
- package/dist/app-backend/api/v1/test/_imports.d.ts.map +1 -0
- package/dist/app-backend/api/v1/test/_imports.js +19 -0
- package/{app-backend → dist/app-backend}/api/v1/test/_imports.js.map +1 -1
- package/dist/app-backend/api/v1/test/_test-permissions.d.ts +4 -0
- package/dist/app-backend/api/v1/test/_test-permissions.d.ts.map +1 -0
- package/dist/app-backend/api/v1/test/_test-permissions.js +20 -0
- package/dist/app-backend/api/v1/test/_test-permissions.js.map +1 -0
- package/dist/app-backend/api/v1/test/test-permissions.d.ts +10 -0
- package/dist/app-backend/api/v1/test/test-permissions.d.ts.map +1 -0
- package/dist/app-backend/api/v1/test/test-permissions.js +34 -0
- package/dist/app-backend/api/v1/test/test-permissions.js.map +1 -0
- package/dist/app-backend/api/v1/user-custom-fields/_user-custom-fields.d.ts +4 -0
- package/dist/app-backend/api/v1/user-custom-fields/_user-custom-fields.d.ts.map +1 -0
- package/dist/app-backend/api/v1/user-custom-fields/_user-custom-fields.js +20 -0
- package/dist/app-backend/api/v1/user-custom-fields/_user-custom-fields.js.map +1 -0
- package/dist/app-backend/api/v1/user-custom-fields/user-cf-by-share-groups.d.ts +9 -0
- package/dist/app-backend/api/v1/user-custom-fields/user-cf-by-share-groups.d.ts.map +1 -0
- package/dist/app-backend/api/v1/user-custom-fields/user-cf-by-share-groups.js +17 -0
- package/dist/app-backend/api/v1/user-custom-fields/user-cf-by-share-groups.js.map +1 -0
- package/dist/app-backend/api/v1/user-custom-fields/users-cf-by-share-groups.d.ts +9 -0
- package/dist/app-backend/api/v1/user-custom-fields/users-cf-by-share-groups.d.ts.map +1 -0
- package/dist/app-backend/api/v1/user-custom-fields/users-cf-by-share-groups.js +15 -0
- package/dist/app-backend/api/v1/user-custom-fields/users-cf-by-share-groups.js.map +1 -0
- package/{app-backend → dist/app-backend}/benchmark/permission-user-assert-benchmark.d.ts +1 -0
- package/dist/app-backend/benchmark/permission-user-assert-benchmark.d.ts.map +1 -0
- package/dist/app-backend/benchmark/permission-user-assert-benchmark.js +92 -0
- package/dist/app-backend/benchmark/permission-user-assert-benchmark.js.map +1 -0
- package/dist/app-backend/core/module-pack.d.ts +7 -0
- package/dist/app-backend/core/module-pack.d.ts.map +1 -0
- package/dist/app-backend/core/module-pack.js +39 -0
- package/dist/app-backend/core/module-pack.js.map +1 -0
- package/{app-backend → dist/app-backend}/modules/PermissionsModule.d.ts +3 -2
- package/dist/app-backend/modules/PermissionsModule.d.ts.map +1 -0
- package/dist/app-backend/modules/PermissionsModule.js +119 -0
- package/dist/app-backend/modules/PermissionsModule.js.map +1 -0
- package/{app-backend → dist/app-backend}/modules/TagsModule.d.ts +5 -4
- package/dist/app-backend/modules/TagsModule.d.ts.map +1 -0
- package/dist/app-backend/modules/TagsModule.js +36 -0
- package/dist/app-backend/modules/TagsModule.js.map +1 -0
- package/{app-backend → dist/app-backend}/modules/_imports.d.ts +4 -3
- package/dist/app-backend/modules/_imports.d.ts.map +1 -0
- package/{app-backend/api/v1/test → dist/app-backend/modules}/_imports.js +9 -5
- package/dist/app-backend/modules/_imports.js.map +1 -0
- package/{app-backend → dist/app-backend}/modules/db-types/assign.d.ts +7 -6
- package/dist/app-backend/modules/db-types/assign.d.ts.map +1 -0
- package/dist/app-backend/modules/db-types/assign.js +251 -0
- package/dist/app-backend/modules/db-types/assign.js.map +1 -0
- package/{app-backend → dist/app-backend}/modules/db-types/managment.d.ts +5 -4
- package/dist/app-backend/modules/db-types/managment.d.ts.map +1 -0
- package/dist/app-backend/modules/db-types/managment.js +210 -0
- package/dist/app-backend/modules/db-types/managment.js.map +1 -0
- package/{app-backend → dist/app-backend}/modules/permissions-assert.d.ts +4 -3
- package/dist/app-backend/modules/permissions-assert.d.ts.map +1 -0
- package/dist/app-backend/modules/permissions-assert.js +226 -0
- package/dist/app-backend/modules/permissions-assert.js.map +1 -0
- package/{app-backend → dist/app-backend}/modules/permissions-share.d.ts +2 -1
- package/dist/app-backend/modules/permissions-share.d.ts.map +1 -0
- package/dist/app-backend/modules/permissions-share.js +13 -0
- package/dist/app-backend/modules/permissions-share.js.map +1 -0
- package/dist/app-frontend/core/module-pack.d.ts +9 -0
- package/dist/app-frontend/core/module-pack.d.ts.map +1 -0
- package/dist/app-frontend/core/module-pack.js +41 -0
- package/dist/app-frontend/core/module-pack.js.map +1 -0
- package/{app-frontend → dist/app-frontend}/modules/PermissionsComponent.d.ts +2 -1
- package/dist/app-frontend/modules/PermissionsComponent.d.ts.map +1 -0
- package/dist/app-frontend/modules/PermissionsComponent.js +19 -0
- package/dist/app-frontend/modules/PermissionsComponent.js.map +1 -0
- package/{app-frontend → dist/app-frontend}/modules/PermissionsModuleFE.d.ts +1 -0
- package/dist/app-frontend/modules/PermissionsModuleFE.d.ts.map +1 -0
- package/dist/app-frontend/modules/PermissionsModuleFE.js +80 -0
- package/dist/app-frontend/modules/PermissionsModuleFE.js.map +1 -0
- package/{app-frontend → dist/app-frontend}/modules/assign/ApiCaller_PermissionsGroup.d.ts +6 -5
- package/dist/app-frontend/modules/assign/ApiCaller_PermissionsGroup.d.ts.map +1 -0
- package/dist/app-frontend/modules/assign/ApiCaller_PermissionsGroup.js +50 -0
- package/dist/app-frontend/modules/assign/ApiCaller_PermissionsGroup.js.map +1 -0
- package/{app-frontend → dist/app-frontend}/modules/assign/ApiCaller_PermissionsUser.d.ts +6 -5
- package/dist/app-frontend/modules/assign/ApiCaller_PermissionsUser.d.ts.map +1 -0
- package/dist/app-frontend/modules/assign/ApiCaller_PermissionsUser.js +50 -0
- package/dist/app-frontend/modules/assign/ApiCaller_PermissionsUser.js.map +1 -0
- package/{app-frontend → dist/app-frontend}/modules/manage/ApiCaller_PermissionsApi.d.ts +6 -5
- package/dist/app-frontend/modules/manage/ApiCaller_PermissionsApi.d.ts.map +1 -0
- package/dist/app-frontend/modules/manage/ApiCaller_PermissionsApi.js +55 -0
- package/dist/app-frontend/modules/manage/ApiCaller_PermissionsApi.js.map +1 -0
- package/{app-frontend → dist/app-frontend}/modules/manage/ApiCaller_PermissionsDomain.d.ts +6 -5
- package/dist/app-frontend/modules/manage/ApiCaller_PermissionsDomain.d.ts.map +1 -0
- package/dist/app-frontend/modules/manage/ApiCaller_PermissionsDomain.js +61 -0
- package/dist/app-frontend/modules/manage/ApiCaller_PermissionsDomain.js.map +1 -0
- package/{app-frontend → dist/app-frontend}/modules/manage/ApiCaller_PermissionsLevel.d.ts +6 -5
- package/dist/app-frontend/modules/manage/ApiCaller_PermissionsLevel.d.ts.map +1 -0
- package/dist/app-frontend/modules/manage/ApiCaller_PermissionsLevel.js +61 -0
- package/dist/app-frontend/modules/manage/ApiCaller_PermissionsLevel.js.map +1 -0
- package/{app-frontend → dist/app-frontend}/modules/manage/ApiCaller_PermissionsProject.d.ts +6 -5
- package/dist/app-frontend/modules/manage/ApiCaller_PermissionsProject.d.ts.map +1 -0
- package/dist/app-frontend/modules/manage/ApiCaller_PermissionsProject.js +60 -0
- package/dist/app-frontend/modules/manage/ApiCaller_PermissionsProject.js.map +1 -0
- package/{app-frontend → dist/app-frontend}/modules/tags/ApiCaller_PermissionsTags.d.ts +6 -5
- package/dist/app-frontend/modules/tags/ApiCaller_PermissionsTags.d.ts.map +1 -0
- package/dist/app-frontend/modules/tags/ApiCaller_PermissionsTags.js +33 -0
- package/dist/app-frontend/modules/tags/ApiCaller_PermissionsTags.js.map +1 -0
- package/dist/backend.d.ts +2 -0
- package/dist/backend.d.ts.map +1 -0
- package/{shared/apis.js → dist/backend.js} +2 -3
- package/dist/backend.js.map +1 -0
- package/dist/frontend.d.ts +4 -0
- package/dist/frontend.d.ts.map +1 -0
- package/dist/frontend.js +21 -0
- package/dist/frontend.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/{shared → dist/shared}/apis.d.ts +6 -5
- package/dist/shared/apis.d.ts.map +1 -0
- package/dist/shared/apis.js +23 -0
- package/dist/shared/apis.js.map +1 -0
- package/{shared → dist/shared}/assign-types.d.ts +3 -2
- package/dist/shared/assign-types.d.ts.map +1 -0
- package/{shared/manager-types.js → dist/shared/assign-types.js} +3 -3
- package/{shared → dist/shared}/assign-types.js.map +1 -1
- package/{shared → dist/shared}/manager-types.d.ts +3 -2
- package/dist/shared/manager-types.d.ts.map +1 -0
- package/dist/shared/manager-types.js +20 -0
- package/{shared → dist/shared}/manager-types.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +66 -17
- package/app-backend/api/v1/permissions/_imports.d.ts +0 -2
- package/app-backend/api/v1/permissions/_imports.js +0 -36
- package/app-backend/api/v1/permissions/_permissions.d.ts +0 -1
- package/app-backend/api/v1/permissions/_permissions.js.map +0 -1
- package/app-backend/api/v1/permissions/assert.d.ts +0 -1
- package/app-backend/api/v1/permissions/assert.js +0 -47
- package/app-backend/api/v1/permissions/assert.js.map +0 -1
- package/app-backend/api/v1/permissions/assign/apis.d.ts +0 -1
- package/app-backend/api/v1/permissions/assign/apis.js.map +0 -1
- package/app-backend/api/v1/permissions/assign/app-permissions.d.ts +0 -1
- package/app-backend/api/v1/permissions/assign/app-permissions.js +0 -55
- package/app-backend/api/v1/permissions/assign/app-permissions.js.map +0 -1
- package/app-backend/api/v1/permissions/manage/apis.d.ts +0 -1
- package/app-backend/api/v1/permissions/manage/apis.js.map +0 -1
- package/app-backend/api/v1/permissions/tags/apis.d.ts +0 -1
- package/app-backend/api/v1/permissions/tags/apis.js +0 -5
- package/app-backend/api/v1/permissions/user-urls-permissions.d.ts +0 -1
- package/app-backend/api/v1/permissions/user-urls-permissions.js +0 -46
- package/app-backend/api/v1/permissions/user-urls-permissions.js.map +0 -1
- package/app-backend/api/v1/register/_register-project.d.ts +0 -1
- package/app-backend/api/v1/register/_register-project.js +0 -22
- package/app-backend/api/v1/register/_register-project.js.map +0 -1
- package/app-backend/api/v1/register/register-external-project.d.ts +0 -6
- package/app-backend/api/v1/register/register-external-project.js +0 -46
- package/app-backend/api/v1/register/register-external-project.js.map +0 -1
- package/app-backend/api/v1/register/register-project.d.ts +0 -8
- package/app-backend/api/v1/register/register-project.js +0 -29
- package/app-backend/api/v1/register/register-project.js.map +0 -1
- package/app-backend/api/v1/test/_imports.d.ts +0 -1
- package/app-backend/api/v1/test/_test-permissions.d.ts +0 -1
- package/app-backend/api/v1/test/_test-permissions.js +0 -22
- package/app-backend/api/v1/test/_test-permissions.js.map +0 -1
- package/app-backend/api/v1/test/test-permissions.d.ts +0 -1
- package/app-backend/api/v1/test/test-permissions.js +0 -45
- package/app-backend/api/v1/test/test-permissions.js.map +0 -1
- package/app-backend/api/v1/user-custom-fields/_user-custom-fields.d.ts +0 -1
- package/app-backend/api/v1/user-custom-fields/_user-custom-fields.js +0 -22
- package/app-backend/api/v1/user-custom-fields/_user-custom-fields.js.map +0 -1
- package/app-backend/api/v1/user-custom-fields/user-cf-by-share-groups.d.ts +0 -6
- package/app-backend/api/v1/user-custom-fields/user-cf-by-share-groups.js +0 -31
- package/app-backend/api/v1/user-custom-fields/user-cf-by-share-groups.js.map +0 -1
- package/app-backend/api/v1/user-custom-fields/users-cf-by-share-groups.d.ts +0 -6
- package/app-backend/api/v1/user-custom-fields/users-cf-by-share-groups.js +0 -30
- package/app-backend/api/v1/user-custom-fields/users-cf-by-share-groups.js.map +0 -1
- package/app-backend/benchmark/permission-user-assert-benchmark.js +0 -108
- package/app-backend/benchmark/permission-user-assert-benchmark.js.map +0 -1
- package/app-backend/core/module-pack.d.ts +0 -6
- package/app-backend/core/module-pack.js +0 -56
- package/app-backend/core/module-pack.js.map +0 -1
- package/app-backend/modules/PermissionsModule.js +0 -140
- package/app-backend/modules/PermissionsModule.js.map +0 -1
- package/app-backend/modules/TagsModule.js +0 -51
- package/app-backend/modules/TagsModule.js.map +0 -1
- package/app-backend/modules/_imports.js +0 -44
- package/app-backend/modules/_imports.js.map +0 -1
- package/app-backend/modules/db-types/assign.js +0 -288
- package/app-backend/modules/db-types/assign.js.map +0 -1
- package/app-backend/modules/db-types/managment.js +0 -242
- package/app-backend/modules/db-types/managment.js.map +0 -1
- package/app-backend/modules/permissions-assert.js +0 -250
- package/app-backend/modules/permissions-assert.js.map +0 -1
- package/app-backend/modules/permissions-share.js +0 -27
- package/app-backend/modules/permissions-share.js.map +0 -1
- package/app-frontend/core/module-pack.d.ts +0 -8
- package/app-frontend/core/module-pack.js +0 -58
- package/app-frontend/core/module-pack.js.map +0 -1
- package/app-frontend/modules/PermissionsComponent.js +0 -23
- package/app-frontend/modules/PermissionsComponent.js.map +0 -1
- package/app-frontend/modules/PermissionsModuleFE.js +0 -92
- package/app-frontend/modules/PermissionsModuleFE.js.map +0 -1
- package/app-frontend/modules/assign/ApiCaller_PermissionsGroup.js +0 -55
- package/app-frontend/modules/assign/ApiCaller_PermissionsGroup.js.map +0 -1
- package/app-frontend/modules/assign/ApiCaller_PermissionsUser.js +0 -72
- package/app-frontend/modules/assign/ApiCaller_PermissionsUser.js.map +0 -1
- package/app-frontend/modules/manage/ApiCaller_PermissionsApi.js +0 -76
- package/app-frontend/modules/manage/ApiCaller_PermissionsApi.js.map +0 -1
- package/app-frontend/modules/manage/ApiCaller_PermissionsDomain.js +0 -83
- package/app-frontend/modules/manage/ApiCaller_PermissionsDomain.js.map +0 -1
- package/app-frontend/modules/manage/ApiCaller_PermissionsLevel.js +0 -83
- package/app-frontend/modules/manage/ApiCaller_PermissionsLevel.js.map +0 -1
- package/app-frontend/modules/manage/ApiCaller_PermissionsProject.js +0 -82
- package/app-frontend/modules/manage/ApiCaller_PermissionsProject.js.map +0 -1
- package/app-frontend/modules/tags/ApiCaller_PermissionsTags.js +0 -55
- package/app-frontend/modules/tags/ApiCaller_PermissionsTags.js.map +0 -1
- package/backend.d.ts +0 -1
- package/backend.js +0 -35
- package/backend.js.map +0 -1
- package/frontend.d.ts +0 -3
- package/frontend.js +0 -37
- package/frontend.js.map +0 -1
- package/index.d.ts +0 -3
- package/index.js +0 -37
- package/index.js.map +0 -1
- package/shared/apis.js.map +0 -1
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ts-common is the basic building blocks of our typescript projects
|
|
3
|
+
*
|
|
4
|
+
* Copyright (C) 2020 Intuition Robotics
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/
|
|
18
|
+
import { _keys, BadImplementationException, batchActionParallel, filterDuplicates, Module } from "@intuitionrobotics/ts-common";
|
|
19
|
+
import { ApiException, ApiResponse } from "@intuitionrobotics/thunderstorm/backend";
|
|
20
|
+
import {} from "../../index.js";
|
|
21
|
+
import { AccessLevelPermissionsDB, ApiPermissionsDB } from "./db-types/managment.js";
|
|
22
|
+
import { GroupPermissionsDB, UserPermissionsDB } from "./db-types/assign.js";
|
|
23
|
+
import { HttpMethod } from "@intuitionrobotics/thunderstorm";
|
|
24
|
+
import { AccountModule } from "@intuitionrobotics/user-account/backend";
|
|
25
|
+
import { PermissionsModule } from "./PermissionsModule.js";
|
|
26
|
+
export class PermissionsAssert_Class extends Module {
|
|
27
|
+
constructor() {
|
|
28
|
+
super("PermissionsAssert");
|
|
29
|
+
}
|
|
30
|
+
Middleware = (keys) => async (req, data, response, scopes) => {
|
|
31
|
+
let account;
|
|
32
|
+
await this.CustomMiddleware(keys, async (projectId, customFields) => {
|
|
33
|
+
account = await AccountModule.validateSession(req, scopes, response);
|
|
34
|
+
await this.assertUserPermissions(projectId, data.url, account._id, customFields);
|
|
35
|
+
})(req, data, response, scopes);
|
|
36
|
+
return { account };
|
|
37
|
+
};
|
|
38
|
+
CustomMiddleware = (keys, action) => async (req, data, _response) => {
|
|
39
|
+
const customFields = {};
|
|
40
|
+
let object;
|
|
41
|
+
switch (data.method) {
|
|
42
|
+
case HttpMethod.POST:
|
|
43
|
+
case HttpMethod.PATCH:
|
|
44
|
+
case HttpMethod.PUT:
|
|
45
|
+
object = data.body;
|
|
46
|
+
break;
|
|
47
|
+
case HttpMethod.GET:
|
|
48
|
+
case HttpMethod.DELETE:
|
|
49
|
+
object = data.query;
|
|
50
|
+
break;
|
|
51
|
+
default:
|
|
52
|
+
throw new BadImplementationException(`Generic custom fields cannot be extracted on api with method: ${data.method}`);
|
|
53
|
+
}
|
|
54
|
+
_keys(object).filter(key => keys.includes(key)).forEach(key => {
|
|
55
|
+
const oElement = object[key];
|
|
56
|
+
if (oElement === undefined || oElement === null)
|
|
57
|
+
return;
|
|
58
|
+
if (typeof oElement !== "string")
|
|
59
|
+
return;
|
|
60
|
+
customFields[key] = oElement;
|
|
61
|
+
});
|
|
62
|
+
const projectId = PermissionsModule.getProjectIdentity()._id;
|
|
63
|
+
await action(projectId, customFields);
|
|
64
|
+
};
|
|
65
|
+
async assertUserPermissions(projectId, path, userId, requestCustomField) {
|
|
66
|
+
const [apiDetails, userDetails] = await Promise.all([
|
|
67
|
+
this.getApiDetails(path, projectId),
|
|
68
|
+
this.getUserDetails(userId)
|
|
69
|
+
]);
|
|
70
|
+
this._assertUserPermissionsImpl(apiDetails, projectId, userDetails, requestCustomField);
|
|
71
|
+
}
|
|
72
|
+
_assertUserPermissionsImpl(apiDetails, projectId, userDetails, requestCustomField) {
|
|
73
|
+
if (!apiDetails.apiDb.accessLevelIds) {
|
|
74
|
+
if (!this.config.strictMode)
|
|
75
|
+
return;
|
|
76
|
+
throw new ApiException(403, `No permissions configuration specified for api: ${projectId}--${apiDetails.apiDb.path}`);
|
|
77
|
+
}
|
|
78
|
+
this.assertUserPermissionsImpl(userDetails.userGroups, apiDetails.requestPermissions, [requestCustomField]);
|
|
79
|
+
}
|
|
80
|
+
async assertUserSharingGroup(granterUserId, userGroup) {
|
|
81
|
+
const [granterUser, groupToShare] = await Promise.all([this.getUserDetails(granterUserId), GroupPermissionsDB.queryUnique({ _id: userGroup.groupId })]);
|
|
82
|
+
groupToShare.customFields = this.getCombineUserGroupCF(userGroup, groupToShare);
|
|
83
|
+
const requestPermissions = await this.getAccessLevels(groupToShare.accessLevelIds || []);
|
|
84
|
+
const requestCustomFields = groupToShare.customFields;
|
|
85
|
+
this.assertUserPermissionsImpl(granterUser.userGroups, requestPermissions, requestCustomFields);
|
|
86
|
+
}
|
|
87
|
+
assertUserPermissionsImpl(userGroups, requestPermissions, requestCustomFields) {
|
|
88
|
+
if (!requestPermissions.length)
|
|
89
|
+
return;
|
|
90
|
+
const requestPairWithLevelsObj = { accessLevels: requestPermissions, customFields: requestCustomFields };
|
|
91
|
+
let groupMatch = false;
|
|
92
|
+
const groupsMatchArray = userGroups.map(group => {
|
|
93
|
+
const groupPairWithLevelsObj = { accessLevels: group.__accessLevels || [], customFields: group.customFields || [] };
|
|
94
|
+
return this.isMatchWithLevelsObj(groupPairWithLevelsObj, requestPairWithLevelsObj);
|
|
95
|
+
});
|
|
96
|
+
for (const match of groupsMatchArray) {
|
|
97
|
+
if (match)
|
|
98
|
+
groupMatch = true;
|
|
99
|
+
}
|
|
100
|
+
if (!groupMatch) {
|
|
101
|
+
throw new ApiException(403, "Action Forbidden");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async getUserDetails(uuid) {
|
|
105
|
+
const user = await UserPermissionsDB.queryUnique({ accountId: uuid });
|
|
106
|
+
const userGroups = filterDuplicates(user.groups || []);
|
|
107
|
+
const groups = await batchActionParallel(userGroups.map(userGroup => userGroup.groupId), 10, subGroupIds => GroupPermissionsDB.query({ where: { _id: { $in: subGroupIds } } }));
|
|
108
|
+
return {
|
|
109
|
+
user,
|
|
110
|
+
userGroups: this.getCombineUserGroups(userGroups, groups)
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
getCombineUserGroupCF(userGroup, group) {
|
|
114
|
+
const cfArray = [];
|
|
115
|
+
if (group.customFields) {
|
|
116
|
+
cfArray.push(...group.customFields);
|
|
117
|
+
}
|
|
118
|
+
if (userGroup.customField) {
|
|
119
|
+
cfArray.push(userGroup.customField);
|
|
120
|
+
}
|
|
121
|
+
return cfArray;
|
|
122
|
+
}
|
|
123
|
+
getCombineUserGroups(userGroups, groups) {
|
|
124
|
+
const combinedGroups = [];
|
|
125
|
+
groups.forEach(group => {
|
|
126
|
+
const existUserGroupItem = userGroups.find(groupItem => groupItem.groupId === group._id);
|
|
127
|
+
if (!existUserGroupItem)
|
|
128
|
+
throw new BadImplementationException("You are missing group in your code implementation");
|
|
129
|
+
userGroups.forEach((userGroup) => {
|
|
130
|
+
if (userGroup.groupId === group._id) {
|
|
131
|
+
combinedGroups.push({ ...group, customFields: this.getCombineUserGroupCF(userGroup, group) });
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
return combinedGroups;
|
|
136
|
+
}
|
|
137
|
+
async getApiDetails(_path, projectId) {
|
|
138
|
+
const path = _path.substring(0, (_path + '?').indexOf('?'));
|
|
139
|
+
const apiDb = await ApiPermissionsDB.queryUnique({ path, projectId });
|
|
140
|
+
const requestPermissions = await this.getAccessLevels(apiDb.accessLevelIds || []);
|
|
141
|
+
return {
|
|
142
|
+
apiDb,
|
|
143
|
+
requestPermissions
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
async getApisDetails(urls, projectId) {
|
|
147
|
+
const paths = urls.map(_path => _path.substring(0, (_path + '?').indexOf('?')));
|
|
148
|
+
const apiDbs = await batchActionParallel(paths, 10, elements => ApiPermissionsDB.query({ where: { projectId, path: { $in: elements } } }));
|
|
149
|
+
return Promise.all(paths.map(async (path) => {
|
|
150
|
+
const apiDb = apiDbs.find(_apiDb => _apiDb.path === path);
|
|
151
|
+
if (!apiDb)
|
|
152
|
+
return;
|
|
153
|
+
try {
|
|
154
|
+
const requestPermissions = await this.getAccessLevels(apiDb.accessLevelIds);
|
|
155
|
+
return ({
|
|
156
|
+
apiDb,
|
|
157
|
+
requestPermissions
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
catch (_e) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
}));
|
|
164
|
+
}
|
|
165
|
+
async getAccessLevels(_accessLevelIds) {
|
|
166
|
+
const accessLevelIds = filterDuplicates(_accessLevelIds || []);
|
|
167
|
+
const requestPermissions = await batchActionParallel(accessLevelIds, 10, elements => AccessLevelPermissionsDB.query({ where: { _id: { $in: elements } } }));
|
|
168
|
+
const idNotFound = accessLevelIds.find(lId => !requestPermissions.find(r => r._id === lId));
|
|
169
|
+
if (idNotFound)
|
|
170
|
+
throw new ApiException(404, `Could not find api level with _id: ${idNotFound}`);
|
|
171
|
+
return requestPermissions;
|
|
172
|
+
}
|
|
173
|
+
isMatchWithLevelsObj(groupPair, requestPair) {
|
|
174
|
+
let match = true;
|
|
175
|
+
requestPair.customFields.forEach(requestCF => {
|
|
176
|
+
if (!this.doesCustomFieldsSatisfies(groupPair.customFields, requestCF))
|
|
177
|
+
match = false;
|
|
178
|
+
});
|
|
179
|
+
if (!match)
|
|
180
|
+
return false;
|
|
181
|
+
const groupDomainLevelMap = this.getDomainLevelMap(groupPair.accessLevels);
|
|
182
|
+
requestPair.accessLevels.forEach((requiredLevel, _index) => {
|
|
183
|
+
const userAccessLevel = groupDomainLevelMap[requiredLevel.domainId];
|
|
184
|
+
if (userAccessLevel === undefined || userAccessLevel < requiredLevel.value)
|
|
185
|
+
match = false;
|
|
186
|
+
});
|
|
187
|
+
return match;
|
|
188
|
+
}
|
|
189
|
+
getDomainLevelMap(accessLevels) {
|
|
190
|
+
return accessLevels.reduce((toRet, accessLevel) => {
|
|
191
|
+
const levelForDomain = toRet[accessLevel.domainId];
|
|
192
|
+
if (!levelForDomain || levelForDomain < accessLevel.value)
|
|
193
|
+
toRet[accessLevel.domainId] = accessLevel.value;
|
|
194
|
+
return toRet;
|
|
195
|
+
}, {});
|
|
196
|
+
}
|
|
197
|
+
doesCustomFieldsSatisfies(groupCustomFields = [], requestCustomField) {
|
|
198
|
+
if (!Object.keys(requestCustomField).length)
|
|
199
|
+
return true;
|
|
200
|
+
for (const customField of groupCustomFields) {
|
|
201
|
+
if (this.doesCustomFieldSatisfies(customField, requestCustomField))
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
doesCustomFieldSatisfies(groupCustomField, requestCustomField) {
|
|
207
|
+
return Object.keys(requestCustomField).reduce((doesSatisfies, requestCustomFieldKey) => {
|
|
208
|
+
const customFieldRegEx = this.getRegEx(groupCustomField[requestCustomFieldKey]);
|
|
209
|
+
return doesSatisfies && customFieldRegEx.test(requestCustomField[requestCustomFieldKey]);
|
|
210
|
+
}, true);
|
|
211
|
+
}
|
|
212
|
+
getRegEx(value) {
|
|
213
|
+
if (!value)
|
|
214
|
+
return new RegExp(`^${value}$`, "g");
|
|
215
|
+
let regExValue = value;
|
|
216
|
+
const startRegEx = '^';
|
|
217
|
+
const endRegEx = '$';
|
|
218
|
+
if (value[0] !== startRegEx)
|
|
219
|
+
regExValue = startRegEx + regExValue;
|
|
220
|
+
if (value[value.length - 1] !== endRegEx)
|
|
221
|
+
regExValue = regExValue + endRegEx;
|
|
222
|
+
return new RegExp(regExValue, "g");
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
export const PermissionsAssert = new PermissionsAssert_Class();
|
|
226
|
+
//# sourceMappingURL=permissions-assert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions-assert.js","sourceRoot":"","sources":["../../../src/main/app-backend/modules/permissions-assert.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Module } from "@intuitionrobotics/ts-common";
|
|
2
|
-
import { User_Group } from "
|
|
2
|
+
import { type User_Group } from "../../index.js";
|
|
3
3
|
export declare class PermissionsShare_Class extends Module {
|
|
4
4
|
constructor();
|
|
5
5
|
verifyPermissionGrantingAllowed(granterUserId: string, shareGroup: User_Group): Promise<void>;
|
|
6
6
|
}
|
|
7
7
|
export declare const PermissionsShare: PermissionsShare_Class;
|
|
8
|
+
//# sourceMappingURL=permissions-share.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions-share.d.ts","sourceRoot":"","sources":["../../../src/main/app-backend/modules/permissions-share.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,8BAA8B,CAAC;AACpD,OAAO,EACN,KAAK,UAAU,EACf,MAAM,gBAAgB,CAAC;AAMxB,qBAAa,sBACZ,SAAQ,MAAM;;IAMR,+BAA+B,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU;CAInF;AAED,eAAO,MAAM,gBAAgB,wBAA+B,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Module } from "@intuitionrobotics/ts-common";
|
|
2
|
+
import {} from "../../index.js";
|
|
3
|
+
import { PermissionsAssert } from "./permissions-assert.js";
|
|
4
|
+
export class PermissionsShare_Class extends Module {
|
|
5
|
+
constructor() {
|
|
6
|
+
super("PermissionsShare");
|
|
7
|
+
}
|
|
8
|
+
async verifyPermissionGrantingAllowed(granterUserId, shareGroup) {
|
|
9
|
+
await PermissionsAssert.assertUserSharingGroup(granterUserId, shareGroup);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export const PermissionsShare = new PermissionsShare_Class();
|
|
13
|
+
//# sourceMappingURL=permissions-share.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions-share.js","sourceRoot":"","sources":["../../../src/main/app-backend/modules/permissions-share.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,8BAA8B,CAAC;AACpD,OAAO,EAEN,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACN,iBAAiB,EACjB,MAAM,yBAAyB,CAAC;AAGjC,MAAM,OAAO,sBACZ,SAAQ,MAAM;IAEd;QACC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,+BAA+B,CAAC,aAAqB,EAAE,UAAsB;QAClF,MAAM,iBAAiB,CAAC,sBAAsB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;IAC3E,CAAC;CAED;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,sBAAsB,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const Frontend_ModulePack_Permissions: (import("../modules/assign/ApiCaller_PermissionsUser.js").PermissionsUserModule_Class | import("../modules/assign/ApiCaller_PermissionsGroup.js").PermissionsGroupModule_Class | import("../modules/manage/ApiCaller_PermissionsProject.js").PermissionsProjectModule_Class | import("../modules/manage/ApiCaller_PermissionsDomain.js").PermissionsDomainModule_Class | import("../modules/manage/ApiCaller_PermissionsLevel.js").PermissionsAccessLevelModule_Class | import("../modules/manage/ApiCaller_PermissionsApi.js").PermissionsApiModule_Class | import("../modules/tags/ApiCaller_PermissionsTags.js").PermissionsTagsModule_Class)[];
|
|
2
|
+
export * from "../modules/assign/ApiCaller_PermissionsUser.js";
|
|
3
|
+
export * from "../modules/assign/ApiCaller_PermissionsGroup.js";
|
|
4
|
+
export * from "../modules/manage/ApiCaller_PermissionsProject.js";
|
|
5
|
+
export * from "../modules/manage/ApiCaller_PermissionsDomain.js";
|
|
6
|
+
export * from "../modules/manage/ApiCaller_PermissionsLevel.js";
|
|
7
|
+
export * from "../modules/manage/ApiCaller_PermissionsApi.js";
|
|
8
|
+
export * from "../modules/tags/ApiCaller_PermissionsTags.js";
|
|
9
|
+
//# sourceMappingURL=module-pack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-pack.d.ts","sourceRoot":"","sources":["../../../src/main/app-frontend/core/module-pack.ts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,+BAA+B,onBAQ3C,CAAC;AAEF,cAAc,gDAAgD,CAAA;AAC9D,cAAc,iDAAiD,CAAA;AAC/D,cAAc,mDAAmD,CAAA;AACjE,cAAc,kDAAkD,CAAA;AAChE,cAAc,iDAAiD,CAAA;AAC/D,cAAc,+CAA+C,CAAA;AAC7D,cAAc,8CAA8C,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ts-common is the basic building blocks of our typescript projects
|
|
3
|
+
*
|
|
4
|
+
* Copyright (C) 2020 Intuition Robotics
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/
|
|
18
|
+
import { ApiCaller_PermissionsUser } from "../modules/assign/ApiCaller_PermissionsUser.js";
|
|
19
|
+
import { ApiCaller_PermissionsGroup } from "../modules/assign/ApiCaller_PermissionsGroup.js";
|
|
20
|
+
import { ApiCaller_PermissionsProject } from "../modules/manage/ApiCaller_PermissionsProject.js";
|
|
21
|
+
import { ApiCaller_PermissionsDomain } from "../modules/manage/ApiCaller_PermissionsDomain.js";
|
|
22
|
+
import { ApiCaller_PermissionsAccessLevel } from "../modules/manage/ApiCaller_PermissionsLevel.js";
|
|
23
|
+
import { ApiCaller_PermissionsApi } from "../modules/manage/ApiCaller_PermissionsApi.js";
|
|
24
|
+
import { ApiCaller_PermissionsTags } from "../modules/tags/ApiCaller_PermissionsTags.js";
|
|
25
|
+
export const Frontend_ModulePack_Permissions = [
|
|
26
|
+
ApiCaller_PermissionsUser,
|
|
27
|
+
ApiCaller_PermissionsGroup,
|
|
28
|
+
ApiCaller_PermissionsProject,
|
|
29
|
+
ApiCaller_PermissionsDomain,
|
|
30
|
+
ApiCaller_PermissionsAccessLevel,
|
|
31
|
+
ApiCaller_PermissionsApi,
|
|
32
|
+
ApiCaller_PermissionsTags
|
|
33
|
+
];
|
|
34
|
+
export * from "../modules/assign/ApiCaller_PermissionsUser.js";
|
|
35
|
+
export * from "../modules/assign/ApiCaller_PermissionsGroup.js";
|
|
36
|
+
export * from "../modules/manage/ApiCaller_PermissionsProject.js";
|
|
37
|
+
export * from "../modules/manage/ApiCaller_PermissionsDomain.js";
|
|
38
|
+
export * from "../modules/manage/ApiCaller_PermissionsLevel.js";
|
|
39
|
+
export * from "../modules/manage/ApiCaller_PermissionsApi.js";
|
|
40
|
+
export * from "../modules/tags/ApiCaller_PermissionsTags.js";
|
|
41
|
+
//# sourceMappingURL=module-pack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-pack.js","sourceRoot":"","sources":["../../../src/main/app-frontend/core/module-pack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAC,yBAAyB,EAAC,MAAM,gDAAgD,CAAC;AACzF,OAAO,EAAC,0BAA0B,EAAC,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAC,4BAA4B,EAAC,MAAM,mDAAmD,CAAC;AAC/F,OAAO,EAAC,2BAA2B,EAAC,MAAM,kDAAkD,CAAC;AAC7F,OAAO,EAAC,gCAAgC,EAAC,MAAM,iDAAiD,CAAC;AACjG,OAAO,EAAC,wBAAwB,EAAC,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAC,yBAAyB,EAAC,MAAM,8CAA8C,CAAC;AAEvF,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC9C,yBAAyB;IACzB,0BAA0B;IAC1B,4BAA4B;IAC5B,2BAA2B;IAC3B,gCAAgC;IAChC,wBAAwB;IACxB,yBAAyB;CACzB,CAAC;AAEF,cAAc,gDAAgD,CAAA;AAC9D,cAAc,iDAAiD,CAAA;AAC/D,cAAc,mDAAmD,CAAA;AACjE,cAAc,kDAAkD,CAAA;AAChE,cAAc,iDAAiD,CAAA;AAC/D,cAAc,+CAA+C,CAAA;AAC7D,cAAc,8CAA8C,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { BaseComponent } from "@intuitionrobotics/thunderstorm/frontend";
|
|
3
|
-
import { OnPermissionsChanged } from "./PermissionsModuleFE";
|
|
3
|
+
import { type OnPermissionsChanged } from "./PermissionsModuleFE.js";
|
|
4
4
|
type Props = {
|
|
5
5
|
url: string;
|
|
6
6
|
loadingComponent?: React.ComponentType;
|
|
@@ -12,3 +12,4 @@ export declare class PermissionsComponent extends BaseComponent<Props> implement
|
|
|
12
12
|
render(): string | number | boolean | Iterable<React.ReactNode> | React.JSX.Element | null | undefined;
|
|
13
13
|
}
|
|
14
14
|
export {};
|
|
15
|
+
//# sourceMappingURL=PermissionsComponent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionsComponent.d.ts","sourceRoot":"","sources":["../../../src/main/app-frontend/modules/PermissionsComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAC,aAAa,EAAC,MAAM,0CAA0C,CAAC;AACvE,OAAO,EACN,KAAK,oBAAoB,EAEzB,MAAM,0BAA0B,CAAC;AAElC,KAAK,KAAK,GAAG;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,gBAAgB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IACtC,QAAQ,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CACzB,CAAA;AAED,qBAAa,oBACZ,SAAQ,aAAa,CAAC,KAAK,CAC3B,YAAW,oBAAoB;IAE/B,sBAAsB;IAItB,MAAM;CAaN"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { BaseComponent } from "@intuitionrobotics/thunderstorm/frontend";
|
|
3
|
+
import { PermissionsFE } from "./PermissionsModuleFE.js";
|
|
4
|
+
export class PermissionsComponent extends BaseComponent {
|
|
5
|
+
__onPermissionsChanged() {
|
|
6
|
+
this.forceUpdate();
|
|
7
|
+
}
|
|
8
|
+
render() {
|
|
9
|
+
const permitted = PermissionsFE.doesUserHavePermissions(this.props.url);
|
|
10
|
+
if (permitted === undefined)
|
|
11
|
+
return this.props.loadingComponent ? React.createElement(this.props.loadingComponent, null) : null;
|
|
12
|
+
if (permitted)
|
|
13
|
+
return this.props.children;
|
|
14
|
+
if (this.props.fallback)
|
|
15
|
+
return React.createElement(this.props.fallback, null);
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=PermissionsComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionsComponent.js","sourceRoot":"","sources":["../../../src/main/app-frontend/modules/PermissionsComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAC,aAAa,EAAC,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAEN,aAAa,EACb,MAAM,0BAA0B,CAAC;AASlC,MAAM,OAAO,oBACZ,SAAQ,aAAoB;IAG5B,sBAAsB;QACrB,IAAI,CAAC,WAAW,EAAE,CAAC;IACpB,CAAC;IAED,MAAM;QACL,MAAM,SAAS,GAAG,aAAa,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxE,IAAI,SAAS,KAAK,SAAS;YAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,oBAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,OAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAE5E,IAAI,SAAS;YACZ,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAE5B,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ;YACtB,OAAO,oBAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,OAAE,CAAC;QAE/B,OAAO,IAAI,CAAC;IACb,CAAC;CACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionsModuleFE.d.ts","sourceRoot":"","sources":["../../../src/main/app-frontend/modules/PermissionsModuleFE.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,MAAM,EAGN,MAAM,8BAA8B,CAAC;AAStC,MAAM,MAAM,yBAAyB,GAAG;IACvC,SAAS,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,WAAW,oBAAoB;IACpC,sBAAsB,EAAE,MAAM,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IACnC,qBAAqB,EAAE,MAAM,IAAI,CAAC;CAClC;AAKD,qBAAa,yBACZ,SAAQ,MAAM,CAAC,yBAAyB,CAAC;IACzC,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,mBAAmB,CAA2B;IACtD,OAAO,CAAC,kBAAkB,CAAiB;IAC3C,OAAO,CAAC,YAAY,CAAO;IAC3B,OAAO,CAAC,YAAY,CAAK;;IAMzB,eAAe,CAAC,IAAI,EAAE,MAAM;IAI5B,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAKzC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE;IAWvB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAazD,OAAO,CAAC,cAAc,CAoCpB;CAEF;AAED,eAAO,MAAM,aAAa,2BAAkC,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { _setTimeout, ImplementationMissingException, Module, Second } from "@intuitionrobotics/ts-common";
|
|
2
|
+
import { ThunderDispatcher } from "@intuitionrobotics/thunderstorm/app-frontend/core/thunder-dispatcher";
|
|
3
|
+
import { XhrHttpModule } from "@intuitionrobotics/thunderstorm/frontend";
|
|
4
|
+
import { HttpMethod } from "@intuitionrobotics/thunderstorm";
|
|
5
|
+
import {} from "../../index.js";
|
|
6
|
+
const dispatch_onPermissionsChanged = new ThunderDispatcher("__onPermissionsChanged");
|
|
7
|
+
const dispatch_onPermissionsFailed = new ThunderDispatcher("__onPermissionsFailed");
|
|
8
|
+
export class PermissionsModuleFE_Class extends Module {
|
|
9
|
+
loadingUrls = new Set();
|
|
10
|
+
userUrlsPermissions = {};
|
|
11
|
+
requestCustomField = {};
|
|
12
|
+
debounceTime = 100;
|
|
13
|
+
retryCounter = 0;
|
|
14
|
+
constructor() {
|
|
15
|
+
super("PermissionsModuleFE");
|
|
16
|
+
}
|
|
17
|
+
setDebounceTime(time) {
|
|
18
|
+
this.debounceTime = time;
|
|
19
|
+
}
|
|
20
|
+
setCustomField(key, value) {
|
|
21
|
+
this.requestCustomField[key] = value;
|
|
22
|
+
this.setPermissions();
|
|
23
|
+
}
|
|
24
|
+
loadUrls(urls) {
|
|
25
|
+
urls.forEach(url => {
|
|
26
|
+
if (this.loadingUrls.has(url) || this.userUrlsPermissions[url] !== undefined)
|
|
27
|
+
return;
|
|
28
|
+
this.loadingUrls.add(url);
|
|
29
|
+
});
|
|
30
|
+
this.setPermissions();
|
|
31
|
+
}
|
|
32
|
+
doesUserHavePermissions(url) {
|
|
33
|
+
if (this.loadingUrls.has(url))
|
|
34
|
+
return undefined;
|
|
35
|
+
const permitted = this.userUrlsPermissions[url];
|
|
36
|
+
if (permitted !== undefined)
|
|
37
|
+
return permitted;
|
|
38
|
+
this.loadingUrls.add(url);
|
|
39
|
+
this.setPermissions();
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
setPermissions = () => {
|
|
43
|
+
if (!this.config || !this.config.projectId)
|
|
44
|
+
throw new ImplementationMissingException("need to set up a project id config");
|
|
45
|
+
this.debounce(() => {
|
|
46
|
+
const urls = {};
|
|
47
|
+
this.loadingUrls.forEach(url => {
|
|
48
|
+
urls[url] = false;
|
|
49
|
+
});
|
|
50
|
+
XhrHttpModule
|
|
51
|
+
.createRequest(HttpMethod.POST, "user-urls-permissions")
|
|
52
|
+
.setRelativeUrl(`/v1/permissions/user-urls-permissions`)
|
|
53
|
+
// .setOnError(`Failed to get user urls permissions`)
|
|
54
|
+
.setLabel(`Getting user urls permissions`)
|
|
55
|
+
.setJsonBody({
|
|
56
|
+
projectId: this.config.projectId,
|
|
57
|
+
urls: urls,
|
|
58
|
+
requestCustomField: this.requestCustomField
|
|
59
|
+
})
|
|
60
|
+
.setOnError(() => {
|
|
61
|
+
this.logWarning(`Failed to get user urls permissions`);
|
|
62
|
+
if (this.retryCounter < 5) {
|
|
63
|
+
this.retryCounter++;
|
|
64
|
+
return _setTimeout(this.setPermissions, 5 * Second);
|
|
65
|
+
}
|
|
66
|
+
dispatch_onPermissionsFailed.dispatchModule();
|
|
67
|
+
})
|
|
68
|
+
.execute(async (userUrlsPermissions) => {
|
|
69
|
+
this.retryCounter = 0;
|
|
70
|
+
Object.keys(userUrlsPermissions).forEach(url => {
|
|
71
|
+
this.loadingUrls.delete(url);
|
|
72
|
+
this.userUrlsPermissions[url] = userUrlsPermissions[url];
|
|
73
|
+
});
|
|
74
|
+
dispatch_onPermissionsChanged.dispatchUI();
|
|
75
|
+
});
|
|
76
|
+
}, "get-permissions", this.debounceTime);
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export const PermissionsFE = new PermissionsModuleFE_Class();
|
|
80
|
+
//# sourceMappingURL=PermissionsModuleFE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PermissionsModuleFE.js","sourceRoot":"","sources":["../../../src/main/app-frontend/modules/PermissionsModuleFE.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DB_PermissionsGroup } from "../../../index";
|
|
1
|
+
import { type DB_PermissionsGroup } from "../../../index.js";
|
|
2
2
|
import { BaseDB_ApiGeneratorCaller } from "@intuitionrobotics/db-api-generator/frontend";
|
|
3
3
|
export interface OnPermissionsGroupsLoaded {
|
|
4
4
|
__onPermissionsGroupsLoaded: () => void;
|
|
@@ -7,11 +7,12 @@ export declare class PermissionsGroupModule_Class extends BaseDB_ApiGeneratorCal
|
|
|
7
7
|
private groups;
|
|
8
8
|
constructor();
|
|
9
9
|
protected init(): void;
|
|
10
|
-
protected onEntryCreated(
|
|
11
|
-
protected onEntryDeleted(
|
|
12
|
-
protected onEntryUpdated(
|
|
13
|
-
protected onGotUnique(
|
|
10
|
+
protected onEntryCreated(_response: DB_PermissionsGroup): Promise<void>;
|
|
11
|
+
protected onEntryDeleted(_response: DB_PermissionsGroup): Promise<void>;
|
|
12
|
+
protected onEntryUpdated(_response: DB_PermissionsGroup): Promise<void>;
|
|
13
|
+
protected onGotUnique(_response: DB_PermissionsGroup): Promise<void>;
|
|
14
14
|
protected onQueryReturned(response: DB_PermissionsGroup[]): Promise<void>;
|
|
15
15
|
getGroups(): DB_PermissionsGroup[];
|
|
16
16
|
}
|
|
17
17
|
export declare const ApiCaller_PermissionsGroup: PermissionsGroupModule_Class;
|
|
18
|
+
//# sourceMappingURL=ApiCaller_PermissionsGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiCaller_PermissionsGroup.d.ts","sourceRoot":"","sources":["../../../../src/main/app-frontend/modules/assign/ApiCaller_PermissionsGroup.ts"],"names":[],"mappings":"AAiBA,OAAO,EACN,KAAK,mBAAmB,EACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAC,yBAAyB,EAAC,MAAM,8CAA8C,CAAC;AAMvF,MAAM,WAAW,yBAAyB;IACzC,2BAA2B,EAAE,MAAM,IAAI,CAAC;CACxC;AAID,qBAAa,4BACZ,SAAQ,yBAAyB,CAAC,mBAAmB,CAAC;IACtD,OAAO,CAAC,MAAM,CAA6B;;IAM3C,SAAS,CAAC,IAAI,IAAI,IAAI;cAIN,cAAc,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;cAI7D,cAAc,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;cAI7D,cAAc,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;cAI7D,WAAW,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;cAG1D,eAAe,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/E,SAAS;CAIT;AAED,eAAO,MAAM,0BAA0B,8BAAqC,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* ts-common is the basic building blocks of our typescript projects
|
|
3
|
+
*
|
|
4
|
+
* Copyright (C) 2020 Intuition Robotics
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/
|
|
18
|
+
import {} from "../../../index.js";
|
|
19
|
+
import { BaseDB_ApiGeneratorCaller } from "@intuitionrobotics/db-api-generator/frontend";
|
|
20
|
+
import { ThunderDispatcher } from "@intuitionrobotics/thunderstorm/frontend";
|
|
21
|
+
const dispatch_onPermissionsGroupsLoaded = new ThunderDispatcher("__onPermissionsGroupsLoaded");
|
|
22
|
+
export class PermissionsGroupModule_Class extends BaseDB_ApiGeneratorCaller {
|
|
23
|
+
groups = [];
|
|
24
|
+
constructor() {
|
|
25
|
+
super({ key: "group", relativeUrl: "/v1/permissions/assign/group" }, "PermissionsGroupModule");
|
|
26
|
+
}
|
|
27
|
+
init() {
|
|
28
|
+
super.init();
|
|
29
|
+
}
|
|
30
|
+
async onEntryCreated(_response) {
|
|
31
|
+
this.query();
|
|
32
|
+
}
|
|
33
|
+
async onEntryDeleted(_response) {
|
|
34
|
+
this.query();
|
|
35
|
+
}
|
|
36
|
+
async onEntryUpdated(_response) {
|
|
37
|
+
this.query();
|
|
38
|
+
}
|
|
39
|
+
async onGotUnique(_response) {
|
|
40
|
+
}
|
|
41
|
+
async onQueryReturned(response) {
|
|
42
|
+
this.groups = response;
|
|
43
|
+
dispatch_onPermissionsGroupsLoaded.dispatchUI();
|
|
44
|
+
}
|
|
45
|
+
getGroups() {
|
|
46
|
+
return this.groups;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export const ApiCaller_PermissionsGroup = new PermissionsGroupModule_Class();
|
|
50
|
+
//# sourceMappingURL=ApiCaller_PermissionsGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiCaller_PermissionsGroup.js","sourceRoot":"","sources":["../../../../src/main/app-frontend/modules/assign/ApiCaller_PermissionsGroup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAEN,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAC,yBAAyB,EAAC,MAAM,8CAA8C,CAAC;AACvF,OAAO,EACN,iBAAiB,EACjB,MAAM,0CAA0C,CAAC;AAOlD,MAAM,kCAAkC,GAAG,IAAI,iBAAiB,CAA2D,6BAA6B,CAAC,CAAC;AAE1J,MAAM,OAAO,4BACZ,SAAQ,yBAA8C;IAC9C,MAAM,GAA0B,EAAE,CAAC;IAE3C;QACC,KAAK,CAAC,EAAC,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,8BAA8B,EAAC,EAAE,wBAAwB,CAAC,CAAC;IAC9F,CAAC;IAES,IAAI;QACb,KAAK,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,SAA8B;QAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,SAA8B;QAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;IAES,KAAK,CAAC,cAAc,CAAC,SAA8B;QAC5D,IAAI,CAAC,KAAK,EAAE,CAAC;IACd,CAAC;IAES,KAAK,CAAC,WAAW,CAAC,SAA8B;IAC1D,CAAC;IAES,KAAK,CAAC,eAAe,CAAC,QAA+B;QAC9D,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACvB,kCAAkC,CAAC,UAAU,EAAE,CAAC;IACjD,CAAC;IAED,SAAS;QACR,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;CAED;AAED,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,4BAA4B,EAAE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BaseDB_ApiGeneratorCaller } from "@intuitionrobotics/db-api-generator/frontend";
|
|
2
|
-
import { DB_PermissionsUser } from "../../../index";
|
|
2
|
+
import { type DB_PermissionsUser } from "../../../index.js";
|
|
3
3
|
export interface OnPermissionsUsersLoaded {
|
|
4
4
|
__onPermissionsUsersLoaded: () => void;
|
|
5
5
|
}
|
|
@@ -7,12 +7,13 @@ export declare class PermissionsUserModule_Class extends BaseDB_ApiGeneratorCall
|
|
|
7
7
|
private users;
|
|
8
8
|
constructor();
|
|
9
9
|
protected init(): void;
|
|
10
|
-
protected onEntryCreated(
|
|
11
|
-
protected onEntryDeleted(
|
|
12
|
-
protected onEntryUpdated(
|
|
13
|
-
protected onGotUnique(
|
|
10
|
+
protected onEntryCreated(_response: DB_PermissionsUser): Promise<void>;
|
|
11
|
+
protected onEntryDeleted(_response: DB_PermissionsUser): Promise<void>;
|
|
12
|
+
protected onEntryUpdated(_response: DB_PermissionsUser): Promise<void>;
|
|
13
|
+
protected onGotUnique(_response: DB_PermissionsUser): Promise<void>;
|
|
14
14
|
protected onQueryReturned(response: DB_PermissionsUser[]): Promise<void>;
|
|
15
15
|
getUserByAccountId(accountId: string): DB_PermissionsUser | undefined;
|
|
16
16
|
getUsers(): DB_PermissionsUser[];
|
|
17
17
|
}
|
|
18
18
|
export declare const ApiCaller_PermissionsUser: PermissionsUserModule_Class;
|
|
19
|
+
//# sourceMappingURL=ApiCaller_PermissionsUser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ApiCaller_PermissionsUser.d.ts","sourceRoot":"","sources":["../../../../src/main/app-frontend/modules/assign/ApiCaller_PermissionsUser.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAC,yBAAyB,EAAC,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAC,KAAK,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAG1D,MAAM,WAAW,wBAAwB;IACxC,0BAA0B,EAAE,MAAM,IAAI,CAAC;CACvC;AAID,qBAAa,2BACZ,SAAQ,yBAAyB,CAAC,kBAAkB,CAAC;IACrD,OAAO,CAAC,KAAK,CAA4B;;IAMzC,SAAS,CAAC,IAAI,IAAI,IAAI;cAGN,cAAc,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;cAG5D,cAAc,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;cAG5D,cAAc,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;cAI5D,WAAW,CAAC,SAAS,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;cAGzD,eAAe,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9E,kBAAkB,CAAC,SAAS,EAAE,MAAM;IAIpC,QAAQ;CAGR;AAED,eAAO,MAAM,yBAAyB,6BAAoC,CAAC"}
|