@kne/fastify-account 1.0.0-alpha.2 → 1.0.0-alpha.20
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 +2506 -803
- package/index.js +61 -8
- package/libs/controllers/account.js +221 -37
- package/libs/controllers/admin.js +92 -17
- package/libs/controllers/adminPermission.js +188 -38
- package/libs/controllers/adminTenant.js +44 -257
- package/libs/controllers/adminTenantCompany.js +53 -0
- package/libs/controllers/adminTenantOrg.js +71 -0
- package/libs/controllers/{adminRole.js → adminTenantRole.js} +15 -12
- package/libs/controllers/adminTenantUser.js +169 -0
- package/libs/controllers/requestLog.js +77 -0
- package/libs/controllers/tenant.js +4 -14
- package/libs/controllers/tenantCompany.js +54 -0
- package/libs/controllers/tenantOrg.js +65 -0
- package/libs/controllers/tenantRole.js +219 -0
- package/libs/controllers/tenantUser.js +169 -0
- 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/company-info.js +25 -0
- package/libs/models/login-log.js +11 -9
- package/libs/models/permission.js +7 -9
- package/libs/models/request-log.js +43 -0
- 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 +8 -10
- package/libs/services/account.js +95 -71
- package/libs/services/admin.js +38 -122
- package/libs/services/application.js +170 -0
- package/libs/services/permission.js +161 -163
- package/libs/services/request-log.js +37 -0
- package/libs/services/tenant-company.js +54 -0
- package/libs/services/tenant-invite.js +62 -0
- package/libs/services/tenant-org.js +118 -0
- package/libs/services/tenant-role.js +109 -0
- package/libs/services/tenant-user.js +578 -0
- package/libs/services/tenant.js +69 -670
- package/libs/services/user.js +109 -33
- package/package.json +3 -3
package/libs/services/user.js
CHANGED
|
@@ -2,16 +2,66 @@ const fp = require('fastify-plugin');
|
|
|
2
2
|
const { Unauthorized } = require('http-errors');
|
|
3
3
|
const get = require('lodash/get');
|
|
4
4
|
const pick = require('lodash/pick');
|
|
5
|
+
const isNil = require('lodash/isNil');
|
|
6
|
+
|
|
7
|
+
function userNameIsEmail(username) {
|
|
8
|
+
return /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(username);
|
|
9
|
+
}
|
|
10
|
+
|
|
5
11
|
module.exports = fp(async (fastify, options) => {
|
|
6
|
-
const
|
|
12
|
+
const { models, services } = fastify.account;
|
|
13
|
+
const { Op } = fastify.sequelize.Sequelize;
|
|
14
|
+
|
|
15
|
+
const getUserInstance = async ({ id }) => {
|
|
16
|
+
const user = await models.user.findOne({
|
|
17
|
+
where: {
|
|
18
|
+
uuid: id
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
if (!user) {
|
|
23
|
+
throw new Error('用户不存在');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return user;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const getUserInstanceByName = async ({ name, status }) => {
|
|
30
|
+
const isEmail = userNameIsEmail(name);
|
|
31
|
+
const query = {};
|
|
32
|
+
if (!isNil(status)) {
|
|
33
|
+
query['status'] = Array.isArray(status)
|
|
34
|
+
? {
|
|
35
|
+
[fastify.sequelize.Sequelize.Op.or]: status
|
|
36
|
+
}
|
|
37
|
+
: status;
|
|
38
|
+
}
|
|
39
|
+
const user = await models.user.findOne({
|
|
40
|
+
where: Object.assign({}, isEmail ? { email: name } : { phone: name }, query)
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
if (!user) {
|
|
44
|
+
throw new Error('用户不存在');
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return user;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const getUser = async authenticatePayload => {
|
|
7
51
|
if (!(authenticatePayload && authenticatePayload.id)) {
|
|
8
52
|
throw new Unauthorized();
|
|
9
53
|
}
|
|
10
|
-
const user = await
|
|
54
|
+
const user = await models.user.findOne({
|
|
55
|
+
where: {
|
|
56
|
+
uuid: authenticatePayload.id
|
|
57
|
+
}
|
|
58
|
+
});
|
|
11
59
|
if (!user) {
|
|
12
60
|
throw new Unauthorized();
|
|
13
61
|
}
|
|
14
|
-
return pick(user, ['
|
|
62
|
+
return Object.assign({}, pick(user, ['avatar', 'nickname', 'phone', 'email', 'gender', 'status', 'birthday', 'description', 'currentTenantId']), {
|
|
63
|
+
id: user.uuid
|
|
64
|
+
});
|
|
15
65
|
};
|
|
16
66
|
|
|
17
67
|
const accountIsExists = async ({ email, phone }, currentUser) => {
|
|
@@ -24,7 +74,7 @@ module.exports = fp(async (fastify, options) => {
|
|
|
24
74
|
}
|
|
25
75
|
|
|
26
76
|
return (
|
|
27
|
-
(await
|
|
77
|
+
(await models.user.count({
|
|
28
78
|
where: {
|
|
29
79
|
[fastify.sequelize.Sequelize.Op.or]: query
|
|
30
80
|
}
|
|
@@ -39,8 +89,8 @@ module.exports = fp(async (fastify, options) => {
|
|
|
39
89
|
if (!password) {
|
|
40
90
|
throw new Error('密码不能为空');
|
|
41
91
|
}
|
|
42
|
-
const account = await
|
|
43
|
-
const user = await
|
|
92
|
+
const account = await models.userAccount.create(await services.account.passwordEncryption(password));
|
|
93
|
+
const user = await models.user.create({
|
|
44
94
|
avatar,
|
|
45
95
|
nickname,
|
|
46
96
|
gender,
|
|
@@ -49,18 +99,15 @@ module.exports = fp(async (fastify, options) => {
|
|
|
49
99
|
phone,
|
|
50
100
|
email,
|
|
51
101
|
status,
|
|
52
|
-
userAccountId: account.
|
|
102
|
+
userAccountId: account.uuid
|
|
53
103
|
});
|
|
54
|
-
await account.update({ belongToUserId: user.
|
|
55
|
-
|
|
104
|
+
await account.update({ belongToUserId: user.uuid });
|
|
105
|
+
|
|
106
|
+
return Object.assign({}, user.get({ pain: true }), { id: user.uuid });
|
|
56
107
|
};
|
|
57
108
|
|
|
58
109
|
const saveUser = async ({ id, ...otherInfo }) => {
|
|
59
|
-
const user = await
|
|
60
|
-
|
|
61
|
-
if (!user) {
|
|
62
|
-
throw new Error('用户不存在');
|
|
63
|
-
}
|
|
110
|
+
const user = await getUserInstance({ id });
|
|
64
111
|
|
|
65
112
|
if ((await accountIsExists({ phone: otherInfo.phone, email: otherInfo.email }, user)) > 0) {
|
|
66
113
|
throw new Error('手机号或者邮箱都不能重复');
|
|
@@ -76,42 +123,71 @@ module.exports = fp(async (fastify, options) => {
|
|
|
76
123
|
};
|
|
77
124
|
|
|
78
125
|
const closeUser = async ({ id }) => {
|
|
79
|
-
const user = await
|
|
80
|
-
|
|
81
|
-
if (!user) {
|
|
82
|
-
throw new Error('用户不存在');
|
|
83
|
-
}
|
|
126
|
+
const user = await getUserInstance({ id });
|
|
84
127
|
user.status = 12;
|
|
85
128
|
await user.save();
|
|
86
129
|
};
|
|
87
130
|
|
|
88
131
|
const openUser = async ({ id }) => {
|
|
89
|
-
const user = await
|
|
90
|
-
|
|
91
|
-
if (!user) {
|
|
92
|
-
throw new Error('用户不存在');
|
|
93
|
-
}
|
|
132
|
+
const user = await getUserInstance({ id });
|
|
94
133
|
user.status = 0;
|
|
95
134
|
await user.save();
|
|
96
135
|
};
|
|
97
136
|
|
|
98
137
|
const setCurrentTenantId = async ({ id, tenantId }) => {
|
|
99
|
-
await
|
|
100
|
-
const user = await
|
|
101
|
-
|
|
102
|
-
if (!user) {
|
|
103
|
-
throw new Error('用户不存在');
|
|
104
|
-
}
|
|
138
|
+
await services.tenant.getTenant({ id: tenantId });
|
|
139
|
+
const user = await getUserInstance({ id });
|
|
105
140
|
user.currentTenantId = tenantId;
|
|
106
141
|
await user.save();
|
|
107
142
|
};
|
|
108
|
-
|
|
109
|
-
|
|
143
|
+
|
|
144
|
+
const getAllUserList = async ({ filter, perPage, currentPage }) => {
|
|
145
|
+
const queryFilter = {};
|
|
146
|
+
|
|
147
|
+
['nickname'].forEach(key => {
|
|
148
|
+
if (filter && filter[key]) {
|
|
149
|
+
queryFilter[key] = {
|
|
150
|
+
[Op.like]: `%${filter[key]}%`
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
const { count, rows } = await models.user.findAndCountAll({
|
|
155
|
+
include: [
|
|
156
|
+
{
|
|
157
|
+
attributes: ['role'],
|
|
158
|
+
model: models.adminRole
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
model: models.tenant
|
|
162
|
+
}
|
|
163
|
+
],
|
|
164
|
+
where: queryFilter,
|
|
165
|
+
offset: perPage * (currentPage - 1),
|
|
166
|
+
limit: perPage
|
|
167
|
+
});
|
|
168
|
+
return {
|
|
169
|
+
pageData: rows.map(item => {
|
|
170
|
+
return Object.assign({}, item.get({ pain: true }), {
|
|
171
|
+
id: item.uuid,
|
|
172
|
+
tenants: item.tenants.map(({ uuid, name }) => {
|
|
173
|
+
return { id: uuid, name };
|
|
174
|
+
})
|
|
175
|
+
});
|
|
176
|
+
}),
|
|
177
|
+
totalCount: count
|
|
178
|
+
};
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
services.user = {
|
|
182
|
+
getUser,
|
|
183
|
+
getUserInstance,
|
|
184
|
+
getUserInstanceByName,
|
|
110
185
|
saveUser,
|
|
111
186
|
accountIsExists,
|
|
112
187
|
addUser,
|
|
113
188
|
closeUser,
|
|
114
189
|
openUser,
|
|
115
|
-
setCurrentTenantId
|
|
190
|
+
setCurrentTenantId,
|
|
191
|
+
getAllUserList
|
|
116
192
|
};
|
|
117
193
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kne/fastify-account",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.20",
|
|
4
4
|
"description": "fastify的用户管理账号等实现",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
"homepage": "https://github.com/kne-union/fastify-account#readme",
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@fastify/swagger": "^8.14.0",
|
|
41
|
-
"@kne/fastify-file-manager": "^1.
|
|
41
|
+
"@kne/fastify-file-manager": "^1.1.2",
|
|
42
42
|
"@kne/fastify-response-data-format": "^0.1.0",
|
|
43
|
-
"@kne/fastify-sequelize": "^
|
|
43
|
+
"@kne/fastify-sequelize": "^2.0.2",
|
|
44
44
|
"fastify": "^4.27.0",
|
|
45
45
|
"husky": "^9.0.11",
|
|
46
46
|
"nodemon": "^3.1.1",
|