@kne/fastify-account 1.0.0-alpha.2 → 1.0.0-alpha.4
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/README.md +47 -2
- package/index.js +10 -4
- package/libs/controllers/account.js +7 -6
- package/libs/controllers/admin.js +16 -15
- package/libs/controllers/adminPermission.js +42 -35
- package/libs/controllers/adminRole.js +13 -12
- package/libs/controllers/adminTenant.js +39 -36
- package/libs/controllers/tenant.js +7 -6
- package/libs/controllers/user.js +4 -3
- package/libs/models/admin-role.js +4 -8
- package/libs/models/application.js +16 -10
- package/libs/models/login-log.js +4 -8
- package/libs/models/permission.js +7 -9
- package/libs/models/tenant-application.js +8 -10
- package/libs/models/tenant-org.js +5 -9
- package/libs/models/tenant-permission.js +7 -9
- package/libs/models/tenant-role-application.js +13 -13
- package/libs/models/tenant-role-permission.js +9 -14
- package/libs/models/tenant-role.js +5 -9
- package/libs/models/tenant-share-group-permission.js +5 -9
- package/libs/models/tenant-share-group.js +5 -9
- package/libs/models/tenant-source-user-share-group.js +5 -9
- package/libs/models/tenant-token.js +7 -9
- package/libs/models/tenant-user-org.js +11 -10
- package/libs/models/tenant-user-role.js +11 -10
- package/libs/models/tenant-user-share-group.js +6 -10
- package/libs/models/tenant-user.js +35 -16
- package/libs/models/tenant.js +17 -9
- package/libs/models/user-account.js +17 -9
- package/libs/models/user.js +27 -17
- package/libs/models/verification-code.js +4 -8
- package/libs/services/account.js +26 -16
- package/libs/services/admin.js +14 -116
- package/libs/services/application.js +151 -0
- package/libs/services/permission.js +47 -145
- package/libs/services/tenant-invite.js +62 -0
- package/libs/services/tenant-org.js +84 -0
- package/libs/services/tenant-role.js +108 -0
- package/libs/services/tenant-user.js +486 -0
- package/libs/services/tenant.js +68 -669
- package/libs/services/user.js +63 -33
- package/package.json +3 -3
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
const fp = require('fastify-plugin');
|
|
2
|
+
const transform = require('lodash/transform');
|
|
3
|
+
const groupBy = require('lodash/groupBy');
|
|
4
|
+
const { Unauthorized } = require('http-errors');
|
|
5
|
+
const pick = require('lodash/pick');
|
|
6
|
+
const isNil = require('lodash/isNil');
|
|
7
|
+
module.exports = fp(async (fastify, options) => {
|
|
8
|
+
const { models, services } = fastify.account;
|
|
9
|
+
const { Op } = fastify.sequelize.Sequelize;
|
|
10
|
+
|
|
11
|
+
const getTenantUserPermissionList = async ({ tenantRoleIds }) => {
|
|
12
|
+
const tenantRoleApplication = await models.tenantRoleApplication.findAll({
|
|
13
|
+
attributes: ['applicationId'],
|
|
14
|
+
where: {
|
|
15
|
+
roleId: {
|
|
16
|
+
[Op.in]: tenantRoleIds
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const applications = await services.application.getApplicationListByIds({ ids: tenantRoleApplication.map(({ applicationId }) => applicationId) });
|
|
22
|
+
const permissions = await services.tenantRole.getPermissionByTenantRoles({ tenantRoleIds });
|
|
23
|
+
const permissionMapping = transform(
|
|
24
|
+
await models.permission.findAll({
|
|
25
|
+
where: {
|
|
26
|
+
id: {
|
|
27
|
+
[Op.in]: permissions.map(({ paths }) => paths).reduce((list, item) => [...list, ...(item || [])], [])
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}),
|
|
31
|
+
(result, value) => {
|
|
32
|
+
result[value.id] = { code: value.code, name: value.name };
|
|
33
|
+
},
|
|
34
|
+
{}
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
const applicationsMapping = transform(
|
|
38
|
+
applications,
|
|
39
|
+
(result, value) => {
|
|
40
|
+
result[value.uuid] = value;
|
|
41
|
+
},
|
|
42
|
+
{}
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
const findEndChildren = permissions => {
|
|
46
|
+
const output = [];
|
|
47
|
+
const core = (list, node) => {
|
|
48
|
+
const { children, other } = groupBy(list, item => (item.pid === node.id ? 'children' : 'other'));
|
|
49
|
+
if (!(other && other.length > 0)) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (!(children && children.length > 0)) {
|
|
53
|
+
node.id !== 0 && output.push(node);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
children.forEach(node => {
|
|
58
|
+
core(other, node);
|
|
59
|
+
});
|
|
60
|
+
return output;
|
|
61
|
+
};
|
|
62
|
+
core(permissions, { id: 0 });
|
|
63
|
+
return output;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
const userPermissionList = findEndChildren(permissions).map(({ code, applicationId, paths }) => {
|
|
67
|
+
return `${applicationsMapping[applicationId].code}${
|
|
68
|
+
paths && paths.length > 0
|
|
69
|
+
? `:${paths
|
|
70
|
+
.map(id => {
|
|
71
|
+
return permissionMapping[id].code;
|
|
72
|
+
})
|
|
73
|
+
.join(':')}`
|
|
74
|
+
: ''
|
|
75
|
+
}:${code}`;
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
applications: applications,
|
|
80
|
+
permissions: permissions.map(item =>
|
|
81
|
+
Object.assign(
|
|
82
|
+
{},
|
|
83
|
+
{
|
|
84
|
+
code: item.code,
|
|
85
|
+
name: item.name,
|
|
86
|
+
isModule: item.isModule,
|
|
87
|
+
paths: (item.paths || []).map(id => permissionMapping[id])
|
|
88
|
+
}
|
|
89
|
+
)
|
|
90
|
+
),
|
|
91
|
+
userPermissionList
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const getUserTenant = async authenticatePayload => {
|
|
96
|
+
const user = await services.user.getUser(authenticatePayload);
|
|
97
|
+
const tenantUserList = await models.tenantUser.findAll({
|
|
98
|
+
where: {
|
|
99
|
+
userId: user.id
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
const tenantList =
|
|
104
|
+
tenantUserList.length > 0
|
|
105
|
+
? await models.tenant.findAll({
|
|
106
|
+
where: {
|
|
107
|
+
uuid: {
|
|
108
|
+
[Op.in]: tenantUserList.map(({ tenantId }) => tenantId)
|
|
109
|
+
},
|
|
110
|
+
status: 0
|
|
111
|
+
}
|
|
112
|
+
})
|
|
113
|
+
: [];
|
|
114
|
+
|
|
115
|
+
const currentTenantUser = user.currentTenantId && tenantUserList.find(({ tenantId }) => tenantId === user.currentTenantId);
|
|
116
|
+
const currentTenant = currentTenantUser && tenantList.find(({ uuid }) => uuid === currentTenantUser.tenantId);
|
|
117
|
+
|
|
118
|
+
return {
|
|
119
|
+
currentTenant: currentTenant && Object.assign({}, currentTenant, { id: currentTenant.uuid }),
|
|
120
|
+
currentTenantUser: currentTenantUser && Object.assign({}, currentTenantUser, { id: currentTenantUser.uuid }),
|
|
121
|
+
tenantList: tenantList.map(item => {
|
|
122
|
+
return Object.assign({}, item.get({ plain: true }), { id: item.uuid });
|
|
123
|
+
}),
|
|
124
|
+
tenantUserList: tenantUserList.map(item => {
|
|
125
|
+
return Object.assign({}, item.get({ plain: true }), { id: item.uuid });
|
|
126
|
+
}),
|
|
127
|
+
userInfo: user
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
const getTenantUserInstance = async ({ id }) => {
|
|
132
|
+
const currentTenantUser = await models.tenantUser.findOne({
|
|
133
|
+
where: {
|
|
134
|
+
uuid: id
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
if (!currentTenantUser) {
|
|
138
|
+
throw new Error('租户用户不存在');
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return currentTenantUser;
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
const getTenantUserByUserId = async user => {
|
|
145
|
+
if (!user.currentTenantId) {
|
|
146
|
+
throw new Unauthorized('没有找到当前绑定租户');
|
|
147
|
+
}
|
|
148
|
+
const tenant = await services.tenant.getTenant({ id: user.currentTenantId });
|
|
149
|
+
|
|
150
|
+
const tenantUser = await models.tenantUser.findOne({
|
|
151
|
+
attributes: ['uuid', 'avatar', 'description', 'phone', 'email'],
|
|
152
|
+
include: [
|
|
153
|
+
{
|
|
154
|
+
attributes: ['id', 'name'],
|
|
155
|
+
model: models.tenantOrg
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
attributes: ['id', 'name'],
|
|
159
|
+
model: models.tenantRole
|
|
160
|
+
}
|
|
161
|
+
],
|
|
162
|
+
where: {
|
|
163
|
+
tenantId: tenant.id,
|
|
164
|
+
userId: user.id,
|
|
165
|
+
status: 0
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
if (!tenantUser) {
|
|
170
|
+
throw Unauthorized('租户用户不存在');
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// 获取当前租户默认角色
|
|
174
|
+
const defaultTenant = await models.tenantRole.findOne({
|
|
175
|
+
where: {
|
|
176
|
+
type: 1,
|
|
177
|
+
tenantId: tenant.id
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
if (!defaultTenant) {
|
|
182
|
+
throw new Error('租户默认角色未设置,请联系管理员');
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
const tenantRoleIds = tenantUser.tenantRoles.map(({ id }) => id);
|
|
186
|
+
tenantRoleIds.push(defaultTenant.id);
|
|
187
|
+
|
|
188
|
+
const { userPermissionList } = await getTenantUserPermissionList({ tenantRoleIds });
|
|
189
|
+
if (!tenantUser) {
|
|
190
|
+
throw new Error('当前租户用户不存在或者已经被关闭');
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const outputTenantUser = Object.assign({}, tenantUser.get({ plain: true }), { id: tenantUser.uuid });
|
|
194
|
+
outputTenantUser.tenantOrgs = outputTenantUser?.tenantOrgs.map(({ id, name }) => ({ id, name }));
|
|
195
|
+
outputTenantUser.tenantRoles = outputTenantUser?.tenantRoles.map(({ id, name }) => ({ id, name }));
|
|
196
|
+
return {
|
|
197
|
+
tenant: pick(tenant, ['id', 'name', 'description']),
|
|
198
|
+
tenantUser: Object.assign({}, outputTenantUser, {
|
|
199
|
+
permissions: userPermissionList
|
|
200
|
+
}),
|
|
201
|
+
user
|
|
202
|
+
};
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
const checkTenantRoleUsed = async ({ tenantRoleId }) => {
|
|
206
|
+
if (
|
|
207
|
+
(await models.tenantUserRole.count({
|
|
208
|
+
where: {
|
|
209
|
+
tenantRoleId
|
|
210
|
+
}
|
|
211
|
+
})) > 0
|
|
212
|
+
) {
|
|
213
|
+
throw new Error('该角色已经被使用,请在租户用户种处理掉所有使用该角色的租户用户后重试');
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
const checkTenantUserInfoValidate = async ({ tenantId, roleIds, orgIds, userId }) => {
|
|
218
|
+
await services.tenant.getTenant({ id: tenantId });
|
|
219
|
+
if (
|
|
220
|
+
roleIds.length > 0 &&
|
|
221
|
+
(await models.tenantRole.count({
|
|
222
|
+
where: {
|
|
223
|
+
id: {
|
|
224
|
+
[Op.in]: roleIds
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
})) < roleIds.length
|
|
228
|
+
) {
|
|
229
|
+
throw new Error('包含租户不存在的角色');
|
|
230
|
+
}
|
|
231
|
+
if (orgIds.length === 0) {
|
|
232
|
+
const tenantOrg = await models.tenantOrg.findOne({
|
|
233
|
+
where: {
|
|
234
|
+
pid: 0,
|
|
235
|
+
tenantId
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
if (!tenantOrg) {
|
|
239
|
+
throw new Error('租户根节点不存在');
|
|
240
|
+
}
|
|
241
|
+
orgIds = [tenantOrg.id];
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (
|
|
245
|
+
(await models.tenantOrg.count({
|
|
246
|
+
where: {
|
|
247
|
+
tenantId,
|
|
248
|
+
id: {
|
|
249
|
+
[Op.in]: orgIds
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
})) < orgIds.length
|
|
253
|
+
) {
|
|
254
|
+
throw new Error('包含租户不存在组织');
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
try {
|
|
258
|
+
await services.user.getUserInstance({ id: userId });
|
|
259
|
+
} catch (e) {
|
|
260
|
+
throw new Error('用户不存在,应该先创建用户再创建租户用户');
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
const addTenantUser = async ({ tenantId, roleIds, orgIds, userId, ...tenantUser }) => {
|
|
265
|
+
const tenant = await services.tenant.getTenant({ id: tenantId });
|
|
266
|
+
|
|
267
|
+
const currentAccountNumber = await models.tenantUser.count({
|
|
268
|
+
where: { tenantId }
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
if (currentAccountNumber >= tenant.accountNumber) {
|
|
272
|
+
throw new Error('租户用户数量已达上限');
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
await checkTenantUserInfoValidate({ tenantId, roleIds, orgIds, userId });
|
|
276
|
+
|
|
277
|
+
const t = await fastify.sequelize.instance.transaction();
|
|
278
|
+
|
|
279
|
+
if (
|
|
280
|
+
(await models.tenantUser.count({
|
|
281
|
+
where: {
|
|
282
|
+
userId,
|
|
283
|
+
tenantId
|
|
284
|
+
}
|
|
285
|
+
})) > 0
|
|
286
|
+
) {
|
|
287
|
+
throw new Error('该用户已经属于该租户,不能重复添加');
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
try {
|
|
291
|
+
const currentTenantUser = await models.tenantUser.create(
|
|
292
|
+
{
|
|
293
|
+
name: tenantUser.name,
|
|
294
|
+
avatar: tenantUser.avatar,
|
|
295
|
+
phone: tenantUser.phone,
|
|
296
|
+
email: tenantUser.email,
|
|
297
|
+
description: tenantUser.description,
|
|
298
|
+
tenantId,
|
|
299
|
+
userId
|
|
300
|
+
},
|
|
301
|
+
{ transaction: t }
|
|
302
|
+
);
|
|
303
|
+
roleIds.length > 0 &&
|
|
304
|
+
(await models.tenantUserRole.bulkCreate(
|
|
305
|
+
roleIds.map(roleId => {
|
|
306
|
+
return {
|
|
307
|
+
tenantRoleId: roleId,
|
|
308
|
+
tenantId,
|
|
309
|
+
tenantUserId: currentTenantUser.uuid
|
|
310
|
+
};
|
|
311
|
+
}),
|
|
312
|
+
{ transaction: t }
|
|
313
|
+
));
|
|
314
|
+
|
|
315
|
+
await models.tenantUserOrg.bulkCreate(
|
|
316
|
+
orgIds.map(orgId => {
|
|
317
|
+
return {
|
|
318
|
+
tenantOrgId: orgId,
|
|
319
|
+
tenantId,
|
|
320
|
+
tenantUserId: currentTenantUser.uuid
|
|
321
|
+
};
|
|
322
|
+
}),
|
|
323
|
+
{ transaction: t }
|
|
324
|
+
);
|
|
325
|
+
|
|
326
|
+
await t.commit();
|
|
327
|
+
} catch (e) {
|
|
328
|
+
await t.rollback();
|
|
329
|
+
throw e;
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
const saveTenantUser = async ({ id, tenantId, roleIds, orgIds, userId, ...tenantUser }) => {
|
|
334
|
+
const currentTenantUser = await getTenantUserInstance({ id });
|
|
335
|
+
if (tenantId !== currentTenantUser.tenantId) {
|
|
336
|
+
throw new Error('租户Id和当前租户用户的租户Id不一致');
|
|
337
|
+
}
|
|
338
|
+
await checkTenantUserInfoValidate({ tenantId, roleIds, orgIds, userId: currentTenantUser.userId });
|
|
339
|
+
|
|
340
|
+
const tenantRoleIds = (
|
|
341
|
+
await models.tenantUserRole.findAll({
|
|
342
|
+
attributes: ['tenantRoleId'],
|
|
343
|
+
where: {
|
|
344
|
+
tenantId,
|
|
345
|
+
tenantUserId: currentTenantUser.uuid
|
|
346
|
+
}
|
|
347
|
+
})
|
|
348
|
+
).map(({ tenantRoleId }) => tenantRoleId);
|
|
349
|
+
|
|
350
|
+
const tenantOrgIds = (
|
|
351
|
+
await models.tenantUserOrg.findAll({
|
|
352
|
+
attributes: ['tenantOrgId'],
|
|
353
|
+
where: {
|
|
354
|
+
tenantId,
|
|
355
|
+
tenantUserId: currentTenantUser.uuid
|
|
356
|
+
}
|
|
357
|
+
})
|
|
358
|
+
).map(({ tenantOrgId }) => tenantOrgId);
|
|
359
|
+
|
|
360
|
+
const t = await fastify.sequelize.instance.transaction();
|
|
361
|
+
|
|
362
|
+
try {
|
|
363
|
+
['name', 'avatar', 'phone', 'email', 'description'].forEach(name => {
|
|
364
|
+
if (!isNil(tenantUser[name])) {
|
|
365
|
+
currentTenantUser[name] = tenantUser[name];
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
await currentTenantUser.save({ transaction: t });
|
|
369
|
+
// 修改角色
|
|
370
|
+
const needDeleteTenantRole = tenantRoleIds.filter(targetId => roleIds.indexOf(targetId) === -1);
|
|
371
|
+
const needAddTenantRole = roleIds.filter(targetId => tenantRoleIds.indexOf(targetId) === -1);
|
|
372
|
+
await models.tenantUserRole.destroy({
|
|
373
|
+
where: {
|
|
374
|
+
tenantId,
|
|
375
|
+
tenantUserId: currentTenantUser.uuid,
|
|
376
|
+
tenantRoleId: {
|
|
377
|
+
[Op.in]: needDeleteTenantRole
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
transaction: t
|
|
381
|
+
});
|
|
382
|
+
await models.tenantUserRole.bulkCreate(
|
|
383
|
+
needAddTenantRole.map(tenantRoleId => {
|
|
384
|
+
return { tenantId, tenantUserId: currentTenantUser.uuid, tenantRoleId };
|
|
385
|
+
}),
|
|
386
|
+
{ transaction: t }
|
|
387
|
+
);
|
|
388
|
+
//修改组织
|
|
389
|
+
const needDeleteTenantOrg = tenantOrgIds.filter(targetId => orgIds.indexOf(targetId) === -1);
|
|
390
|
+
const needAddTenantOrg = orgIds.filter(targetId => tenantOrgIds.indexOf(targetId) === -1);
|
|
391
|
+
await models.tenantUserOrg.destroy({
|
|
392
|
+
where: {
|
|
393
|
+
tenantId,
|
|
394
|
+
tenantUserId: currentTenantUser.uuid,
|
|
395
|
+
tenantOrgId: {
|
|
396
|
+
[Op.in]: needDeleteTenantOrg
|
|
397
|
+
}
|
|
398
|
+
},
|
|
399
|
+
transaction: t
|
|
400
|
+
});
|
|
401
|
+
await models.tenantUserOrg.bulkCreate(
|
|
402
|
+
needAddTenantOrg.map(tenantOrgId => {
|
|
403
|
+
return { tenantId, tenantUserId: currentTenantUser.uuid, tenantOrgId };
|
|
404
|
+
}),
|
|
405
|
+
{ transaction: t }
|
|
406
|
+
);
|
|
407
|
+
await t.commit();
|
|
408
|
+
} catch (e) {
|
|
409
|
+
await t.rollback();
|
|
410
|
+
throw e;
|
|
411
|
+
}
|
|
412
|
+
};
|
|
413
|
+
|
|
414
|
+
const deleteTenantUser = async ({ tenantId, tenantUserId }) => {
|
|
415
|
+
await services.tenant.getTenant({ id: tenantId });
|
|
416
|
+
const tenantUser = await getTenantUserInstance({ id: tenantUserId });
|
|
417
|
+
|
|
418
|
+
const t = await fastify.sequelize.instance.transaction();
|
|
419
|
+
|
|
420
|
+
try {
|
|
421
|
+
await models.tenantUserOrg.destroy({
|
|
422
|
+
where: {
|
|
423
|
+
tenantId,
|
|
424
|
+
tenantUserId: tenantUser.uuid
|
|
425
|
+
},
|
|
426
|
+
transaction: t
|
|
427
|
+
});
|
|
428
|
+
await models.tenantUserRole.destroy({
|
|
429
|
+
where: {
|
|
430
|
+
tenantId,
|
|
431
|
+
tenantUserId: tenantUser.uuid
|
|
432
|
+
},
|
|
433
|
+
transaction: t
|
|
434
|
+
});
|
|
435
|
+
await tenantUser.destroy({ transaction: t });
|
|
436
|
+
await t.commit();
|
|
437
|
+
} catch (e) {
|
|
438
|
+
await t.rollback();
|
|
439
|
+
throw e;
|
|
440
|
+
}
|
|
441
|
+
};
|
|
442
|
+
|
|
443
|
+
const closeTenantUser = async ({ tenantId, tenantUserId }) => {
|
|
444
|
+
await services.tenant.getTenant({ id: tenantId });
|
|
445
|
+
const tenantUser = await getTenantUserInstance({ id: tenantUserId });
|
|
446
|
+
tenantUser.status = 12;
|
|
447
|
+
await tenantUser.save();
|
|
448
|
+
};
|
|
449
|
+
|
|
450
|
+
const openTenantUser = async ({ tenantId, tenantUserId }) => {
|
|
451
|
+
await services.tenant.getTenant({ id: tenantId });
|
|
452
|
+
const tenantUser = await getTenantUserInstance({ id: tenantUserId });
|
|
453
|
+
tenantUser.status = 0;
|
|
454
|
+
await tenantUser.save();
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
const getTenantUserList = async ({ tenantId }) => {
|
|
458
|
+
await services.tenant.getTenant({ id: tenantId });
|
|
459
|
+
|
|
460
|
+
const { count, rows } = await fastify.account.models.tenantUser.findAndCountAll({
|
|
461
|
+
include: [fastify.account.models.tenantRole, fastify.account.models.tenantOrg, fastify.account.models.user],
|
|
462
|
+
where: { tenantId }
|
|
463
|
+
});
|
|
464
|
+
|
|
465
|
+
return {
|
|
466
|
+
pageData: rows.map(item => {
|
|
467
|
+
return Object.assign({}, item.get({ pain: true }), { id: item.uuid });
|
|
468
|
+
}),
|
|
469
|
+
totalCount: count
|
|
470
|
+
};
|
|
471
|
+
};
|
|
472
|
+
|
|
473
|
+
services.tenantUser = {
|
|
474
|
+
getUserTenant,
|
|
475
|
+
getTenantUserPermissionList,
|
|
476
|
+
getTenantUserByUserId,
|
|
477
|
+
checkTenantRoleUsed,
|
|
478
|
+
checkTenantUserInfoValidate,
|
|
479
|
+
addTenantUser,
|
|
480
|
+
saveTenantUser,
|
|
481
|
+
deleteTenantUser,
|
|
482
|
+
closeTenantUser,
|
|
483
|
+
openTenantUser,
|
|
484
|
+
getTenantUserList
|
|
485
|
+
};
|
|
486
|
+
});
|