@drax/identity-back 0.11.5 → 0.12.2
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/controllers/RoleController.js +8 -39
- package/dist/controllers/TenantController.js +1 -28
- package/dist/controllers/UserApiKeyController.js +3 -3
- package/dist/controllers/UserController.js +48 -209
- package/dist/errors/BadCredentialsError.js +12 -0
- package/dist/factory/RoleServiceFactory.js +1 -0
- package/dist/factory/TenantServiceFactory.js +1 -0
- package/dist/factory/UserApiKeyServiceFactory.js +5 -4
- package/dist/factory/UserServiceFactory.js +1 -0
- package/dist/graphql/resolvers/role.resolvers.js +2 -2
- package/dist/graphql/resolvers/tenant.resolvers.js +2 -2
- package/dist/graphql/resolvers/user-api-key.resolvers.js +2 -2
- package/dist/graphql/resolvers/user.resolvers.js +1 -1
- package/dist/index.js +6 -0
- package/dist/middleware/apiKeyMiddleware.js +2 -2
- package/dist/models/RoleModel.js +10 -7
- package/dist/models/TenantModel.js +11 -8
- package/dist/models/UserApiKeyModel.js +10 -7
- package/dist/models/UserGroupModel.js +7 -7
- package/dist/models/UserModel.js +10 -8
- package/dist/rbac/Rbac.js +10 -8
- package/dist/repository/mongo/RoleMongoRepository.js +20 -65
- package/dist/repository/mongo/TenantMongoRepository.js +18 -66
- package/dist/repository/mongo/UserApiKeyMongoRepository.js +29 -47
- package/dist/repository/mongo/UserMongoRepository.js +56 -85
- package/dist/repository/sqlite/RoleSqliteRepository.js +30 -115
- package/dist/repository/sqlite/TenantSqliteRepository.js +15 -105
- package/dist/repository/sqlite/UserApiKeySqliteRepository.js +42 -117
- package/dist/repository/sqlite/UserSqliteRepository.js +49 -130
- package/dist/routes/RoleRoutes.js +35 -10
- package/dist/routes/TenantRoutes.js +18 -9
- package/dist/routes/UserApiKeyRoutes.js +20 -4
- package/dist/routes/UserRoutes.js +92 -17
- package/dist/schemas/LoginSchema.js +9 -0
- package/dist/schemas/PasswordSchema.js +12 -0
- package/dist/schemas/RegisterSchema.js +19 -0
- package/dist/schemas/RoleSchema.js +23 -0
- package/dist/schemas/TenantSchema.js +13 -0
- package/dist/schemas/UserApiKeySchema.js +14 -0
- package/dist/schemas/UserSchema.js +39 -0
- package/dist/services/PermissionService.js +5 -5
- package/dist/services/RoleService.js +6 -6
- package/dist/services/TenantService.js +6 -6
- package/dist/services/UserApiKeyService.js +5 -5
- package/dist/services/UserService.js +14 -14
- package/dist/setup/CreateOrUpdateRole.js +5 -2
- package/dist/setup/CreateUserIfNotExist.js +3 -1
- package/dist/setup/RecoveryUserPassword.js +1 -1
- package/dist/zod/EndpointZod.js +9 -0
- package/dist/zod/TenantSchema.js +12 -0
- package/dist/zod/TenantZod.js +5 -3
- package/dist/zod/UserApiKeyZod.js +7 -3
- package/package.json +10 -9
- package/src/controllers/RoleController.ts +8 -36
- package/src/controllers/TenantController.ts +2 -25
- package/src/controllers/UserApiKeyController.ts +3 -3
- package/src/controllers/UserController.ts +50 -183
- package/src/errors/BadCredentialsError.ts +18 -1
- package/src/factory/RoleServiceFactory.ts +1 -0
- package/src/factory/TenantServiceFactory.ts +1 -0
- package/src/factory/UserApiKeyServiceFactory.ts +5 -4
- package/src/factory/UserServiceFactory.ts +1 -0
- package/src/graphql/resolvers/role.resolvers.ts +3 -2
- package/src/graphql/resolvers/tenant.resolvers.ts +3 -2
- package/src/graphql/resolvers/user-api-key.resolvers.ts +3 -2
- package/src/graphql/resolvers/user.resolvers.ts +2 -1
- package/src/index.ts +16 -0
- package/src/interfaces/ITenantRepository.ts +2 -2
- package/src/interfaces/IUserApiKeyRepository.ts +2 -2
- package/src/interfaces/IUserRepository.ts +3 -2
- package/src/middleware/apiKeyMiddleware.ts +2 -2
- package/src/models/RoleModel.ts +12 -7
- package/src/models/TenantModel.ts +13 -8
- package/src/models/UserApiKeyModel.ts +12 -7
- package/src/models/UserGroupModel.ts +7 -7
- package/src/models/UserModel.ts +10 -8
- package/src/rbac/Rbac.ts +12 -9
- package/src/repository/mongo/RoleMongoRepository.ts +23 -94
- package/src/repository/mongo/TenantMongoRepository.ts +19 -98
- package/src/repository/mongo/UserApiKeyMongoRepository.ts +31 -56
- package/src/repository/mongo/UserMongoRepository.ts +71 -130
- package/src/repository/sqlite/RoleSqliteRepository.ts +37 -146
- package/src/repository/sqlite/TenantSqliteRepository.ts +16 -156
- package/src/repository/sqlite/UserApiKeySqliteRepository.ts +46 -151
- package/src/repository/sqlite/UserSqliteRepository.ts +59 -173
- package/src/routes/RoleRoutes.ts +35 -12
- package/src/routes/TenantRoutes.ts +25 -9
- package/src/routes/UserApiKeyRoutes.ts +23 -7
- package/src/routes/UserRoutes.ts +117 -34
- package/src/schemas/LoginSchema.ts +12 -0
- package/src/schemas/PasswordSchema.ts +16 -0
- package/src/{zod/UserZod.ts → schemas/RegisterSchema.ts} +7 -10
- package/src/schemas/RoleSchema.ts +29 -0
- package/src/schemas/TenantSchema.ts +22 -0
- package/src/{zod/UserApiKeyZod.ts → schemas/UserApiKeySchema.ts} +8 -3
- package/src/schemas/UserSchema.ts +57 -0
- package/src/services/PermissionService.ts +6 -5
- package/src/services/RoleService.ts +6 -6
- package/src/services/TenantService.ts +10 -10
- package/src/services/UserApiKeyService.ts +5 -5
- package/src/services/UserService.ts +15 -16
- package/src/setup/CreateOrUpdateRole.ts +7 -4
- package/src/setup/CreateUserIfNotExist.ts +5 -3
- package/src/setup/RecoveryUserPassword.ts +1 -1
- package/test/data-obj/apikey/root-mongo-user-apikey.ts +2 -1
- package/test/data-obj/roles/admin-sqlite-role.ts +2 -2
- package/test/data-obj/roles/operator-sqlite-role.ts +1 -1
- package/test/data-obj/tenants/company-sqlite-tenant.ts +6 -0
- package/test/data-obj/users/root-sqlite-user.ts +2 -2
- package/test/initializers/RoleSqliteInitializer.ts +1 -1
- package/test/repository/mongo/role-mongo-repository.test.ts +3 -3
- package/test/repository/mongo/user-apikey-mongo-repository.test.ts +5 -4
- package/test/repository/mongo/user-mongo-repository.test.ts +4 -4
- package/test/repository/sqlite/role-sqlite-repository.test.ts +21 -9
- package/test/repository/sqlite/tenant-sqlite-repository.test.ts +74 -0
- package/test/repository/sqlite/user-sqlite-repository.test.ts +15 -9
- package/test/routes/data/admin-role.ts +10 -0
- package/test/routes/data/root-user.ts +13 -0
- package/test/routes/helpers/CreateRootUserAndAdminRole.ts +17 -0
- package/test/routes/helpers/FastifyTestServerFactory.ts +34 -0
- package/test/routes/helpers/InitializePermissions.ts +23 -0
- package/test/routes/helpers/SetupIdentityDrax.ts +22 -0
- package/test/routes/tenant-route.test.ts +336 -0
- package/test/routes/user-route.test.ts +186 -0
- package/test/schemas/lab-schema.test.ts +110 -0
- package/test/service/mock-service.test.ts +3 -3
- package/test/service/role-service.test.ts +3 -3
- package/test/service/user-service.test.ts +16 -25
- package/test.db +0 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/types/controllers/RoleController.d.ts +0 -1
- package/types/controllers/RoleController.d.ts.map +1 -1
- package/types/controllers/TenantController.d.ts +0 -1
- package/types/controllers/TenantController.d.ts.map +1 -1
- package/types/controllers/UserController.d.ts +11 -4
- package/types/controllers/UserController.d.ts.map +1 -1
- package/types/errors/BadCredentialsError.d.ts +9 -1
- package/types/errors/BadCredentialsError.d.ts.map +1 -1
- package/types/factory/RoleServiceFactory.d.ts.map +1 -1
- package/types/factory/TenantServiceFactory.d.ts.map +1 -1
- package/types/factory/UserApiKeyServiceFactory.d.ts.map +1 -1
- package/types/factory/UserServiceFactory.d.ts.map +1 -1
- package/types/graphql/resolvers/role.resolvers.d.ts +3 -9
- package/types/graphql/resolvers/role.resolvers.d.ts.map +1 -1
- package/types/graphql/resolvers/tenant.resolvers.d.ts +3 -9
- package/types/graphql/resolvers/tenant.resolvers.d.ts.map +1 -1
- package/types/graphql/resolvers/user-api-key.resolvers.d.ts +3 -9
- package/types/graphql/resolvers/user-api-key.resolvers.d.ts.map +1 -1
- package/types/graphql/resolvers/user.resolvers.d.ts +3 -9
- package/types/graphql/resolvers/user.resolvers.d.ts.map +1 -1
- package/types/index.d.ts +5 -1
- package/types/index.d.ts.map +1 -1
- package/types/interfaces/ITenantRepository.d.ts +2 -2
- package/types/interfaces/ITenantRepository.d.ts.map +1 -1
- package/types/interfaces/IUserApiKeyRepository.d.ts +2 -2
- package/types/interfaces/IUserApiKeyRepository.d.ts.map +1 -1
- package/types/interfaces/IUserRepository.d.ts +3 -2
- package/types/interfaces/IUserRepository.d.ts.map +1 -1
- package/types/models/RoleModel.d.ts +7 -7
- package/types/models/RoleModel.d.ts.map +1 -1
- package/types/models/TenantModel.d.ts +7 -7
- package/types/models/TenantModel.d.ts.map +1 -1
- package/types/models/UserApiKeyModel.d.ts +7 -7
- package/types/models/UserApiKeyModel.d.ts.map +1 -1
- package/types/models/UserGroupModel.d.ts +2 -2
- package/types/models/UserGroupModel.d.ts.map +1 -1
- package/types/models/UserModel.d.ts +7 -7
- package/types/models/UserModel.d.ts.map +1 -1
- package/types/rbac/Rbac.d.ts +1 -1
- package/types/rbac/Rbac.d.ts.map +1 -1
- package/types/repository/mongo/RoleMongoRepository.d.ts +9 -11
- package/types/repository/mongo/RoleMongoRepository.d.ts.map +1 -1
- package/types/repository/mongo/TenantMongoRepository.d.ts +8 -11
- package/types/repository/mongo/TenantMongoRepository.d.ts.map +1 -1
- package/types/repository/mongo/UserApiKeyMongoRepository.d.ts +12 -5
- package/types/repository/mongo/UserApiKeyMongoRepository.d.ts.map +1 -1
- package/types/repository/mongo/UserMongoRepository.d.ts +11 -12
- package/types/repository/mongo/UserMongoRepository.d.ts.map +1 -1
- package/types/repository/sqlite/RoleSqliteRepository.d.ts +14 -14
- package/types/repository/sqlite/RoleSqliteRepository.d.ts.map +1 -1
- package/types/repository/sqlite/TenantSqliteRepository.d.ts +12 -14
- package/types/repository/sqlite/TenantSqliteRepository.d.ts.map +1 -1
- package/types/repository/sqlite/UserApiKeySqliteRepository.d.ts +15 -11
- package/types/repository/sqlite/UserApiKeySqliteRepository.d.ts.map +1 -1
- package/types/repository/sqlite/UserSqliteRepository.d.ts +15 -12
- package/types/repository/sqlite/UserSqliteRepository.d.ts.map +1 -1
- package/types/routes/RoleRoutes.d.ts.map +1 -1
- package/types/routes/TenantRoutes.d.ts.map +1 -1
- package/types/routes/UserApiKeyRoutes.d.ts.map +1 -1
- package/types/routes/UserRoutes.d.ts.map +1 -1
- package/types/schemas/LoginSchema.d.ts +20 -0
- package/types/schemas/LoginSchema.d.ts.map +1 -0
- package/types/schemas/PasswordSchema.d.ts +27 -0
- package/types/schemas/PasswordSchema.d.ts.map +1 -0
- package/types/schemas/RegisterSchema.d.ts +32 -0
- package/types/schemas/RegisterSchema.d.ts.map +1 -0
- package/types/schemas/RoleSchema.d.ts +67 -0
- package/types/schemas/RoleSchema.d.ts.map +1 -0
- package/types/schemas/TenantSchema.d.ts +29 -0
- package/types/schemas/TenantSchema.d.ts.map +1 -0
- package/types/schemas/UserApiKeySchema.d.ts +39 -0
- package/types/schemas/UserApiKeySchema.d.ts.map +1 -0
- package/types/schemas/UserSchema.d.ts +161 -0
- package/types/schemas/UserSchema.d.ts.map +1 -0
- package/types/services/PermissionService.d.ts +1 -0
- package/types/services/PermissionService.d.ts.map +1 -1
- package/types/services/TenantService.d.ts +3 -3
- package/types/services/TenantService.d.ts.map +1 -1
- package/types/services/UserService.d.ts.map +1 -1
- package/types/setup/CreateOrUpdateRole.d.ts +2 -2
- package/types/setup/CreateOrUpdateRole.d.ts.map +1 -1
- package/types/setup/CreateUserIfNotExist.d.ts +2 -2
- package/types/setup/CreateUserIfNotExist.d.ts.map +1 -1
- package/types/zod/EndpointZod.d.ts +20 -0
- package/types/zod/EndpointZod.d.ts.map +1 -0
- package/types/zod/TenantSchema.d.ts +26 -0
- package/types/zod/TenantSchema.d.ts.map +1 -0
- package/types/zod/TenantZod.d.ts +13 -3
- package/types/zod/TenantZod.d.ts.map +1 -1
- package/types/zod/UserApiKeyZod.d.ts +23 -3
- package/types/zod/UserApiKeyZod.d.ts.map +1 -1
- package/types/zod/UserZod.d.ts +6 -6
- package/src/zod/RoleZod.ts +0 -14
- package/src/zod/TenantZod.ts +0 -14
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AbstractFastifyController } from "@drax/crud-back";
|
|
2
|
-
import {
|
|
2
|
+
import { NotFoundError } from "@drax/common-back";
|
|
3
3
|
import RoleServiceFactory from "../factory/RoleServiceFactory.js";
|
|
4
4
|
import RolePermissions from "../permissions/RolePermissions.js";
|
|
5
5
|
import PermissionService from "../services/PermissionService.js";
|
|
@@ -13,22 +13,13 @@ class RoleController extends AbstractFastifyController {
|
|
|
13
13
|
const name = request.params.name;
|
|
14
14
|
const roleService = RoleServiceFactory();
|
|
15
15
|
let role = await roleService.findByName(name);
|
|
16
|
+
if (!role) {
|
|
17
|
+
throw new NotFoundError();
|
|
18
|
+
}
|
|
16
19
|
return role;
|
|
17
20
|
}
|
|
18
21
|
catch (e) {
|
|
19
|
-
|
|
20
|
-
if (e instanceof ValidationError) {
|
|
21
|
-
reply.statusCode = e.statusCode;
|
|
22
|
-
reply.send({ error: e.message, inputErrors: e.errors });
|
|
23
|
-
}
|
|
24
|
-
else if (e instanceof UnauthorizedError) {
|
|
25
|
-
reply.statusCode = e.statusCode;
|
|
26
|
-
reply.send({ error: e.message });
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
reply.statusCode = 500;
|
|
30
|
-
reply.send({ error: 'INTERNAL_SERVER_ERROR' });
|
|
31
|
-
}
|
|
22
|
+
this.handleError(e, reply);
|
|
32
23
|
}
|
|
33
24
|
}
|
|
34
25
|
async all(request, reply) {
|
|
@@ -37,26 +28,14 @@ class RoleController extends AbstractFastifyController {
|
|
|
37
28
|
const roleService = RoleServiceFactory();
|
|
38
29
|
let roles = await roleService.fetchAll();
|
|
39
30
|
if (request.rbac.getRole?.childRoles?.length > 0) {
|
|
40
|
-
return roles.filter(role => request.rbac.getRole.childRoles.some(childRole => childRole.
|
|
31
|
+
return roles.filter(role => request.rbac.getRole.childRoles.some(childRole => childRole._id === role._id));
|
|
41
32
|
}
|
|
42
33
|
else {
|
|
43
34
|
return roles;
|
|
44
35
|
}
|
|
45
36
|
}
|
|
46
37
|
catch (e) {
|
|
47
|
-
|
|
48
|
-
if (e instanceof ValidationError) {
|
|
49
|
-
reply.statusCode = e.statusCode;
|
|
50
|
-
reply.send({ error: e.message, inputErrors: e.errors });
|
|
51
|
-
}
|
|
52
|
-
else if (e instanceof UnauthorizedError) {
|
|
53
|
-
reply.statusCode = e.statusCode;
|
|
54
|
-
reply.send({ error: e.message });
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
reply.statusCode = 500;
|
|
58
|
-
reply.send({ error: 'INTERNAL_SERVER_ERROR' });
|
|
59
|
-
}
|
|
38
|
+
this.handleError(e, reply);
|
|
60
39
|
}
|
|
61
40
|
}
|
|
62
41
|
async permissions(request, reply) {
|
|
@@ -66,19 +45,9 @@ class RoleController extends AbstractFastifyController {
|
|
|
66
45
|
return permissions;
|
|
67
46
|
}
|
|
68
47
|
catch (e) {
|
|
69
|
-
|
|
70
|
-
if (e instanceof UnauthorizedError) {
|
|
71
|
-
reply.statusCode = e.statusCode;
|
|
72
|
-
reply.send({ error: e.message });
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
reply.statusCode = 500;
|
|
76
|
-
reply.send({ error: 'INTERNAL_SERVER_ERROR' });
|
|
77
|
-
}
|
|
48
|
+
this.handleError(e, reply);
|
|
78
49
|
}
|
|
79
50
|
}
|
|
80
|
-
async xxxx(request, reply) {
|
|
81
|
-
}
|
|
82
51
|
}
|
|
83
52
|
export default RoleController;
|
|
84
53
|
export { RoleController };
|
|
@@ -6,39 +6,12 @@ class TenantController extends AbstractFastifyController {
|
|
|
6
6
|
constructor() {
|
|
7
7
|
super(TenantServiceFactory(), TenantPermissions);
|
|
8
8
|
}
|
|
9
|
-
async findByName(request, reply) {
|
|
10
|
-
try {
|
|
11
|
-
request.rbac.assertPermission(this.permission.View);
|
|
12
|
-
if (!request.params.id) {
|
|
13
|
-
reply.statusCode = 400;
|
|
14
|
-
reply.send({ error: 'BAD REQUEST' });
|
|
15
|
-
}
|
|
16
|
-
const name = request.params.name;
|
|
17
|
-
let item = await this.service.findByName(name);
|
|
18
|
-
return item;
|
|
19
|
-
}
|
|
20
|
-
catch (e) {
|
|
21
|
-
console.error(e);
|
|
22
|
-
if (e instanceof ValidationError) {
|
|
23
|
-
reply.statusCode = e.statusCode;
|
|
24
|
-
reply.send({ error: e.message, inputErrors: e.errors });
|
|
25
|
-
}
|
|
26
|
-
else if (e instanceof UnauthorizedError) {
|
|
27
|
-
reply.statusCode = e.statusCode;
|
|
28
|
-
reply.send({ error: e.message });
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
reply.statusCode = 500;
|
|
32
|
-
reply.send({ error: 'INTERNAL_SERVER_ERROR' });
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
9
|
async all(request, reply) {
|
|
37
10
|
try {
|
|
38
11
|
request.rbac.assertPermission(this.permission.View);
|
|
39
12
|
let tenants = await this.service.fetchAll();
|
|
40
13
|
if (request.rbac.getAuthUser.tenantId) {
|
|
41
|
-
return tenants.filter(t => t.
|
|
14
|
+
return tenants.filter(t => t._id === request.rbac.getAuthUser.tenantId);
|
|
42
15
|
}
|
|
43
16
|
else {
|
|
44
17
|
return tenants;
|
|
@@ -15,7 +15,7 @@ class UserApiKeyController extends AbstractFastifyController {
|
|
|
15
15
|
]);
|
|
16
16
|
const filters = [];
|
|
17
17
|
if (!request.rbac.hasPermission(UserApiKeyPermissions.View)) {
|
|
18
|
-
filters.push({ field: "user", operator: "eq", value: request.rbac.
|
|
18
|
+
filters.push({ field: "user", operator: "eq", value: request.rbac.userId });
|
|
19
19
|
}
|
|
20
20
|
const page = request.query.page;
|
|
21
21
|
const limit = request.query.limit;
|
|
@@ -47,9 +47,9 @@ class UserApiKeyController extends AbstractFastifyController {
|
|
|
47
47
|
request.rbac.assertOrPermissions([UserApiKeyPermissions.Create, UserApiKeyPermissions.CreateMy]);
|
|
48
48
|
const payload = request.body;
|
|
49
49
|
if (!request.rbac.hasPermission(UserApiKeyPermissions.Create) || !payload.user) {
|
|
50
|
-
payload.user = request.rbac.
|
|
50
|
+
payload.user = request.rbac.userId;
|
|
51
51
|
}
|
|
52
|
-
payload.createdBy = request.rbac.
|
|
52
|
+
payload.createdBy = request.rbac.userId;
|
|
53
53
|
const userApiKeyService = UserApiKeyServiceFactory();
|
|
54
54
|
let userApiKey = await userApiKeyService.create(payload);
|
|
55
55
|
return userApiKey;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AbstractFastifyController } from "@drax/crud-back";
|
|
2
2
|
import RegistrationCompleteHtml from "../html/RegistrationCompleteHtml.js";
|
|
3
|
-
import { CommonConfig, DraxConfig, StoreManager,
|
|
3
|
+
import { CommonConfig, DraxConfig, StoreManager, ValidationError, UnauthorizedError, } from "@drax/common-back";
|
|
4
4
|
import UserServiceFactory from "../factory/UserServiceFactory.js";
|
|
5
5
|
import RoleServiceFactory from "../factory/RoleServiceFactory.js";
|
|
6
6
|
import UserPermissions from "../permissions/UserPermissions.js";
|
|
@@ -25,8 +25,8 @@ class UserController extends AbstractFastifyController {
|
|
|
25
25
|
catch (e) {
|
|
26
26
|
console.error('/api/auth error', e);
|
|
27
27
|
if (e instanceof BadCredentialsError) {
|
|
28
|
-
reply.code(
|
|
29
|
-
reply.send(
|
|
28
|
+
reply.code(e.statusCode);
|
|
29
|
+
reply.send(e.body);
|
|
30
30
|
}
|
|
31
31
|
reply.code(500);
|
|
32
32
|
reply.send({ error: 'error.server' });
|
|
@@ -36,7 +36,7 @@ class UserController extends AbstractFastifyController {
|
|
|
36
36
|
try {
|
|
37
37
|
if (request.authUser) {
|
|
38
38
|
const userService = UserServiceFactory();
|
|
39
|
-
let user = await userService.findById(request.
|
|
39
|
+
let user = await userService.findById(request.rbac.userId);
|
|
40
40
|
user.password = undefined;
|
|
41
41
|
delete user.password;
|
|
42
42
|
return user;
|
|
@@ -46,18 +46,7 @@ class UserController extends AbstractFastifyController {
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
catch (e) {
|
|
49
|
-
|
|
50
|
-
reply.code(401);
|
|
51
|
-
reply.send({ error: "Unauthorized" });
|
|
52
|
-
}
|
|
53
|
-
else if (e instanceof UnauthorizedError) {
|
|
54
|
-
reply.statusCode = e.statusCode;
|
|
55
|
-
reply.send({ error: e.message });
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
reply.statusCode = 500;
|
|
59
|
-
reply.send({ error: 'error.server' });
|
|
60
|
-
}
|
|
49
|
+
this.handleError(e, reply);
|
|
61
50
|
}
|
|
62
51
|
}
|
|
63
52
|
async paginate(request, reply) {
|
|
@@ -69,7 +58,7 @@ class UserController extends AbstractFastifyController {
|
|
|
69
58
|
const order = request.query.order;
|
|
70
59
|
const search = request.query.search;
|
|
71
60
|
const userService = UserServiceFactory();
|
|
72
|
-
const filters =
|
|
61
|
+
const filters = this.parseFilters(request.query.filters);
|
|
73
62
|
if (request.rbac.getAuthUser.tenantId) {
|
|
74
63
|
filters.push({ field: 'tenant', operator: 'eq', value: request.rbac.getAuthUser.tenantId });
|
|
75
64
|
}
|
|
@@ -81,18 +70,7 @@ class UserController extends AbstractFastifyController {
|
|
|
81
70
|
return paginateResult;
|
|
82
71
|
}
|
|
83
72
|
catch (e) {
|
|
84
|
-
|
|
85
|
-
reply.statusCode = e.statusCode;
|
|
86
|
-
reply.send({ error: e.message, inputErrors: e.errors });
|
|
87
|
-
}
|
|
88
|
-
else if (e instanceof UnauthorizedError) {
|
|
89
|
-
reply.statusCode = e.statusCode;
|
|
90
|
-
reply.send({ error: e.message });
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
reply.statusCode = 500;
|
|
94
|
-
reply.send({ error: 'error.server' });
|
|
95
|
-
}
|
|
73
|
+
this.handleError(e, reply);
|
|
96
74
|
}
|
|
97
75
|
}
|
|
98
76
|
async search(request, reply) {
|
|
@@ -107,19 +85,7 @@ class UserController extends AbstractFastifyController {
|
|
|
107
85
|
return item;
|
|
108
86
|
}
|
|
109
87
|
catch (e) {
|
|
110
|
-
|
|
111
|
-
if (e instanceof ValidationError) {
|
|
112
|
-
reply.statusCode = e.statusCode;
|
|
113
|
-
reply.send({ error: e.message, inputErrors: e.errors });
|
|
114
|
-
}
|
|
115
|
-
else if (e instanceof UnauthorizedError) {
|
|
116
|
-
reply.statusCode = e.statusCode;
|
|
117
|
-
reply.send({ error: e.message });
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
reply.statusCode = 500;
|
|
121
|
-
reply.send({ error: 'INTERNAL_SERVER_ERROR' });
|
|
122
|
-
}
|
|
88
|
+
this.handleError(e, reply);
|
|
123
89
|
}
|
|
124
90
|
}
|
|
125
91
|
async register(request, reply) {
|
|
@@ -140,28 +106,21 @@ class UserController extends AbstractFastifyController {
|
|
|
140
106
|
else if (role.name === 'Admin') {
|
|
141
107
|
payload.tenant = null;
|
|
142
108
|
}
|
|
143
|
-
payload.role = role.
|
|
109
|
+
payload.role = role._id.toString();
|
|
144
110
|
payload.origin ?? (payload.origin = 'Registry');
|
|
145
111
|
const userService = UserServiceFactory();
|
|
146
112
|
let user = await userService.register(payload);
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
113
|
+
if (user) {
|
|
114
|
+
//SEND EMAIL FOR EMAIL VERIFICATION
|
|
115
|
+
await UserEmailService.emailVerifyCode(user.emailCode, user.email);
|
|
116
|
+
return {
|
|
117
|
+
success: true,
|
|
118
|
+
message: 'User registered successfully.'
|
|
119
|
+
};
|
|
120
|
+
}
|
|
150
121
|
}
|
|
151
122
|
catch (e) {
|
|
152
|
-
|
|
153
|
-
if (e instanceof ValidationError) {
|
|
154
|
-
reply.statusCode = e.statusCode;
|
|
155
|
-
reply.send({ error: e.message, inputErrors: e.errors });
|
|
156
|
-
}
|
|
157
|
-
else if (e instanceof UnauthorizedError) {
|
|
158
|
-
reply.statusCode = e.statusCode;
|
|
159
|
-
reply.send({ error: e.message });
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
reply.statusCode = 500;
|
|
163
|
-
reply.send({ error: 'error.server' });
|
|
164
|
-
}
|
|
123
|
+
this.handleError(e, reply);
|
|
165
124
|
}
|
|
166
125
|
}
|
|
167
126
|
async verifyEmail(request, reply) {
|
|
@@ -175,13 +134,7 @@ class UserController extends AbstractFastifyController {
|
|
|
175
134
|
}
|
|
176
135
|
}
|
|
177
136
|
catch (e) {
|
|
178
|
-
|
|
179
|
-
if (e instanceof ValidationError) {
|
|
180
|
-
reply.statusCode = e.statusCode;
|
|
181
|
-
reply.send({ error: e.message, inputErrors: e.errors });
|
|
182
|
-
}
|
|
183
|
-
reply.code(500);
|
|
184
|
-
reply.send({ error: 'error.server' });
|
|
137
|
+
this.handleError(e, reply);
|
|
185
138
|
}
|
|
186
139
|
}
|
|
187
140
|
async verifyPhone(request, reply) {
|
|
@@ -191,28 +144,14 @@ class UserController extends AbstractFastifyController {
|
|
|
191
144
|
return await userService.verifyPhone(phoneCode);
|
|
192
145
|
}
|
|
193
146
|
catch (e) {
|
|
194
|
-
|
|
195
|
-
if (e instanceof ValidationError) {
|
|
196
|
-
reply.statusCode = e.statusCode;
|
|
197
|
-
reply.send({ error: e.message, inputErrors: e.errors });
|
|
198
|
-
}
|
|
199
|
-
reply.code(500);
|
|
200
|
-
reply.send({ error: 'error.server' });
|
|
147
|
+
this.handleError(e, reply);
|
|
201
148
|
}
|
|
202
149
|
}
|
|
203
150
|
async create(request, reply) {
|
|
204
151
|
try {
|
|
205
152
|
request.rbac.assertPermission(UserPermissions.Create);
|
|
206
153
|
const payload = request.body;
|
|
207
|
-
|
|
208
|
-
const role = await roleService.findById(payload.role);
|
|
209
|
-
if (!role) {
|
|
210
|
-
throw new ValidationError([{ field: 'role', reason: 'Role not found' }]);
|
|
211
|
-
}
|
|
212
|
-
else if (role.name === 'Admin') {
|
|
213
|
-
payload.tenant = null;
|
|
214
|
-
}
|
|
215
|
-
else if (request.rbac.getAuthUser.tenantId) {
|
|
154
|
+
if (request.rbac.getAuthUser.tenantId) {
|
|
216
155
|
payload.tenant = request.rbac.getAuthUser.tenantId;
|
|
217
156
|
}
|
|
218
157
|
payload.origin ?? (payload.origin = 'Admin');
|
|
@@ -221,19 +160,7 @@ class UserController extends AbstractFastifyController {
|
|
|
221
160
|
return user;
|
|
222
161
|
}
|
|
223
162
|
catch (e) {
|
|
224
|
-
|
|
225
|
-
if (e instanceof ValidationError) {
|
|
226
|
-
reply.statusCode = e.statusCode;
|
|
227
|
-
reply.send({ error: e.message, inputErrors: e.errors });
|
|
228
|
-
}
|
|
229
|
-
else if (e instanceof UnauthorizedError) {
|
|
230
|
-
reply.statusCode = e.statusCode;
|
|
231
|
-
reply.send({ error: e.message });
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
reply.statusCode = 500;
|
|
235
|
-
reply.send({ error: 'error.server' });
|
|
236
|
-
}
|
|
163
|
+
this.handleError(e, reply);
|
|
237
164
|
}
|
|
238
165
|
}
|
|
239
166
|
async update(request, reply) {
|
|
@@ -241,15 +168,7 @@ class UserController extends AbstractFastifyController {
|
|
|
241
168
|
request.rbac.assertPermission(UserPermissions.Update);
|
|
242
169
|
const id = request.params.id;
|
|
243
170
|
const payload = request.body;
|
|
244
|
-
|
|
245
|
-
const role = await roleService.findById(payload.role);
|
|
246
|
-
if (!role) {
|
|
247
|
-
throw new ValidationError([{ field: 'role', reason: 'Role not found' }]);
|
|
248
|
-
}
|
|
249
|
-
else if (role.name === 'Admin') {
|
|
250
|
-
payload.tenant = null;
|
|
251
|
-
}
|
|
252
|
-
else if (request.rbac.getAuthUser.tenantId) {
|
|
171
|
+
if (request.rbac.getAuthUser.tenantId) {
|
|
253
172
|
payload.tenant = request.rbac.getAuthUser.tenantId;
|
|
254
173
|
}
|
|
255
174
|
const userService = UserServiceFactory();
|
|
@@ -257,23 +176,7 @@ class UserController extends AbstractFastifyController {
|
|
|
257
176
|
return user;
|
|
258
177
|
}
|
|
259
178
|
catch (e) {
|
|
260
|
-
|
|
261
|
-
if (e instanceof ValidationError) {
|
|
262
|
-
reply.statusCode = e.statusCode;
|
|
263
|
-
reply.send({ error: e.message, inputErrors: e.errors });
|
|
264
|
-
}
|
|
265
|
-
if (e instanceof UnauthorizedError) {
|
|
266
|
-
reply.statusCode = e.statusCode;
|
|
267
|
-
reply.send({ error: e.message });
|
|
268
|
-
}
|
|
269
|
-
else if (e instanceof UnauthorizedError) {
|
|
270
|
-
reply.statusCode = e.statusCode;
|
|
271
|
-
reply.send({ error: e.message });
|
|
272
|
-
}
|
|
273
|
-
else {
|
|
274
|
-
reply.statusCode = 500;
|
|
275
|
-
reply.send({ error: 'error.server' });
|
|
276
|
-
}
|
|
179
|
+
this.handleError(e, reply);
|
|
277
180
|
}
|
|
278
181
|
}
|
|
279
182
|
async delete(request, reply) {
|
|
@@ -283,26 +186,24 @@ class UserController extends AbstractFastifyController {
|
|
|
283
186
|
const userService = UserServiceFactory();
|
|
284
187
|
let r = await userService.delete(id);
|
|
285
188
|
if (r) {
|
|
286
|
-
reply.send({
|
|
189
|
+
reply.send({
|
|
190
|
+
id: id,
|
|
191
|
+
message: 'Item deleted successfully',
|
|
192
|
+
deleted: true,
|
|
193
|
+
deletedAt: new Date(),
|
|
194
|
+
});
|
|
287
195
|
}
|
|
288
196
|
else {
|
|
289
|
-
reply.
|
|
197
|
+
reply.send({
|
|
198
|
+
id: id,
|
|
199
|
+
message: 'Item not deleted',
|
|
200
|
+
deleted: false,
|
|
201
|
+
deletedAt: new Date(),
|
|
202
|
+
});
|
|
290
203
|
}
|
|
291
204
|
}
|
|
292
205
|
catch (e) {
|
|
293
|
-
|
|
294
|
-
if (e instanceof ValidationError) {
|
|
295
|
-
reply.statusCode = e.statusCode;
|
|
296
|
-
reply.send({ error: e.message, inputErrors: e.errors });
|
|
297
|
-
}
|
|
298
|
-
else if (e instanceof UnauthorizedError) {
|
|
299
|
-
reply.statusCode = e.statusCode;
|
|
300
|
-
reply.send({ error: e.message });
|
|
301
|
-
}
|
|
302
|
-
else {
|
|
303
|
-
reply.statusCode = 500;
|
|
304
|
-
reply.send({ error: 'error.server' });
|
|
305
|
-
}
|
|
206
|
+
this.handleError(e, reply);
|
|
306
207
|
}
|
|
307
208
|
}
|
|
308
209
|
async passwordRecoveryRequest(request, reply) {
|
|
@@ -322,19 +223,7 @@ class UserController extends AbstractFastifyController {
|
|
|
322
223
|
reply.send({ message });
|
|
323
224
|
}
|
|
324
225
|
catch (e) {
|
|
325
|
-
|
|
326
|
-
if (e instanceof ValidationError) {
|
|
327
|
-
reply.statusCode = e.statusCode;
|
|
328
|
-
reply.send({ error: e.message, inputErrors: e.errors });
|
|
329
|
-
}
|
|
330
|
-
else if (e instanceof SecuritySensitiveError) {
|
|
331
|
-
reply.statusCode = e.statusCode;
|
|
332
|
-
reply.send({ message });
|
|
333
|
-
}
|
|
334
|
-
else {
|
|
335
|
-
reply.statusCode = 500;
|
|
336
|
-
reply.send({ error: 'error.server' });
|
|
337
|
-
}
|
|
226
|
+
this.handleError(e, reply);
|
|
338
227
|
}
|
|
339
228
|
}
|
|
340
229
|
async recoveryPasswordComplete(request, reply) {
|
|
@@ -358,15 +247,7 @@ class UserController extends AbstractFastifyController {
|
|
|
358
247
|
}
|
|
359
248
|
}
|
|
360
249
|
catch (e) {
|
|
361
|
-
|
|
362
|
-
if (e instanceof ValidationError) {
|
|
363
|
-
reply.statusCode = e.statusCode;
|
|
364
|
-
reply.send({ error: e.message, inputErrors: e.errors });
|
|
365
|
-
}
|
|
366
|
-
else {
|
|
367
|
-
reply.statusCode = 500;
|
|
368
|
-
reply.send({ error: 'error.server' });
|
|
369
|
-
}
|
|
250
|
+
this.handleError(e, reply);
|
|
370
251
|
}
|
|
371
252
|
}
|
|
372
253
|
async changeMyPassword(request, reply) {
|
|
@@ -378,22 +259,11 @@ class UserController extends AbstractFastifyController {
|
|
|
378
259
|
const currentPassword = request.body.currentPassword;
|
|
379
260
|
const newPassword = request.body.newPassword;
|
|
380
261
|
const userService = UserServiceFactory();
|
|
381
|
-
|
|
262
|
+
await userService.changeOwnPassword(userId, currentPassword, newPassword);
|
|
263
|
+
return { message: 'Password updated successfully' };
|
|
382
264
|
}
|
|
383
265
|
catch (e) {
|
|
384
|
-
|
|
385
|
-
if (e instanceof ValidationError) {
|
|
386
|
-
reply.statusCode = e.statusCode;
|
|
387
|
-
reply.send({ error: e.message, inputErrors: e.errors });
|
|
388
|
-
}
|
|
389
|
-
else if (e instanceof UnauthorizedError) {
|
|
390
|
-
reply.statusCode = e.statusCode;
|
|
391
|
-
reply.send({ error: e.message });
|
|
392
|
-
}
|
|
393
|
-
else {
|
|
394
|
-
reply.statusCode = 500;
|
|
395
|
-
reply.send({ error: 'error.server' });
|
|
396
|
-
}
|
|
266
|
+
this.handleError(e, reply);
|
|
397
267
|
}
|
|
398
268
|
}
|
|
399
269
|
async changePassword(request, reply) {
|
|
@@ -405,28 +275,17 @@ class UserController extends AbstractFastifyController {
|
|
|
405
275
|
}
|
|
406
276
|
const newPassword = request.body.newPassword;
|
|
407
277
|
const userService = UserServiceFactory();
|
|
408
|
-
|
|
278
|
+
await userService.changeUserPassword(userId, newPassword);
|
|
279
|
+
return { message: 'Password updated successfully' };
|
|
409
280
|
}
|
|
410
281
|
catch (e) {
|
|
411
|
-
|
|
412
|
-
if (e instanceof ValidationError) {
|
|
413
|
-
reply.statusCode = e.statusCode;
|
|
414
|
-
reply.send({ error: e.message, inputErrors: e.errors });
|
|
415
|
-
}
|
|
416
|
-
else if (e instanceof UnauthorizedError) {
|
|
417
|
-
reply.statusCode = e.statusCode;
|
|
418
|
-
reply.send({ error: e.message });
|
|
419
|
-
}
|
|
420
|
-
else {
|
|
421
|
-
reply.statusCode = 500;
|
|
422
|
-
reply.send({ error: 'error.server' });
|
|
423
|
-
}
|
|
282
|
+
this.handleError(e, reply);
|
|
424
283
|
}
|
|
425
284
|
}
|
|
426
285
|
async updateAvatar(request, reply) {
|
|
427
286
|
try {
|
|
428
287
|
request.rbac.assertAuthenticated();
|
|
429
|
-
const userId = request.rbac.
|
|
288
|
+
const userId = request.rbac.userId;
|
|
430
289
|
const data = await request.file();
|
|
431
290
|
const file = {
|
|
432
291
|
filename: data.filename,
|
|
@@ -447,19 +306,7 @@ class UserController extends AbstractFastifyController {
|
|
|
447
306
|
};
|
|
448
307
|
}
|
|
449
308
|
catch (e) {
|
|
450
|
-
|
|
451
|
-
if (e instanceof UploadFileError) {
|
|
452
|
-
reply.statusCode = e.statusCode;
|
|
453
|
-
reply.send({ error: e.message });
|
|
454
|
-
}
|
|
455
|
-
else if (e instanceof UnauthorizedError) {
|
|
456
|
-
reply.statusCode = e.statusCode;
|
|
457
|
-
reply.send({ error: e.message });
|
|
458
|
-
}
|
|
459
|
-
else {
|
|
460
|
-
reply.statusCode = 500;
|
|
461
|
-
reply.send({ error: 'INTERNAL_SERVER_ERROR' });
|
|
462
|
-
}
|
|
309
|
+
this.handleError(e, reply);
|
|
463
310
|
}
|
|
464
311
|
}
|
|
465
312
|
async getAvatar(request, reply) {
|
|
@@ -471,15 +318,7 @@ class UserController extends AbstractFastifyController {
|
|
|
471
318
|
return reply.sendFile(filename, fileDir);
|
|
472
319
|
}
|
|
473
320
|
catch (e) {
|
|
474
|
-
|
|
475
|
-
if (e instanceof UnauthorizedError) {
|
|
476
|
-
reply.statusCode = e.statusCode;
|
|
477
|
-
reply.send({ error: e.message });
|
|
478
|
-
}
|
|
479
|
-
else {
|
|
480
|
-
reply.statusCode = 500;
|
|
481
|
-
reply.send({ error: 'INTERNAL_SERVER_ERROR' });
|
|
482
|
-
}
|
|
321
|
+
this.handleError(e, reply);
|
|
483
322
|
}
|
|
484
323
|
}
|
|
485
324
|
}
|
|
@@ -2,9 +2,21 @@ class BadCredentialsError extends Error {
|
|
|
2
2
|
constructor() {
|
|
3
3
|
super('error.badCredentials');
|
|
4
4
|
this.name = 'BadCredentialsError';
|
|
5
|
+
this.message = 'error.badCredentials';
|
|
5
6
|
}
|
|
6
7
|
get statusCode() {
|
|
7
8
|
return 401;
|
|
8
9
|
}
|
|
10
|
+
get i18nMessage() {
|
|
11
|
+
return 'error.badCredentials';
|
|
12
|
+
}
|
|
13
|
+
get body() {
|
|
14
|
+
return {
|
|
15
|
+
statusCode: this.statusCode,
|
|
16
|
+
error: this.name,
|
|
17
|
+
message: this.message,
|
|
18
|
+
i18nMessage: this.i18nMessage,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
9
21
|
}
|
|
10
22
|
export default BadCredentialsError;
|
|
@@ -13,6 +13,7 @@ const RoleServiceFactory = (verbose = false) => {
|
|
|
13
13
|
case COMMON.DB_ENGINES.SQLITE:
|
|
14
14
|
const dbFile = DraxConfig.getOrLoad(CommonConfig.SqliteDbFile);
|
|
15
15
|
roleRepository = new RoleSqliteRepository(dbFile, verbose);
|
|
16
|
+
roleRepository.build();
|
|
16
17
|
break;
|
|
17
18
|
default:
|
|
18
19
|
throw new Error("DraxConfig.DB_ENGINE must be one of " + Object.values(COMMON.DB_ENGINES).join(", "));
|
|
@@ -13,6 +13,7 @@ const TenantServiceFactory = (verbose = false) => {
|
|
|
13
13
|
case COMMON.DB_ENGINES.SQLITE:
|
|
14
14
|
const dbFile = DraxConfig.getOrLoad(CommonConfig.SqliteDbFile);
|
|
15
15
|
tenantRepository = new TenantSqliteRepository(dbFile, verbose);
|
|
16
|
+
tenantRepository.build();
|
|
16
17
|
break;
|
|
17
18
|
default:
|
|
18
19
|
throw new Error("DraxConfig.DB_ENGINE must be one of " + Object.values(COMMON.DB_ENGINES).join(", "));
|
|
@@ -5,19 +5,20 @@ import { COMMON, CommonConfig, DraxConfig } from "@drax/common-back";
|
|
|
5
5
|
let userService;
|
|
6
6
|
const UserApiKeyServiceFactory = (verbose = false) => {
|
|
7
7
|
if (!userService) {
|
|
8
|
-
let
|
|
8
|
+
let userApiKeyRepository;
|
|
9
9
|
switch (DraxConfig.getOrLoad(CommonConfig.DbEngine)) {
|
|
10
10
|
case COMMON.DB_ENGINES.MONGODB:
|
|
11
|
-
|
|
11
|
+
userApiKeyRepository = new UserApiKeyMongoRepository();
|
|
12
12
|
break;
|
|
13
13
|
case COMMON.DB_ENGINES.SQLITE:
|
|
14
14
|
const dbFile = DraxConfig.getOrLoad(CommonConfig.SqliteDbFile);
|
|
15
|
-
|
|
15
|
+
userApiKeyRepository = new UserApiKeySqliteRepository(dbFile, verbose);
|
|
16
|
+
userApiKeyRepository.build();
|
|
16
17
|
break;
|
|
17
18
|
default:
|
|
18
19
|
throw new Error("DraxConfig.DB_ENGINE must be one of " + Object.values(COMMON.DB_ENGINES).join(", "));
|
|
19
20
|
}
|
|
20
|
-
userService = new UserApiKeyService(
|
|
21
|
+
userService = new UserApiKeyService(userApiKeyRepository);
|
|
21
22
|
}
|
|
22
23
|
return userService;
|
|
23
24
|
};
|
|
@@ -13,6 +13,7 @@ const UserServiceFactory = (verbose = false) => {
|
|
|
13
13
|
case COMMON.DB_ENGINES.SQLITE:
|
|
14
14
|
const dbFile = DraxConfig.getOrLoad(CommonConfig.SqliteDbFile);
|
|
15
15
|
userRepository = new UserSqliteRepository(dbFile, verbose);
|
|
16
|
+
userRepository.build();
|
|
16
17
|
break;
|
|
17
18
|
default:
|
|
18
19
|
throw new Error("DraxConfig.DB_ENGINE must be one of " + Object.values(COMMON.DB_ENGINES).join(", "));
|
|
@@ -37,7 +37,7 @@ export default {
|
|
|
37
37
|
const roleService = RoleServiceFactory();
|
|
38
38
|
const roles = await roleService.fetchAll();
|
|
39
39
|
if (rbac.getRole?.childRoles?.length > 0) {
|
|
40
|
-
return roles.filter(role => rbac.getRole.childRoles.some(childRole => childRole.
|
|
40
|
+
return roles.filter(role => rbac.getRole.childRoles.some(childRole => childRole._id === role._id));
|
|
41
41
|
}
|
|
42
42
|
else {
|
|
43
43
|
return roles;
|
|
@@ -63,7 +63,7 @@ export default {
|
|
|
63
63
|
throw new GraphQLError('error.server');
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
|
-
paginateRole: async (_, { options = { page: 1, limit: 5, orderBy: "", order:
|
|
66
|
+
paginateRole: async (_, { options = { page: 1, limit: 5, orderBy: "", order: "asc", search: "", filters: [] } }, { rbac }) => {
|
|
67
67
|
try {
|
|
68
68
|
rbac.assertPermission(IdentityPermissions.ViewRole);
|
|
69
69
|
const roleService = RoleServiceFactory();
|
|
@@ -36,7 +36,7 @@ export default {
|
|
|
36
36
|
const tenantService = TenantServiceFactory();
|
|
37
37
|
const tenants = await tenantService.fetchAll();
|
|
38
38
|
if (rbac.getAuthUser.tenantId) {
|
|
39
|
-
return tenants.filter(t => t.
|
|
39
|
+
return tenants.filter(t => t._id === rbac.getAuthUser.tenantId);
|
|
40
40
|
}
|
|
41
41
|
else {
|
|
42
42
|
return tenants;
|
|
@@ -49,7 +49,7 @@ export default {
|
|
|
49
49
|
throw new GraphQLError('error.server');
|
|
50
50
|
}
|
|
51
51
|
},
|
|
52
|
-
paginateTenant: async (_, { options = { page: 1, limit: 5, orderBy: "", order:
|
|
52
|
+
paginateTenant: async (_, { options = { page: 1, limit: 5, orderBy: "", order: "asc", search: "", filters: [] } }, { rbac }) => {
|
|
53
53
|
try {
|
|
54
54
|
rbac.assertPermission(IdentityPermissions.ViewTenant);
|
|
55
55
|
const tenantService = TenantServiceFactory();
|