@drax/identity-back 0.0.22 → 0.0.25
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/factory/RoleServiceFactory.js +0 -1
- package/dist/factory/TenantServiceFactory.js +0 -1
- package/dist/factory/UserServiceFactory.js +0 -1
- package/dist/graphql/resolvers/role.resolvers.js +2 -2
- package/dist/graphql/resolvers/tenant.resolvers.js +2 -2
- package/dist/graphql/resolvers/user.resolvers.js +2 -2
- package/dist/graphql/types/role.graphql +1 -1
- package/dist/graphql/types/tenant.graphql +1 -1
- package/dist/graphql/types/user.graphql +1 -1
- package/dist/models/UserModel.js +0 -1
- package/dist/repository/mongo/RoleMongoRepository.js +1 -1
- package/dist/repository/mongo/TenantMongoRepository.js +1 -1
- package/dist/repository/mongo/UserMongoRepository.js +1 -1
- package/dist/repository/sqlite/RoleSqliteRepository.js +33 -33
- package/dist/repository/sqlite/TenantSqliteRepository.js +1 -1
- package/dist/repository/sqlite/UserSqliteRepository.js +1 -1
- package/dist/routes/RoleRoutes.js +3 -1
- package/dist/routes/TenantRoutes.js +3 -1
- package/dist/routes/UserRoutes.js +3 -1
- package/dist/services/RoleService.js +2 -2
- package/dist/services/TenantService.js +2 -2
- package/dist/services/UserService.js +2 -2
- package/package.json +5 -2
- package/src/factory/RoleServiceFactory.ts +0 -1
- package/src/factory/TenantServiceFactory.ts +0 -1
- package/src/factory/UserServiceFactory.ts +0 -1
- package/src/graphql/resolvers/role.resolvers.ts +2 -2
- package/src/graphql/resolvers/tenant.resolvers.ts +2 -2
- package/src/graphql/resolvers/user.resolvers.ts +2 -2
- package/src/graphql/types/role.graphql +1 -1
- package/src/graphql/types/tenant.graphql +1 -1
- package/src/graphql/types/user.graphql +1 -1
- package/src/index.ts +6 -9
- package/src/interfaces/IRoleRepository.ts +5 -10
- package/src/interfaces/ITenantRepository.ts +4 -10
- package/src/interfaces/IUserRepository.ts +6 -12
- package/src/middleware/jwtMiddleware.ts +1 -1
- package/src/middleware/rbacMiddleware.ts +1 -2
- package/src/models/RoleModel.ts +1 -1
- package/src/models/TenantModel.ts +1 -1
- package/src/models/UserGroupModel.ts +1 -1
- package/src/models/UserModel.ts +1 -2
- package/src/rbac/Rbac.ts +1 -2
- package/src/repository/mongo/RoleMongoRepository.ts +14 -8
- package/src/repository/mongo/TenantMongoRepository.ts +14 -7
- package/src/repository/mongo/UserMongoRepository.ts +14 -9
- package/src/repository/sqlite/RoleSqliteRepository.ts +53 -44
- package/src/repository/sqlite/TenantSqliteRepository.ts +13 -8
- package/src/repository/sqlite/UserSqliteRepository.ts +15 -10
- package/src/routes/RoleRoutes.ts +7 -4
- package/src/routes/TenantRoutes.ts +7 -5
- package/src/routes/UserRoutes.ts +7 -4
- package/src/services/RoleService.ts +15 -8
- package/src/services/TenantService.ts +15 -9
- package/src/services/UserService.ts +13 -7
- package/src/setup/CreateOrUpdateRole.ts +2 -2
- package/src/setup/CreateUserIfNotExist.ts +1 -1
- package/test/data-obj/roles/admin-mongo-role.ts +1 -1
- package/test/initializers/RoleMongoInitializer.ts +1 -1
- package/test/initializers/RoleSqliteInitializer.ts +1 -1
- package/test/repository/mongo/role-mongo-repository.test.ts +1 -1
- package/test/repository/mongo/user-mongo-repository.test.ts +1 -1
- package/test/repository/sqlite/role-sqlite-repository.test.ts +1 -1
- package/test/repository/sqlite/user-sqlite-repository.test.ts +2 -2
- package/test/service/mock-service.test.ts +2 -2
- package/test/service/role-service.test.ts +2 -2
- package/test/service/user-service.test.ts +3 -3
- package/tsconfig.tsbuildinfo +1 -1
- package/types/factory/RoleServiceFactory.d.ts.map +1 -1
- package/types/factory/TenantServiceFactory.d.ts.map +1 -1
- package/types/factory/UserServiceFactory.d.ts.map +1 -1
- package/types/graphql/resolvers/role.resolvers.d.ts +10 -8
- package/types/graphql/resolvers/role.resolvers.d.ts.map +1 -1
- package/types/graphql/resolvers/tenant.resolvers.d.ts +10 -8
- package/types/graphql/resolvers/tenant.resolvers.d.ts.map +1 -1
- package/types/graphql/resolvers/user.resolvers.d.ts +8 -6
- package/types/graphql/resolvers/user.resolvers.d.ts.map +1 -1
- package/types/index.d.ts +3 -5
- package/types/index.d.ts.map +1 -1
- package/types/interfaces/IRoleRepository.d.ts +4 -10
- package/types/interfaces/IRoleRepository.d.ts.map +1 -1
- package/types/interfaces/ITenantRepository.d.ts +4 -10
- package/types/interfaces/ITenantRepository.d.ts.map +1 -1
- package/types/interfaces/IUserRepository.d.ts +5 -11
- package/types/interfaces/IUserRepository.d.ts.map +1 -1
- package/types/middleware/rbacMiddleware.d.ts.map +1 -1
- package/types/models/RoleModel.d.ts +1 -1
- package/types/models/RoleModel.d.ts.map +1 -1
- package/types/models/TenantModel.d.ts +1 -1
- package/types/models/TenantModel.d.ts.map +1 -1
- package/types/models/UserGroupModel.d.ts +1 -1
- package/types/models/UserGroupModel.d.ts.map +1 -1
- package/types/models/UserModel.d.ts +1 -1
- package/types/models/UserModel.d.ts.map +1 -1
- package/types/rbac/Rbac.d.ts +1 -2
- package/types/rbac/Rbac.d.ts.map +1 -1
- package/types/repository/mongo/RoleMongoRepository.d.ts +7 -8
- package/types/repository/mongo/RoleMongoRepository.d.ts.map +1 -1
- package/types/repository/mongo/TenantMongoRepository.d.ts +7 -8
- package/types/repository/mongo/TenantMongoRepository.d.ts.map +1 -1
- package/types/repository/mongo/UserMongoRepository.d.ts +7 -9
- package/types/repository/mongo/UserMongoRepository.d.ts.map +1 -1
- package/types/repository/sqlite/RoleSqliteRepository.d.ts +10 -11
- package/types/repository/sqlite/RoleSqliteRepository.d.ts.map +1 -1
- package/types/repository/sqlite/TenantSqliteRepository.d.ts +7 -8
- package/types/repository/sqlite/TenantSqliteRepository.d.ts.map +1 -1
- package/types/repository/sqlite/UserSqliteRepository.d.ts +9 -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/UserRoutes.d.ts.map +1 -1
- package/types/services/RoleService.d.ts +7 -7
- package/types/services/RoleService.d.ts.map +1 -1
- package/types/services/TenantService.d.ts +7 -7
- package/types/services/TenantService.d.ts.map +1 -1
- package/types/services/UserService.d.ts +6 -6
- 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 +1 -1
- package/types/setup/CreateUserIfNotExist.d.ts.map +1 -1
- package/src/interfaces/IID.ts +0 -5
- package/src/interfaces/IJwtUser.ts +0 -7
- package/src/interfaces/IRole.ts +0 -21
- package/src/interfaces/ITenant.ts +0 -9
- package/src/interfaces/IUser.ts +0 -48
- package/src/interfaces/IUserGroup.ts +0 -11
|
@@ -14,7 +14,6 @@ const RoleServiceFactory = (verbose = false) => {
|
|
|
14
14
|
case DbEngine.Sqlite:
|
|
15
15
|
console.log("RoleServiceFactory DB ENGINE SQLITE");
|
|
16
16
|
roleRepository = new RoleSqliteRepository(DbSetupUtils.getDbConfig(), verbose);
|
|
17
|
-
roleRepository.table();
|
|
18
17
|
break;
|
|
19
18
|
}
|
|
20
19
|
roleService = new RoleService(roleRepository);
|
|
@@ -14,7 +14,6 @@ const TenantServiceFactory = (verbose = false) => {
|
|
|
14
14
|
case DbEngine.Sqlite:
|
|
15
15
|
console.log("TenantServiceFactory DB ENGINE SQLITE");
|
|
16
16
|
tenantRepository = new TenantSqliteRepository(DbSetupUtils.getDbConfig(), verbose);
|
|
17
|
-
tenantRepository.table();
|
|
18
17
|
break;
|
|
19
18
|
}
|
|
20
19
|
tenantService = new TenantService(tenantRepository);
|
|
@@ -14,7 +14,6 @@ const UserServiceFactory = (verbose = false) => {
|
|
|
14
14
|
case DbEngine.Sqlite:
|
|
15
15
|
console.log("UserServiceFactory DB ENGINE SQLITE");
|
|
16
16
|
userRepository = new UserSqliteRepository(DbSetupUtils.getDbConfig(), verbose);
|
|
17
|
-
userRepository.table();
|
|
18
17
|
break;
|
|
19
18
|
}
|
|
20
19
|
userService = new UserService(userRepository);
|
|
@@ -64,11 +64,11 @@ export default {
|
|
|
64
64
|
throw new GraphQLError('error.server');
|
|
65
65
|
}
|
|
66
66
|
},
|
|
67
|
-
paginateRole: async (_, { page, limit,
|
|
67
|
+
paginateRole: async (_, { page, limit, orderBy, orderDesc, search }, { rbac }) => {
|
|
68
68
|
try {
|
|
69
69
|
rbac.assertPermission(IdentityPermissions.ViewRole);
|
|
70
70
|
const roleService = RoleServiceFactory();
|
|
71
|
-
return await roleService.paginate(page, limit,
|
|
71
|
+
return await roleService.paginate({ page, limit, orderBy, orderDesc, search });
|
|
72
72
|
}
|
|
73
73
|
catch (e) {
|
|
74
74
|
console.error("paginateRole", e);
|
|
@@ -50,11 +50,11 @@ export default {
|
|
|
50
50
|
throw new GraphQLError('error.server');
|
|
51
51
|
}
|
|
52
52
|
},
|
|
53
|
-
paginateTenant: async (_, { page, limit,
|
|
53
|
+
paginateTenant: async (_, { page, limit, orderBy, orderDesc, search }, { rbac }) => {
|
|
54
54
|
try {
|
|
55
55
|
rbac.assertPermission(IdentityPermissions.ViewTenant);
|
|
56
56
|
const tenantService = TenantServiceFactory();
|
|
57
|
-
return await tenantService.paginate(page, limit,
|
|
57
|
+
return await tenantService.paginate({ page, limit, orderBy, orderDesc, search });
|
|
58
58
|
}
|
|
59
59
|
catch (e) {
|
|
60
60
|
console.error("paginateTenant", e);
|
|
@@ -34,14 +34,14 @@ export default {
|
|
|
34
34
|
throw new GraphQLError('error.server');
|
|
35
35
|
}
|
|
36
36
|
},
|
|
37
|
-
paginateUser: async (_, { page, limit, search, filters = [] }, { rbac }) => {
|
|
37
|
+
paginateUser: async (_, { page, limit, orderBy, orderDesc, search, filters = [] }, { rbac }) => {
|
|
38
38
|
try {
|
|
39
39
|
rbac.assertPermission(IdentityPermissions.ViewUser);
|
|
40
40
|
let userService = UserServiceFactory();
|
|
41
41
|
if (rbac.getAuthUser.tenantId) {
|
|
42
42
|
filters.push({ field: 'tenant', operator: '$eq', value: rbac.getAuthUser.tenantId });
|
|
43
43
|
}
|
|
44
|
-
return await userService.paginate(page, limit, search, filters);
|
|
44
|
+
return await userService.paginate({ page, limit, orderBy, orderDesc, search, filters });
|
|
45
45
|
}
|
|
46
46
|
catch (e) {
|
|
47
47
|
if (e instanceof UnauthorizedError) {
|
|
@@ -11,7 +11,7 @@ type TenantPaginated{
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
type Query{
|
|
14
|
-
paginateTenant(
|
|
14
|
+
paginateTenant(options: PaginateOptions): TenantPaginated
|
|
15
15
|
fetchTenant: [Tenant]
|
|
16
16
|
findTenantById(id: ID): Tenant
|
|
17
17
|
findTenantByName(name: String!): Tenant
|
|
@@ -21,7 +21,7 @@ type Query{
|
|
|
21
21
|
me: User
|
|
22
22
|
findUserByUsername(username: String!): User
|
|
23
23
|
findUserById(id: ID!): User
|
|
24
|
-
paginateUser(
|
|
24
|
+
paginateUser(options: PaginateOptions): UserPaginated
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
input UserCreateInput{
|
package/dist/models/UserModel.js
CHANGED
|
@@ -30,7 +30,6 @@ const UserSchema = new mongoose.Schema({
|
|
|
30
30
|
}
|
|
31
31
|
},
|
|
32
32
|
password: { type: String, required: true, index: false },
|
|
33
|
-
code: { type: String, required: false, index: false },
|
|
34
33
|
name: { type: String, required: false, index: false },
|
|
35
34
|
active: { type: Boolean, required: true, default: false, index: false },
|
|
36
35
|
phone: {
|
|
@@ -26,7 +26,7 @@ class RoleMongoRepository {
|
|
|
26
26
|
const roles = await RoleModel.find().populate('childRoles').exec();
|
|
27
27
|
return roles;
|
|
28
28
|
}
|
|
29
|
-
async paginate(page = 1, limit = 5, search) {
|
|
29
|
+
async paginate({ page = 1, limit = 5, orderBy = '', orderDesc = false, search = '', filters = [] }) {
|
|
30
30
|
const query = {};
|
|
31
31
|
if (search) {
|
|
32
32
|
query['$or'] = [
|
|
@@ -25,7 +25,7 @@ class TenantMongoRepository {
|
|
|
25
25
|
const tenants = await TenantModel.find().exec();
|
|
26
26
|
return tenants;
|
|
27
27
|
}
|
|
28
|
-
async paginate(page = 1, limit = 5, search) {
|
|
28
|
+
async paginate({ page = 1, limit = 5, orderBy = '', orderDesc = false, search = '', filters = [] }) {
|
|
29
29
|
const query = {};
|
|
30
30
|
if (search) {
|
|
31
31
|
query['$or'] = [
|
|
@@ -50,7 +50,7 @@ class UserMongoRepository {
|
|
|
50
50
|
const user = await UserModel.findOne({ username: username }).populate(['role', 'tenant']).exec();
|
|
51
51
|
return user;
|
|
52
52
|
}
|
|
53
|
-
async paginate(page = 1, limit = 5, search, filters) {
|
|
53
|
+
async paginate({ page = 1, limit = 5, orderBy = '', orderDesc = false, search = '', filters = [] }) {
|
|
54
54
|
const query = {};
|
|
55
55
|
if (search) {
|
|
56
56
|
query['$or'] = [
|
|
@@ -53,22 +53,6 @@ class RoleSqliteRepository {
|
|
|
53
53
|
throw SqliteErrorToValidationError(e, roleData);
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
|
-
async findById(id) {
|
|
57
|
-
const role = this.db.prepare('SELECT * FROM roles WHERE id = ?').get(id);
|
|
58
|
-
if (role) {
|
|
59
|
-
await this.populateRole(role);
|
|
60
|
-
return role;
|
|
61
|
-
}
|
|
62
|
-
return undefined;
|
|
63
|
-
}
|
|
64
|
-
async findByName(name) {
|
|
65
|
-
const role = this.db.prepare('SELECT * FROM roles WHERE name = ?').get(name);
|
|
66
|
-
if (role) {
|
|
67
|
-
await this.populateRole(role);
|
|
68
|
-
return role;
|
|
69
|
-
}
|
|
70
|
-
return undefined;
|
|
71
|
-
}
|
|
72
56
|
async update(id, roleData) {
|
|
73
57
|
try {
|
|
74
58
|
this.normalizeData(roleData);
|
|
@@ -85,6 +69,24 @@ class RoleSqliteRepository {
|
|
|
85
69
|
throw SqliteErrorToValidationError(e, roleData);
|
|
86
70
|
}
|
|
87
71
|
}
|
|
72
|
+
async paginate({ page = 1, limit = 5, orderBy = '', orderDesc = false, search = '', filters = [] }) {
|
|
73
|
+
const offset = page > 1 ? (page - 1) * limit : 0;
|
|
74
|
+
let where = "";
|
|
75
|
+
if (search) {
|
|
76
|
+
where = ` WHERE name LIKE '%${search}%'`;
|
|
77
|
+
}
|
|
78
|
+
const rCount = this.db.prepare('SELECT COUNT(*) as count FROM roles' + where).get();
|
|
79
|
+
const roles = this.db.prepare('SELECT * FROM roles LIMIT ? OFFSET ?' + where).all([limit, offset]);
|
|
80
|
+
for (const role of roles) {
|
|
81
|
+
await this.populateRole(role);
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
page: page,
|
|
85
|
+
limit: limit,
|
|
86
|
+
total: rCount.count,
|
|
87
|
+
items: roles
|
|
88
|
+
};
|
|
89
|
+
}
|
|
88
90
|
async delete(id) {
|
|
89
91
|
const stmt = this.db.prepare('DELETE FROM roles WHERE id = ?');
|
|
90
92
|
stmt.run(id);
|
|
@@ -95,30 +97,28 @@ class RoleSqliteRepository {
|
|
|
95
97
|
stmt.run();
|
|
96
98
|
return true;
|
|
97
99
|
}
|
|
98
|
-
async
|
|
99
|
-
const
|
|
100
|
-
|
|
100
|
+
async findById(id) {
|
|
101
|
+
const role = this.db.prepare('SELECT * FROM roles WHERE id = ?').get(id);
|
|
102
|
+
if (role) {
|
|
101
103
|
await this.populateRole(role);
|
|
104
|
+
return role;
|
|
102
105
|
}
|
|
103
|
-
return
|
|
106
|
+
return undefined;
|
|
104
107
|
}
|
|
105
|
-
async
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
async findByName(name) {
|
|
109
|
+
const role = this.db.prepare('SELECT * FROM roles WHERE name = ?').get(name);
|
|
110
|
+
if (role) {
|
|
111
|
+
await this.populateRole(role);
|
|
112
|
+
return role;
|
|
110
113
|
}
|
|
111
|
-
|
|
112
|
-
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
async fetchAll() {
|
|
117
|
+
const roles = this.db.prepare('SELECT * FROM roles').all();
|
|
113
118
|
for (const role of roles) {
|
|
114
119
|
await this.populateRole(role);
|
|
115
120
|
}
|
|
116
|
-
return
|
|
117
|
-
page: page,
|
|
118
|
-
limit: limit,
|
|
119
|
-
total: rCount.count,
|
|
120
|
-
items: roles
|
|
121
|
-
};
|
|
121
|
+
return roles;
|
|
122
122
|
}
|
|
123
123
|
async findWithoutPopulateById(id) {
|
|
124
124
|
const role = this.db.prepare('SELECT * FROM roles WHERE id = ?').get(id);
|
|
@@ -76,7 +76,7 @@ class TenantSqliteRepository {
|
|
|
76
76
|
}
|
|
77
77
|
return tenants;
|
|
78
78
|
}
|
|
79
|
-
async paginate(page = 1, limit = 5, search =
|
|
79
|
+
async paginate({ page = 1, limit = 5, orderBy = '', orderDesc = false, search = '', filters = [] }) {
|
|
80
80
|
const offset = page > 1 ? (page - 1) * limit : 0;
|
|
81
81
|
let where = "";
|
|
82
82
|
if (search) {
|
|
@@ -107,7 +107,7 @@ class UserSqliteRepository {
|
|
|
107
107
|
user.tenant = await this.findTenantById(user.tenant);
|
|
108
108
|
return user;
|
|
109
109
|
}
|
|
110
|
-
async paginate(page = 1, limit = 5, search =
|
|
110
|
+
async paginate({ page = 1, limit = 5, orderBy = '', orderDesc = false, search = '', filters = [] }) {
|
|
111
111
|
const offset = page > 1 ? (page - 1) * limit : 0;
|
|
112
112
|
let where = "";
|
|
113
113
|
if (search) {
|
|
@@ -103,9 +103,11 @@ async function RoleRoutes(fastify, options) {
|
|
|
103
103
|
request.rbac.assertPermission(IdentityPermissions.ViewRole);
|
|
104
104
|
const page = request.query.page;
|
|
105
105
|
const limit = request.query.limit;
|
|
106
|
+
const orderBy = request.query.orderBy;
|
|
107
|
+
const orderDesc = request.query.orderDesc;
|
|
106
108
|
const search = request.query.search;
|
|
107
109
|
const roleService = RoleServiceFactory();
|
|
108
|
-
let paginateResult = await roleService.paginate(page, limit, search);
|
|
110
|
+
let paginateResult = await roleService.paginate({ page, limit, search, orderBy, orderDesc });
|
|
109
111
|
return paginateResult;
|
|
110
112
|
}
|
|
111
113
|
catch (e) {
|
|
@@ -84,9 +84,11 @@ async function TenantRoutes(fastify, options) {
|
|
|
84
84
|
request.rbac.assertPermission(IdentityPermissions.ViewTenant);
|
|
85
85
|
const page = request.query.page;
|
|
86
86
|
const limit = request.query.limit;
|
|
87
|
+
const orderBy = request.query.orderBy;
|
|
88
|
+
const orderDesc = request.query.orderDesc;
|
|
87
89
|
const search = request.query.search;
|
|
88
90
|
const tenantService = TenantServiceFactory();
|
|
89
|
-
let paginateResult = await tenantService.paginate(page, limit, search);
|
|
91
|
+
let paginateResult = await tenantService.paginate({ page, limit, orderBy, orderDesc, search });
|
|
90
92
|
return paginateResult;
|
|
91
93
|
}
|
|
92
94
|
catch (e) {
|
|
@@ -53,13 +53,15 @@ async function UserRoutes(fastify, options) {
|
|
|
53
53
|
request.rbac.assertPermission(IdentityPermissions.ViewUser);
|
|
54
54
|
const page = request.query.page;
|
|
55
55
|
const limit = request.query.limit;
|
|
56
|
+
const orderBy = request.query.orderBy;
|
|
57
|
+
const orderDesc = request.query.orderDesc;
|
|
56
58
|
const search = request.query.search;
|
|
57
59
|
const userService = UserServiceFactory();
|
|
58
60
|
const filters = [];
|
|
59
61
|
if (request.rbac.getAuthUser.tenantId) {
|
|
60
62
|
filters.push({ field: 'tenant', operator: '$eq', value: request.rbac.getAuthUser.tenantId });
|
|
61
63
|
}
|
|
62
|
-
let paginateResult = await userService.paginate(page, limit, search, filters);
|
|
64
|
+
let paginateResult = await userService.paginate({ page, limit, orderBy, orderDesc, search, filters });
|
|
63
65
|
return paginateResult;
|
|
64
66
|
}
|
|
65
67
|
catch (e) {
|
|
@@ -50,8 +50,8 @@ class RoleService {
|
|
|
50
50
|
const roles = await this._repository.fetchAll();
|
|
51
51
|
return roles;
|
|
52
52
|
}
|
|
53
|
-
async paginate(page = 1, limit = 5, search, filters) {
|
|
54
|
-
const pagination = await this._repository.paginate(page, limit, search, filters);
|
|
53
|
+
async paginate({ page = 1, limit = 5, orderBy = '', orderDesc = false, search = '', filters = [] }) {
|
|
54
|
+
const pagination = await this._repository.paginate({ page, limit, orderBy, orderDesc, search, filters });
|
|
55
55
|
return pagination;
|
|
56
56
|
}
|
|
57
57
|
}
|
|
@@ -51,8 +51,8 @@ class TenantService {
|
|
|
51
51
|
const tenants = await this._repository.fetchAll();
|
|
52
52
|
return tenants;
|
|
53
53
|
}
|
|
54
|
-
async paginate(page = 1, limit = 5, search, filters) {
|
|
55
|
-
const pagination = await this._repository.paginate(page, limit, search, filters);
|
|
54
|
+
async paginate({ page = 1, limit = 5, orderBy = '', orderDesc = false, search = '', filters = [] }) {
|
|
55
|
+
const pagination = await this._repository.paginate({ page, limit, orderBy, orderDesc, search, filters });
|
|
56
56
|
return pagination;
|
|
57
57
|
}
|
|
58
58
|
}
|
|
@@ -96,8 +96,8 @@ class UserService {
|
|
|
96
96
|
const user = await this._repository.findByUsername(username);
|
|
97
97
|
return user;
|
|
98
98
|
}
|
|
99
|
-
async paginate(page = 1, limit =
|
|
100
|
-
const pagination = await this._repository.paginate(page, limit, search, filters);
|
|
99
|
+
async paginate({ page = 1, limit = 5, orderBy = '', orderDesc = false, search = '', filters = [] }) {
|
|
100
|
+
const pagination = await this._repository.paginate({ page, limit, orderBy, orderDesc, search, filters });
|
|
101
101
|
return pagination;
|
|
102
102
|
}
|
|
103
103
|
}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.0.
|
|
6
|
+
"version": "0.0.25",
|
|
7
7
|
"description": "Identity module for user management, authentication and authorization.",
|
|
8
8
|
"main": "dist/index.js",
|
|
9
9
|
"types": "types/index.d.ts",
|
|
@@ -26,6 +26,9 @@
|
|
|
26
26
|
"author": "Cristian Incarnato & Drax Team",
|
|
27
27
|
"license": "ISC",
|
|
28
28
|
"dependencies": {
|
|
29
|
+
"@drax/common-back": "^0.0.25",
|
|
30
|
+
"@drax/common-share": "^0.0.25",
|
|
31
|
+
"@drax/identity-share": "^0.0.25",
|
|
29
32
|
"bcryptjs": "^2.4.3",
|
|
30
33
|
"express-jwt": "^8.4.1",
|
|
31
34
|
"graphql": "^16.8.2",
|
|
@@ -56,5 +59,5 @@
|
|
|
56
59
|
"debug": "0"
|
|
57
60
|
}
|
|
58
61
|
},
|
|
59
|
-
"gitHead": "
|
|
62
|
+
"gitHead": "606497ae64684b17c757a72ed57a4a7dda0f1f8e"
|
|
60
63
|
}
|
|
@@ -20,7 +20,6 @@ const RoleServiceFactory = (verbose: boolean = false) : RoleService => {
|
|
|
20
20
|
case DbEngine.Sqlite:
|
|
21
21
|
console.log("RoleServiceFactory DB ENGINE SQLITE")
|
|
22
22
|
roleRepository = new RoleSqliteRepository(DbSetupUtils.getDbConfig(), verbose)
|
|
23
|
-
roleRepository.table()
|
|
24
23
|
break;
|
|
25
24
|
}
|
|
26
25
|
|
|
@@ -20,7 +20,6 @@ const TenantServiceFactory = (verbose: boolean = false) : TenantService => {
|
|
|
20
20
|
case DbEngine.Sqlite:
|
|
21
21
|
console.log("TenantServiceFactory DB ENGINE SQLITE")
|
|
22
22
|
tenantRepository = new TenantSqliteRepository(DbSetupUtils.getDbConfig(), verbose)
|
|
23
|
-
tenantRepository.table()
|
|
24
23
|
break;
|
|
25
24
|
}
|
|
26
25
|
|
|
@@ -17,7 +17,6 @@ const UserServiceFactory = (verbose:boolean = false) : UserService => {
|
|
|
17
17
|
case DbEngine.Sqlite:
|
|
18
18
|
console.log("UserServiceFactory DB ENGINE SQLITE")
|
|
19
19
|
userRepository = new UserSqliteRepository(DbSetupUtils.getDbConfig(),verbose)
|
|
20
|
-
userRepository.table()
|
|
21
20
|
break;
|
|
22
21
|
}
|
|
23
22
|
|
|
@@ -62,11 +62,11 @@ export default {
|
|
|
62
62
|
throw new GraphQLError('error.server')
|
|
63
63
|
}
|
|
64
64
|
},
|
|
65
|
-
paginateRole: async (_, {page, limit,
|
|
65
|
+
paginateRole: async (_, {page, limit, orderBy, orderDesc, search}, {rbac}) => {
|
|
66
66
|
try {
|
|
67
67
|
rbac.assertPermission(IdentityPermissions.ViewRole)
|
|
68
68
|
const roleService = RoleServiceFactory()
|
|
69
|
-
return await roleService.paginate(page, limit,
|
|
69
|
+
return await roleService.paginate({page, limit, orderBy, orderDesc, search})
|
|
70
70
|
} catch (e) {
|
|
71
71
|
console.error("paginateRole",e)
|
|
72
72
|
if (e instanceof UnauthorizedError) {
|
|
@@ -50,11 +50,11 @@ export default {
|
|
|
50
50
|
throw new GraphQLError('error.server')
|
|
51
51
|
}
|
|
52
52
|
},
|
|
53
|
-
paginateTenant: async (_, {page, limit,
|
|
53
|
+
paginateTenant: async (_, {page, limit, orderBy, orderDesc, search}, {rbac}) => {
|
|
54
54
|
try {
|
|
55
55
|
rbac.assertPermission(IdentityPermissions.ViewTenant)
|
|
56
56
|
const tenantService = TenantServiceFactory()
|
|
57
|
-
return await tenantService.paginate(page, limit,
|
|
57
|
+
return await tenantService.paginate({page, limit, orderBy, orderDesc, search})
|
|
58
58
|
} catch (e) {
|
|
59
59
|
console.error("paginateTenant",e)
|
|
60
60
|
if (e instanceof UnauthorizedError) {
|
|
@@ -35,14 +35,14 @@ export default {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
},
|
|
38
|
-
paginateUser: async (_, {page, limit, search, filters = []}, {rbac}) => {
|
|
38
|
+
paginateUser: async (_, {page, limit, orderBy, orderDesc, search, filters = []}, {rbac}) => {
|
|
39
39
|
try {
|
|
40
40
|
rbac.assertPermission(IdentityPermissions.ViewUser)
|
|
41
41
|
let userService= UserServiceFactory()
|
|
42
42
|
if(rbac.getAuthUser.tenantId){
|
|
43
43
|
filters.push({field: 'tenant', operator: '$eq', value: rbac.getAuthUser.tenantId})
|
|
44
44
|
}
|
|
45
|
-
return await userService.paginate(page, limit, search, filters)
|
|
45
|
+
return await userService.paginate({page, limit, orderBy, orderDesc, search, filters})
|
|
46
46
|
} catch (e) {
|
|
47
47
|
if (e instanceof UnauthorizedError) {
|
|
48
48
|
throw new GraphQLError(e.message)
|
|
@@ -11,7 +11,7 @@ type TenantPaginated{
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
type Query{
|
|
14
|
-
paginateTenant(
|
|
14
|
+
paginateTenant(options: PaginateOptions): TenantPaginated
|
|
15
15
|
fetchTenant: [Tenant]
|
|
16
16
|
findTenantById(id: ID): Tenant
|
|
17
17
|
findTenantByName(name: String!): Tenant
|
|
@@ -21,7 +21,7 @@ type Query{
|
|
|
21
21
|
me: User
|
|
22
22
|
findUserByUsername(username: String!): User
|
|
23
23
|
findUserById(id: ID!): User
|
|
24
|
-
paginateUser(
|
|
24
|
+
paginateUser(options: PaginateOptions): UserPaginated
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
input UserCreateInput{
|
package/src/index.ts
CHANGED
|
@@ -25,23 +25,20 @@ import LoadPermissions from "./setup/LoadPermissions.js";
|
|
|
25
25
|
import LoadIdentityConfigFromEnv from "./setup/LoadIdentityConfigFromEnv.js";
|
|
26
26
|
import RecoveryUserPassword from "./setup/RecoveryUserPassword.js";
|
|
27
27
|
|
|
28
|
-
import type {IJwtUser} from "./interfaces/IJwtUser";
|
|
29
|
-
import type {IRole, IRoleBase} from "./interfaces/IRole";
|
|
30
|
-
import type {IUser, IUserCreate, IUserUpdate} from "./interfaces/IUser";
|
|
31
|
-
import type {IUserRepository} from "./interfaces/IUserRepository";
|
|
32
28
|
import type {IRoleRepository} from "./interfaces/IRoleRepository";
|
|
29
|
+
import type {ITenantRepository} from "./interfaces/ITenantRepository";
|
|
30
|
+
import type {IUserRepository} from "./interfaces/IUserRepository";
|
|
31
|
+
|
|
33
32
|
|
|
34
33
|
const graphqlMergeResult = await GraphqlMerge()
|
|
35
34
|
const identityTypeDefs = await graphqlMergeResult.typeDefs;
|
|
36
35
|
const identityResolvers = await graphqlMergeResult.resolvers;
|
|
37
36
|
|
|
37
|
+
|
|
38
38
|
export type {
|
|
39
|
-
IJwtUser,
|
|
40
|
-
IRole,
|
|
41
|
-
IRoleBase,
|
|
42
39
|
IRoleRepository,
|
|
43
|
-
|
|
44
|
-
IUserRepository
|
|
40
|
+
ITenantRepository,
|
|
41
|
+
IUserRepository,
|
|
45
42
|
}
|
|
46
43
|
|
|
47
44
|
export {
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
import {IRole} from
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
interface IRoleRepository{
|
|
5
|
-
|
|
6
|
-
update(id: IID, updatedRole: IRole): Promise<IRole | null>;
|
|
7
|
-
delete(id: IID): Promise<boolean>;
|
|
8
|
-
findById(id: IID): Promise<IRole | null>;
|
|
1
|
+
import {IRole, IRoleBase} from "@drax/identity-share";
|
|
2
|
+
import {IDraxCrud} from "@drax/common-share";
|
|
3
|
+
|
|
4
|
+
interface IRoleRepository extends IDraxCrud<IRole, IRoleBase, IRoleBase> {
|
|
5
|
+
findById(id: string): Promise<IRole | null>;
|
|
9
6
|
findByName(name: string): Promise<IRole | null>;
|
|
10
7
|
fetchAll(): Promise<IRole[]>;
|
|
11
|
-
paginate(page?: number, limit?: number, search?:string, filters?: IPaginateFilter[]): Promise<IPaginateResult>;
|
|
12
|
-
table?():void
|
|
13
8
|
}
|
|
14
9
|
|
|
15
10
|
export {IRoleRepository}
|
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
import {ITenant} from '
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
create(role: ITenant): Promise<ITenant>;
|
|
6
|
-
update(id: IID, updatedRole: ITenant): Promise<ITenant | null>;
|
|
7
|
-
delete(id: IID): Promise<boolean>;
|
|
8
|
-
findById(id: IID): Promise<ITenant | null>;
|
|
1
|
+
import {ITenant, ITenantBase} from '@drax/identity-share'
|
|
2
|
+
import {IDraxCrud} from "@drax/common-share";
|
|
3
|
+
interface ITenantRepository extends IDraxCrud<ITenant,ITenantBase,ITenantBase>{
|
|
4
|
+
findById(id: string): Promise<ITenant | null>;
|
|
9
5
|
findByName(name: string): Promise<ITenant | null>;
|
|
10
6
|
fetchAll(): Promise<ITenant[]>;
|
|
11
|
-
paginate(page?: number, limit?: number, search?:string, filters?: IPaginateFilter[]): Promise<IPaginateResult>;
|
|
12
|
-
table?():void
|
|
13
7
|
}
|
|
14
8
|
|
|
15
9
|
export {ITenantRepository}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
import {IUser, IUserCreate, IUserUpdate} from '
|
|
2
|
-
import {
|
|
3
|
-
import {IID} from "./IID";
|
|
4
|
-
interface IUserRepository{
|
|
5
|
-
create(role: IUserCreate): Promise<IUser>;
|
|
6
|
-
update(id: IID, updatedRole: IUserUpdate): Promise<IUser | null>;
|
|
7
|
-
delete(id: IID): Promise<boolean>;
|
|
8
|
-
findById(id: IID): Promise<IUser | null>;
|
|
9
|
-
findByUsername(username: string): Promise<IUser | null>;
|
|
10
|
-
paginate(page?: number, limit?: number, search?: string, filters?: IPaginateFilter[]): Promise<IPaginateResult>;
|
|
11
|
-
changePassword(id: IID, password:string):Promise<Boolean>;
|
|
12
|
-
table?():void
|
|
1
|
+
import {IUser, IUserCreate, IUserUpdate} from '@drax/identity-share'
|
|
2
|
+
import {IDraxCrud} from "@drax/common-share";
|
|
13
3
|
|
|
4
|
+
interface IUserRepository extends IDraxCrud<IUser, IUserCreate, IUserUpdate>{
|
|
5
|
+
findById(id: string): Promise<IUser | null>;
|
|
6
|
+
findByUsername(username: string): Promise<IUser | null>;
|
|
7
|
+
changePassword(id: string, password:string):Promise<Boolean>;
|
|
14
8
|
}
|
|
15
9
|
|
|
16
10
|
export {IUserRepository}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type {IRole} from "../interfaces/IRole";
|
|
1
|
+
import {IJwtUser, IRole} from "@drax/identity-share";
|
|
3
2
|
import {DraxCache, DraxConfig} from "@drax/common-back";
|
|
4
3
|
import RoleServiceFactory from "../factory/RoleServiceFactory.js";
|
|
5
4
|
import Rbac from "../rbac/Rbac.js";
|
package/src/models/RoleModel.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {mongoose, MongooseSoftDelete} from '@drax/common-back';
|
|
2
2
|
import uniqueValidator from 'mongoose-unique-validator';
|
|
3
3
|
import mongoosePaginate from 'mongoose-paginate-v2'
|
|
4
|
-
import {IRole} from '
|
|
4
|
+
import {IRole} from '@drax/identity-share'
|
|
5
5
|
const Schema = mongoose.Schema
|
|
6
6
|
import {PaginateModel} from "mongoose";
|
|
7
7
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {mongoose, MongooseSoftDelete} from '@drax/common-back';
|
|
2
2
|
import uniqueValidator from 'mongoose-unique-validator';
|
|
3
3
|
import mongoosePaginate from 'mongoose-paginate-v2'
|
|
4
|
-
import {ITenant} from '
|
|
4
|
+
import {ITenant} from '@drax/identity-share'
|
|
5
5
|
const Schema = mongoose.Schema
|
|
6
6
|
import {PaginateModel} from "mongoose";
|
|
7
7
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {mongoose, MongooseSoftDelete} from '@drax/common-back';
|
|
2
|
-
import {IUserGroup} from "
|
|
2
|
+
import {IUserGroup} from "@drax/identity-share";
|
|
3
3
|
import uniqueValidator from 'mongoose-unique-validator';
|
|
4
4
|
import mongoosePaginate from 'mongoose-paginate-v2'
|
|
5
5
|
import {PaginateModel} from "mongoose";
|
package/src/models/UserModel.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {mongoose, MongooseSoftDelete} from '@drax/common-back';
|
|
2
|
-
import {IUser} from "
|
|
2
|
+
import {IUser} from "@drax/identity-share";
|
|
3
3
|
import uniqueValidator from 'mongoose-unique-validator';
|
|
4
4
|
import mongoosePaginate from 'mongoose-paginate-v2'
|
|
5
5
|
import {PaginateModel} from "mongoose";
|
|
@@ -34,7 +34,6 @@ const UserSchema = new mongoose.Schema<IUser>({
|
|
|
34
34
|
}
|
|
35
35
|
},
|
|
36
36
|
password: {type: String, required: true, index: false},
|
|
37
|
-
code: {type: String, required: false, index: false},
|
|
38
37
|
name: {type: String, required: false, index: false},
|
|
39
38
|
active: {type: Boolean, required: true, default: false, index: false},
|
|
40
39
|
phone: {
|