@kne/fastify-account 1.0.0-alpha.0

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 (37) hide show
  1. package/README.md +1436 -0
  2. package/index.js +54 -0
  3. package/libs/controllers/account.js +189 -0
  4. package/libs/controllers/admin.js +153 -0
  5. package/libs/controllers/adminPermission.js +230 -0
  6. package/libs/controllers/adminRole.js +145 -0
  7. package/libs/controllers/adminTenant.js +461 -0
  8. package/libs/controllers/tenant.js +22 -0
  9. package/libs/controllers/user.js +12 -0
  10. package/libs/models/admin-role.js +19 -0
  11. package/libs/models/application.js +36 -0
  12. package/libs/models/login-log.js +15 -0
  13. package/libs/models/permission.js +53 -0
  14. package/libs/models/tenant-application.js +28 -0
  15. package/libs/models/tenant-org.js +30 -0
  16. package/libs/models/tenant-permission.js +28 -0
  17. package/libs/models/tenant-role-application.js +32 -0
  18. package/libs/models/tenant-role-permission.js +32 -0
  19. package/libs/models/tenant-role.js +27 -0
  20. package/libs/models/tenant-share-group-permission.js +22 -0
  21. package/libs/models/tenant-share-group.js +22 -0
  22. package/libs/models/tenant-source-user-share-group.js +22 -0
  23. package/libs/models/tenant-token.js +32 -0
  24. package/libs/models/tenant-user-org.js +22 -0
  25. package/libs/models/tenant-user-role.js +22 -0
  26. package/libs/models/tenant-user-share-group.js +22 -0
  27. package/libs/models/tenant-user.js +56 -0
  28. package/libs/models/tenant.js +38 -0
  29. package/libs/models/user-account.js +26 -0
  30. package/libs/models/user.js +50 -0
  31. package/libs/models/verification-code.js +26 -0
  32. package/libs/services/account.js +200 -0
  33. package/libs/services/admin.js +183 -0
  34. package/libs/services/permission.js +465 -0
  35. package/libs/services/tenant.js +576 -0
  36. package/libs/services/user.js +108 -0
  37. package/package.json +61 -0
