@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.
Files changed (54) hide show
  1. package/README.md +2506 -803
  2. package/index.js +61 -8
  3. package/libs/controllers/account.js +221 -37
  4. package/libs/controllers/admin.js +92 -17
  5. package/libs/controllers/adminPermission.js +188 -38
  6. package/libs/controllers/adminTenant.js +44 -257
  7. package/libs/controllers/adminTenantCompany.js +53 -0
  8. package/libs/controllers/adminTenantOrg.js +71 -0
  9. package/libs/controllers/{adminRole.js → adminTenantRole.js} +15 -12
  10. package/libs/controllers/adminTenantUser.js +169 -0
  11. package/libs/controllers/requestLog.js +77 -0
  12. package/libs/controllers/tenant.js +4 -14
  13. package/libs/controllers/tenantCompany.js +54 -0
  14. package/libs/controllers/tenantOrg.js +65 -0
  15. package/libs/controllers/tenantRole.js +219 -0
  16. package/libs/controllers/tenantUser.js +169 -0
  17. package/libs/controllers/user.js +4 -3
  18. package/libs/models/admin-role.js +4 -8
  19. package/libs/models/application.js +16 -10
  20. package/libs/models/company-info.js +25 -0
  21. package/libs/models/login-log.js +11 -9
  22. package/libs/models/permission.js +7 -9
  23. package/libs/models/request-log.js +43 -0
  24. package/libs/models/tenant-application.js +8 -10
  25. package/libs/models/tenant-org.js +5 -9
  26. package/libs/models/tenant-permission.js +7 -9
  27. package/libs/models/tenant-role-application.js +13 -13
  28. package/libs/models/tenant-role-permission.js +9 -14
  29. package/libs/models/tenant-role.js +5 -9
  30. package/libs/models/tenant-share-group-permission.js +5 -9
  31. package/libs/models/tenant-share-group.js +5 -9
  32. package/libs/models/tenant-source-user-share-group.js +5 -9
  33. package/libs/models/tenant-token.js +7 -9
  34. package/libs/models/tenant-user-org.js +11 -10
  35. package/libs/models/tenant-user-role.js +11 -10
  36. package/libs/models/tenant-user-share-group.js +6 -10
  37. package/libs/models/tenant-user.js +35 -16
  38. package/libs/models/tenant.js +17 -9
  39. package/libs/models/user-account.js +17 -9
  40. package/libs/models/user.js +27 -17
  41. package/libs/models/verification-code.js +8 -10
  42. package/libs/services/account.js +95 -71
  43. package/libs/services/admin.js +38 -122
  44. package/libs/services/application.js +170 -0
  45. package/libs/services/permission.js +161 -163
  46. package/libs/services/request-log.js +37 -0
  47. package/libs/services/tenant-company.js +54 -0
  48. package/libs/services/tenant-invite.js +62 -0
  49. package/libs/services/tenant-org.js +118 -0
  50. package/libs/services/tenant-role.js +109 -0
  51. package/libs/services/tenant-user.js +578 -0
  52. package/libs/services/tenant.js +69 -670
  53. package/libs/services/user.js +109 -33
  54. package/package.json +3 -3
@@ -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 getUserInfo = async authenticatePayload => {
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 fastify.account.models.user.findByPk(authenticatePayload.id);
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, ['id', 'avatar', 'nickname', 'phone', 'email', 'gender', 'status', 'birthday', 'description', 'currentTenantId']);
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 fastify.account.models.user.count({
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 fastify.account.models.userAccount.create(await fastify.account.services.account.passwordEncryption(password));
43
- const user = await fastify.account.models.user.create({
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.id
102
+ userAccountId: account.uuid
53
103
  });
54
- await account.update({ belongToUserId: user.id });
55
- return user;
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 fastify.account.models.user.findByPk(id);
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 fastify.account.models.user.findByPk(id);
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 fastify.account.models.user.findByPk(id);
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 fastify.account.services.tenant.getTenantInfo({ id: tenantId });
100
- const user = await fastify.account.models.user.findByPk(id);
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
- fastify.account.services.user = {
109
- getUserInfo,
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.2",
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.0.0",
41
+ "@kne/fastify-file-manager": "^1.1.2",
42
42
  "@kne/fastify-response-data-format": "^0.1.0",
43
- "@kne/fastify-sequelize": "^1.0.0",
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",