@@ -0,0 +1,53 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'permission',
4
+ {
5
+ applicationId: {
6
+ type: DataTypes.STRING,
7
+ allowNull: false
8
+ },
9
+ code: {
10
+ type: DataTypes.STRING,
11
+ allowNull: false
12
+ },
13
+ name: {
14
+ type: DataTypes.STRING,
15
+ allowNull: false
16
+ },
17
+ isModule: {
18
+ type: DataTypes.INTEGER,
19
+ defaultValue: 0 //0:操作项,1:模块
20
+ },
21
+ isMust: {
22
+ type: DataTypes.INTEGER,
23
+ defaultValue: 0 //0:非必须,1:必须
24
+ },
25
+ type: {
26
+ type: DataTypes.INTEGER,
27
+ defaultValue: 0 //0:基础模块,1:扩展模块
28
+ },
29
+ pid: {
30
+ type: DataTypes.INTEGER,
31
+ defaultValue: 0
32
+ },
33
+ paths: {
34
+ type: DataTypes.JSON,
35
+ defaultValue: []
36
+ },
37
+ description: DataTypes.TEXT,
38
+ status: {
39
+ type: DataTypes.INTEGER,
40
+ defaultValue: 0
41
+ }
42
+ },
43
+ {
44
+ paranoid: true,
45
+ indexes: [
46
+ {
47
+ unique: true,
48
+ fields: ['code', 'applicationId', 'pid', 'deletedAt']
49
+ }
50
+ ]
51
+ }
52
+ );
53
+ };
@@ -0,0 +1,28 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'tenantApplication',
4
+ {
5
+ tenantId: {
6
+ type: DataTypes.STRING,
7
+ allowNull: false
8
+ },
9
+ applicationId: {
10
+ type: DataTypes.INTEGER,
11
+ allowNull: false
12
+ },
13
+ status: {
14
+ type: DataTypes.INTEGER,
15
+ defaultValue: 0 //0:开启 11:关闭
16
+ }
17
+ },
18
+ {
19
+ paranoid: true,
20
+ indexes: [
21
+ {
22
+ unique: true,
23
+ fields: ['tenantId', 'applicationId', 'deletedAt']
24
+ }
25
+ ]
26
+ }
27
+ );
28
+ };
@@ -0,0 +1,30 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'tenantOrg',
4
+ {
5
+ tenantId: {
6
+ type: DataTypes.STRING,
7
+ allowNull: false
8
+ },
9
+ name: {
10
+ type: DataTypes.STRING,
11
+ allowNull: false
12
+ },
13
+ enName: {
14
+ type: DataTypes.STRING
15
+ },
16
+ pid: {
17
+ type: DataTypes.INTEGER,
18
+ defaultValue: 0,
19
+ allowNull: false //0:为根节点
20
+ },
21
+ status: {
22
+ type: DataTypes.INTEGER,
23
+ defaultValue: 0
24
+ }
25
+ },
26
+ {
27
+ paranoid: true
28
+ }
29
+ );
30
+ };
@@ -0,0 +1,28 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'tenantPermission',
4
+ {
5
+ tenantId: {
6
+ type: DataTypes.STRING,
7
+ allowNull: false
8
+ },
9
+ permissionId: {
10
+ type: DataTypes.INTEGER,
11
+ allowNull: false
12
+ },
13
+ status: {
14
+ type: DataTypes.INTEGER,
15
+ defaultValue: 0 //0:开启 11:关闭
16
+ }
17
+ },
18
+ {
19
+ paranoid: true,
20
+ indexes: [
21
+ {
22
+ unique: true,
23
+ fields: ['tenantId', 'permissionId', 'deletedAt']
24
+ }
25
+ ]
26
+ }
27
+ );
28
+ };
@@ -0,0 +1,32 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'tenantRoleApplication',
4
+ {
5
+ tenantId: {
6
+ type: DataTypes.STRING,
7
+ allowNull: false
8
+ },
9
+ applicationId: {
10
+ type: DataTypes.INTEGER,
11
+ allowNull: false
12
+ },
13
+ roleId: {
14
+ type: DataTypes.INTEGER,
15
+ allowNull: false
16
+ },
17
+ status: {
18
+ type: DataTypes.INTEGER,
19
+ defaultValue: 0 //0:开启 11:关闭
20
+ }
21
+ },
22
+ {
23
+ paranoid: true,
24
+ indexes: [
25
+ {
26
+ unique: true,
27
+ fields: ['tenantId', 'applicationId', 'roleId', 'deletedAt']
28
+ }
29
+ ]
30
+ }
31
+ );
32
+ };
@@ -0,0 +1,32 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'tenantRolePermission',
4
+ {
5
+ tenantId: {
6
+ type: DataTypes.STRING,
7
+ allowNull: false
8
+ },
9
+ permissionId: {
10
+ type: DataTypes.INTEGER,
11
+ allowNull: false
12
+ },
13
+ roleId: {
14
+ type: DataTypes.INTEGER,
15
+ allowNull: false
16
+ },
17
+ status: {
18
+ type: DataTypes.INTEGER,
19
+ defaultValue: 0 //0:开启 11:关闭
20
+ }
21
+ },
22
+ {
23
+ paranoid: true,
24
+ indexes: [
25
+ {
26
+ unique: true,
27
+ fields: ['tenantId', 'permissionId', 'roleId', 'deletedAt']
28
+ }
29
+ ]
30
+ }
31
+ );
32
+ };
@@ -0,0 +1,27 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'tenantRole',
4
+ {
5
+ tenantId: {
6
+ type: DataTypes.STRING,
7
+ allowNull: false
8
+ },
9
+ name: {
10
+ type: DataTypes.STRING,
11
+ allowNull: false
12
+ },
13
+ status: {
14
+ type: DataTypes.INTEGER,
15
+ defaultValue: 0
16
+ },
17
+ type: {
18
+ type: DataTypes.INTEGER,
19
+ defaultValue: 0 //0:用户自定义,1:系统默认
20
+ },
21
+ description: DataTypes.TEXT
22
+ },
23
+ {
24
+ paranoid: true
25
+ }
26
+ );
27
+ };
@@ -0,0 +1,22 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'tenantShareGroup',
4
+ {
5
+ tenantId: {
6
+ type: DataTypes.STRING,
7
+ allowNull: false
8
+ },
9
+ tenantShareGroupId: {
10
+ type: DataTypes.INTEGER,
11
+ allowNull: false
12
+ },
13
+ tenantPermissionId: {
14
+ type: DataTypes.INTEGER,
15
+ allowNull: false
16
+ }
17
+ },
18
+ {
19
+ paranoid: true
20
+ }
21
+ );
22
+ };
@@ -0,0 +1,22 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'tenantShareGroup',
4
+ {
5
+ tenantId: {
6
+ type: DataTypes.STRING,
7
+ allowNull: false
8
+ },
9
+ name: {
10
+ type: DataTypes.STRING,
11
+ allowNull: false
12
+ },
13
+ status: {
14
+ type: DataTypes.INTEGER,
15
+ defaultValue: 0
16
+ }
17
+ },
18
+ {
19
+ paranoid: true
20
+ }
21
+ );
22
+ };
@@ -0,0 +1,22 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'tenantUserShareGroup',
4
+ {
5
+ tenantId: {
6
+ type: DataTypes.STRING,
7
+ allowNull: false
8
+ },
9
+ tenantUserId: {
10
+ type: DataTypes.STRING,
11
+ allowNull: false
12
+ },
13
+ tenantShareGroupId: {
14
+ type: DataTypes.INTEGER,
15
+ allowNull: false
16
+ }
17
+ },
18
+ {
19
+ paranoid: true
20
+ }
21
+ );
22
+ };
@@ -0,0 +1,32 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'tenantToken',
4
+ {
5
+ tenantId: {
6
+ type: DataTypes.UUID,
7
+ allowNull: false
8
+ },
9
+ token: {
10
+ type: DataTypes.STRING,
11
+ allowNull: false
12
+ },
13
+ info: DataTypes.JSON,
14
+ type: {
15
+ type: DataTypes.INTEGER,
16
+ allowNull: false //10:邀请用户加入租户
17
+ },
18
+ createTenantUserId: {
19
+ type: DataTypes.UUID
20
+ }
21
+ },
22
+ {
23
+ paranoid: true,
24
+ indexes: [
25
+ {
26
+ unique: true,
27
+ fields: ['tenantId', 'token', 'type', 'deletedAt']
28
+ }
29
+ ]
30
+ }
31
+ );
32
+ };
@@ -0,0 +1,22 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'tenantUserOrg',
4
+ {
5
+ tenantId: {
6
+ type: DataTypes.STRING,
7
+ allowNull: false
8
+ },
9
+ tenantUserId: {
10
+ type: DataTypes.STRING,
11
+ allowNull: false
12
+ },
13
+ tenantOrgId: {
14
+ type: DataTypes.INTEGER,
15
+ allowNull: false
16
+ }
17
+ },
18
+ {
19
+ paranoid: true
20
+ }
21
+ );
22
+ };
@@ -0,0 +1,22 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'tenantUserRole',
4
+ {
5
+ tenantId: {
6
+ type: DataTypes.STRING,
7
+ allowNull: false
8
+ },
9
+ tenantUserId: {
10
+ type: DataTypes.STRING,
11
+ allowNull: false
12
+ },
13
+ tenantRoleId: {
14
+ type: DataTypes.INTEGER,
15
+ allowNull: false
16
+ }
17
+ },
18
+ {
19
+ paranoid: true
20
+ }
21
+ );
22
+ };
@@ -0,0 +1,22 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'tenantUserShareGroup',
4
+ {
5
+ tenantId: {
6
+ type: DataTypes.STRING,
7
+ allowNull: false
8
+ },
9
+ tenantUserId: {
10
+ type: DataTypes.STRING,
11
+ allowNull: false
12
+ },
13
+ tenantShareGroupId: {
14
+ type: DataTypes.INTEGER,
15
+ allowNull: false
16
+ }
17
+ },
18
+ {
19
+ paranoid: true
20
+ }
21
+ );
22
+ };
@@ -0,0 +1,56 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ const tenantUser = sequelize.define(
3
+ 'tenantUser',
4
+ {
5
+ id: {
6
+ type: DataTypes.UUID,
7
+ defaultValue: DataTypes.UUIDV4,
8
+ primaryKey: true
9
+ },
10
+ userId: {
11
+ type: DataTypes.UUID,
12
+ allowNull: false
13
+ },
14
+ tenantId: {
15
+ type: DataTypes.UUID,
16
+ allowNull: false
17
+ },
18
+ name: {
19
+ type: DataTypes.STRING,
20
+ allowNull: false
21
+ },
22
+ phone: {
23
+ type: DataTypes.STRING
24
+ },
25
+ email: {
26
+ type: DataTypes.STRING
27
+ },
28
+ avatar: {
29
+ type: DataTypes.STRING
30
+ },
31
+ description: {
32
+ type: DataTypes.TEXT
33
+ },
34
+ status: {
35
+ type: DataTypes.INTEGER,
36
+ defaultValue: 0 //0:正常,11:已禁用,12:已关闭,
37
+ }
38
+ },
39
+ {
40
+ paranoid: true,
41
+ indexes: [
42
+ {
43
+ unique: true,
44
+ fields: ['tenantId', 'userId', 'deletedAt']
45
+ }
46
+ ]
47
+ }
48
+ );
49
+
50
+ tenantUser.associate = ({ user, tenantRole, tenantUser, tenantUserRole, tenantOrg, tenantUserOrg }) => {
51
+ tenantUser.belongsToMany(tenantRole, { through: tenantUserRole });
52
+ tenantUser.belongsToMany(tenantOrg, { through: tenantUserOrg });
53
+ tenantUser.belongsTo(user);
54
+ };
55
+ return tenantUser;
56
+ };
@@ -0,0 +1,38 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'tenant',
4
+ {
5
+ id: {
6
+ type: DataTypes.UUID,
7
+ defaultValue: DataTypes.UUIDV4,
8
+ primaryKey: true
9
+ },
10
+ name: {
11
+ type: DataTypes.STRING,
12
+ allowNull: false
13
+ },
14
+ accountNumber: {
15
+ type: DataTypes.INTEGER,
16
+ defaultValue: 0,
17
+ allowNull: false
18
+ },
19
+ serviceStartTime: {
20
+ type: DataTypes.DATE,
21
+ defaultValue: new Date(),
22
+ allowNull: false
23
+ },
24
+ serviceEndTime: {
25
+ type: DataTypes.DATE,
26
+ allowNull: false
27
+ },
28
+ status: {
29
+ type: DataTypes.INTEGER,
30
+ defaultValue: 0 // 0:正常,10:过期被关闭,11:已禁用,12:已关闭,
31
+ },
32
+ description: DataTypes.TEXT
33
+ },
34
+ {
35
+ paranoid: true
36
+ }
37
+ );
38
+ };
@@ -0,0 +1,26 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'userAccount',
4
+ {
5
+ id: {
6
+ type: DataTypes.UUID,
7
+ defaultValue: DataTypes.UUIDV4,
8
+ primaryKey: true
9
+ },
10
+ password: {
11
+ type: DataTypes.STRING,
12
+ allowNull: false
13
+ },
14
+ salt: {
15
+ type: DataTypes.STRING,
16
+ allowNull: false
17
+ },
18
+ belongToUserId: {
19
+ type: DataTypes.UUID //用户修改密码时重新生成一条数据,该字段用于记录这个账号之前是属于哪个账号的
20
+ }
21
+ },
22
+ {
23
+ paranoid: true
24
+ }
25
+ );
26
+ };
@@ -0,0 +1,50 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ const user = sequelize.define(
3
+ 'user',
4
+ {
5
+ id: {
6
+ type: DataTypes.UUID,
7
+ defaultValue: DataTypes.UUIDV4,
8
+ primaryKey: true
9
+ },
10
+ nickname: DataTypes.STRING,
11
+ email: DataTypes.STRING,
12
+ phone: DataTypes.STRING,
13
+ userAccountId: {
14
+ type: DataTypes.UUID,
15
+ allowNull: false
16
+ },
17
+ status: {
18
+ type: DataTypes.INTEGER,
19
+ defaultValue: 0 //0:正常,10:初始化未激活,需要用户设置密码后使用,11:已禁用,12:已关闭,
20
+ },
21
+ currentTenantId: {
22
+ type: DataTypes.UUID
23
+ },
24
+ avatar: DataTypes.STRING,
25
+ gender: DataTypes.STRING, //F:女,M男
26
+ birthday: DataTypes.DATE,
27
+ description: DataTypes.TEXT
28
+ },
29
+ {
30
+ paranoid: true,
31
+ indexes: [
32
+ {
33
+ unique: true,
34
+ fields: ['email', 'deletedAt']
35
+ },
36
+ {
37
+ unique: true,
38
+ fields: ['phone', 'deletedAt']
39
+ }
40
+ ]
41
+ }
42
+ );
43
+
44
+ user.associate = ({ adminRole, user, tenant, tenantUser }) => {
45
+ user.hasOne(adminRole, { foreignKey: 'userId' });
46
+ user.belongsToMany(tenant, { through: { model: tenantUser, unique: false } });
47
+ };
48
+
49
+ return user;
50
+ };
@@ -0,0 +1,26 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ return sequelize.define(
3
+ 'verificationCode',
4
+ {
5
+ name: {
6
+ type: DataTypes.STRING,
7
+ allowNull: false
8
+ },
9
+ type: {
10
+ type: DataTypes.INTEGER,
11
+ allowNull: false //0:手机注册,1:邮箱注册,2:手机登录,3:邮箱登录,4:验证租户管理员
12
+ },
13
+ code: {
14
+ type: DataTypes.STRING,
15
+ allowNull: false
16
+ },
17
+ status: {
18
+ type: DataTypes.INTEGER,
19
+ defaultValue: 0 //0:未验证,1:已验证,2:已过期
20
+ }
21
+ },
22
+ {
23
+ paranoid: true
24
+ }
25
+ );
26
+ };