@nocobase/plugin-users 0.7.0-alpha.4 → 0.7.0-alpha.56

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 (53) hide show
  1. package/lib/actions/users.js +265 -163
  2. package/lib/collections/roles-users.js +12 -5
  3. package/lib/collections/users.js +87 -86
  4. package/lib/index.js +14 -8
  5. package/lib/jwt-service.js +50 -29
  6. package/lib/middlewares/check.js +28 -23
  7. package/lib/middlewares/index.js +20 -7
  8. package/lib/middlewares/parseToken.js +86 -62
  9. package/lib/models/UserModel.js +68 -53
  10. package/lib/server.d.ts +5 -10
  11. package/lib/server.js +253 -149
  12. package/package.json +3 -8
  13. package/esm/actions/users.d.ts +0 -11
  14. package/esm/actions/users.js +0 -165
  15. package/esm/actions/users.js.map +0 -1
  16. package/esm/collections/roles-users.d.ts +0 -3
  17. package/esm/collections/roles-users.js +0 -5
  18. package/esm/collections/roles-users.js.map +0 -1
  19. package/esm/collections/users.d.ts +0 -3
  20. package/esm/collections/users.js +0 -86
  21. package/esm/collections/users.js.map +0 -1
  22. package/esm/index.d.ts +0 -1
  23. package/esm/index.js +0 -2
  24. package/esm/index.js.map +0 -1
  25. package/esm/jwt-service.d.ts +0 -12
  26. package/esm/jwt-service.js +0 -26
  27. package/esm/jwt-service.js.map +0 -1
  28. package/esm/middlewares/check.d.ts +0 -1
  29. package/esm/middlewares/check.js +0 -22
  30. package/esm/middlewares/check.js.map +0 -1
  31. package/esm/middlewares/index.d.ts +0 -2
  32. package/esm/middlewares/index.js +0 -3
  33. package/esm/middlewares/index.js.map +0 -1
  34. package/esm/middlewares/parseToken.d.ts +0 -6
  35. package/esm/middlewares/parseToken.js +0 -64
  36. package/esm/middlewares/parseToken.js.map +0 -1
  37. package/esm/models/UserModel.d.ts +0 -4
  38. package/esm/models/UserModel.js +0 -53
  39. package/esm/models/UserModel.js.map +0 -1
  40. package/esm/server.d.ts +0 -23
  41. package/esm/server.js +0 -133
  42. package/esm/server.js.map +0 -1
  43. package/lib/actions/users.js.map +0 -1
  44. package/lib/collections/roles-users.js.map +0 -1
  45. package/lib/collections/users.js.map +0 -1
  46. package/lib/index.js.map +0 -1
  47. package/lib/jwt-service.js.map +0 -1
  48. package/lib/middlewares/check.js.map +0 -1
  49. package/lib/middlewares/index.js.map +0 -1
  50. package/lib/middlewares/parseToken.js.map +0 -1
  51. package/lib/models/UserModel.js.map +0 -1
  52. package/lib/server.js.map +0 -1
  53. package/tsconfig.build.json +0 -9
@@ -1,33 +1,54 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
6
  exports.JwtService = void 0;
7
- const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
7
+
8
+ function _jsonwebtoken() {
9
+ const data = _interopRequireDefault(require("jsonwebtoken"));
10
+
11
+ _jsonwebtoken = function _jsonwebtoken() {
12
+ return data;
13
+ };
14
+
15
+ return data;
16
+ }
17
+
18
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
+
8
20
  class JwtService {
9
- constructor(options) {
10
- this.options = options;
11
- }
12
- expiresIn() {
13
- return this.options.expiresIn || '7d';
14
- }
15
- secret() {
16
- return this.options.secret;
17
- }
18
- sign(payload) {
19
- return jsonwebtoken_1.default.sign(payload, this.secret(), { expiresIn: this.expiresIn() });
20
- }
21
- decode(token) {
22
- return new Promise((resolve, reject) => {
23
- jsonwebtoken_1.default.verify(token, this.secret(), (err, decoded) => {
24
- if (err) {
25
- return reject(err);
26
- }
27
- resolve(decoded);
28
- });
29
- });
30
- }
21
+ constructor(options) {
22
+ this.options = void 0;
23
+ this.options = options;
24
+ }
25
+
26
+ expiresIn() {
27
+ return this.options.expiresIn || '7d';
28
+ }
29
+
30
+ secret() {
31
+ return this.options.secret || process.env.APP_KEY;
32
+ }
33
+
34
+ sign(payload) {
35
+ return _jsonwebtoken().default.sign(payload, this.secret(), {
36
+ expiresIn: this.expiresIn()
37
+ });
38
+ }
39
+
40
+ decode(token) {
41
+ return new Promise((resolve, reject) => {
42
+ _jsonwebtoken().default.verify(token, this.secret(), (err, decoded) => {
43
+ if (err) {
44
+ return reject(err);
45
+ }
46
+
47
+ resolve(decoded);
48
+ });
49
+ });
50
+ }
51
+
31
52
  }
32
- exports.JwtService = JwtService;
33
- //# sourceMappingURL=jwt-service.js.map
53
+
54
+ exports.JwtService = JwtService;
@@ -1,26 +1,31 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.check = void 0;
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.check = check;
7
+
8
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
9
+
10
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
11
+
13
12
  // TODO(usage): 拦截用户的处理暂时作为一个中间件导出,应用需要的时候可以直接使用这个中间件
14
13
  function check(options) {
15
- return function check(ctx, next) {
16
- return __awaiter(this, void 0, void 0, function* () {
17
- const { currentUser } = ctx.state;
18
- if (!currentUser) {
19
- return ctx.throw(401, 'Unauthorized');
20
- }
21
- return next();
22
- });
23
- };
24
- }
25
- exports.check = check;
26
- //# sourceMappingURL=check.js.map
14
+ return /*#__PURE__*/function () {
15
+ var _check = _asyncToGenerator(function* (ctx, next) {
16
+ const currentUser = ctx.state.currentUser;
17
+
18
+ if (!currentUser) {
19
+ return ctx.throw(401, 'Unauthorized');
20
+ }
21
+
22
+ return next();
23
+ });
24
+
25
+ function check(_x, _x2) {
26
+ return _check.apply(this, arguments);
27
+ }
28
+
29
+ return check;
30
+ }();
31
+ }
@@ -1,8 +1,21 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseToken = exports.check = void 0;
4
- var check_1 = require("./check");
5
- Object.defineProperty(exports, "check", { enumerable: true, get: function () { return check_1.check; } });
6
- var parseToken_1 = require("./parseToken");
7
- Object.defineProperty(exports, "parseToken", { enumerable: true, get: function () { return parseToken_1.parseToken; } });
8
- //# sourceMappingURL=index.js.map
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "check", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _check.check;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "parseToken", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _parseToken.parseToken;
16
+ }
17
+ });
18
+
19
+ var _check = require("./check");
20
+
21
+ var _parseToken = require("./parseToken");
@@ -1,69 +1,93 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.setCurrentRole = exports.parseToken = void 0;
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.parseToken = parseToken;
7
+ exports.setCurrentRole = setCurrentRole;
8
+
9
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
10
+
11
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
12
+
13
13
  function parseToken(options) {
14
- return function parseToken(ctx, next) {
15
- return __awaiter(this, void 0, void 0, function* () {
16
- const user = yield findUserByToken(ctx, options.plugin);
17
- if (user) {
18
- ctx.state.currentUser = user;
19
- setCurrentRole(ctx);
20
- }
21
- return next();
22
- });
23
- };
14
+ return /*#__PURE__*/function () {
15
+ var _parseToken = _asyncToGenerator(function* (ctx, next) {
16
+ const user = yield findUserByToken(ctx, options.plugin);
17
+
18
+ if (user) {
19
+ ctx.state.currentUser = user;
20
+ setCurrentRole(ctx);
21
+ }
22
+
23
+ return next();
24
+ });
25
+
26
+ function parseToken(_x, _x2) {
27
+ return _parseToken.apply(this, arguments);
28
+ }
29
+
30
+ return parseToken;
31
+ }();
24
32
  }
25
- exports.parseToken = parseToken;
33
+
26
34
  function setCurrentRole(ctx) {
27
- var _a;
28
- let currentRole = ctx.get('X-Role');
29
- if (currentRole === 'anonymous') {
30
- ctx.state.currentRole = currentRole;
31
- return;
32
- }
33
- const userRoles = ctx.state.currentUser.roles;
34
- if (userRoles.length == 1) {
35
- currentRole = userRoles[0].name;
36
- }
37
- else if (userRoles.length > 1) {
38
- const role = userRoles.find((role) => role.name === currentRole);
39
- if (!role) {
40
- const defaultRole = userRoles.find((role) => { var _a; return (_a = role === null || role === void 0 ? void 0 : role.rolesUsers) === null || _a === void 0 ? void 0 : _a.default; });
41
- currentRole = (_a = (defaultRole || userRoles[0])) === null || _a === void 0 ? void 0 : _a.name;
42
- }
43
- }
44
- if (currentRole) {
45
- ctx.state.currentRole = currentRole;
35
+ let currentRole = ctx.get('X-Role');
36
+
37
+ if (currentRole === 'anonymous') {
38
+ ctx.state.currentRole = currentRole;
39
+ return;
40
+ }
41
+
42
+ const userRoles = ctx.state.currentUser.roles;
43
+
44
+ if (userRoles.length == 1) {
45
+ currentRole = userRoles[0].name;
46
+ } else if (userRoles.length > 1) {
47
+ const role = userRoles.find(role => role.name === currentRole);
48
+
49
+ if (!role) {
50
+ var _ref;
51
+
52
+ const defaultRole = userRoles.find(role => {
53
+ var _role$rolesUsers;
54
+
55
+ return role === null || role === void 0 ? void 0 : (_role$rolesUsers = role.rolesUsers) === null || _role$rolesUsers === void 0 ? void 0 : _role$rolesUsers.default;
56
+ });
57
+ currentRole = (_ref = defaultRole || userRoles[0]) === null || _ref === void 0 ? void 0 : _ref.name;
46
58
  }
59
+ }
60
+
61
+ if (currentRole) {
62
+ ctx.state.currentRole = currentRole;
63
+ }
47
64
  }
48
- exports.setCurrentRole = setCurrentRole;
49
- function findUserByToken(ctx, plugin) {
50
- return __awaiter(this, void 0, void 0, function* () {
51
- const token = ctx.getBearerToken();
52
- if (!token) {
53
- return null;
54
- }
55
- try {
56
- const { userId } = yield plugin.jwtService.decode(token);
57
- return yield ctx.db.getRepository('users').findOne({
58
- filter: {
59
- id: userId,
60
- },
61
- appends: ['roles'],
62
- });
63
- }
64
- catch (error) {
65
- console.warn(error);
66
- }
67
- });
65
+
66
+ function findUserByToken(_x3, _x4) {
67
+ return _findUserByToken.apply(this, arguments);
68
68
  }
69
- //# sourceMappingURL=parseToken.js.map
69
+
70
+ function _findUserByToken() {
71
+ _findUserByToken = _asyncToGenerator(function* (ctx, plugin) {
72
+ const token = ctx.getBearerToken();
73
+
74
+ if (!token) {
75
+ return null;
76
+ }
77
+
78
+ try {
79
+ const _yield$plugin$jwtServ = yield plugin.jwtService.decode(token),
80
+ userId = _yield$plugin$jwtServ.userId;
81
+
82
+ return yield ctx.db.getRepository('users').findOne({
83
+ filter: {
84
+ id: userId
85
+ },
86
+ appends: ['roles']
87
+ });
88
+ } catch (error) {
89
+ return null;
90
+ }
91
+ });
92
+ return _findUserByToken.apply(this, arguments);
93
+ }
@@ -1,57 +1,72 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
12
6
  exports.UserModel = void 0;
13
- const database_1 = require("@nocobase/database");
14
- class UserModel extends database_1.Model {
15
- setDefaultRole(roleName, options = {}) {
16
- return __awaiter(this, void 0, void 0, function* () {
17
- if (roleName == 'anonymous') {
18
- return false;
19
- }
20
- const db = this.constructor.database;
21
- const repository = db.getRepository('rolesUsers');
22
- if (!repository) {
23
- return false;
24
- }
25
- const transaction = options.transaction || (yield db.sequelize.transaction());
26
- try {
27
- yield repository.update({
28
- filter: {
29
- userId: this.get('id'),
30
- },
31
- values: {
32
- default: false,
33
- },
34
- transaction,
35
- });
36
- yield repository.update({
37
- filter: {
38
- userId: this.get('id'),
39
- roleName,
40
- },
41
- values: {
42
- default: true,
43
- },
44
- transaction,
45
- });
46
- yield transaction.commit();
47
- }
48
- catch (error) {
49
- yield transaction.rollback();
50
- throw error;
51
- }
52
- return true;
7
+
8
+ function _database() {
9
+ const data = require("@nocobase/database");
10
+
11
+ _database = function _database() {
12
+ return data;
13
+ };
14
+
15
+ return data;
16
+ }
17
+
18
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
19
+
20
+ function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
21
+
22
+ class UserModel extends _database().Model {
23
+ setDefaultRole(roleName, options = {}) {
24
+ var _this = this;
25
+
26
+ return _asyncToGenerator(function* () {
27
+ if (roleName == 'anonymous') {
28
+ return false;
29
+ }
30
+
31
+ const db = _this.constructor.database;
32
+ const repository = db.getRepository('rolesUsers');
33
+
34
+ if (!repository) {
35
+ return false;
36
+ }
37
+
38
+ const transaction = options.transaction || (yield db.sequelize.transaction());
39
+
40
+ try {
41
+ yield repository.update({
42
+ filter: {
43
+ userId: _this.get('id')
44
+ },
45
+ values: {
46
+ default: false
47
+ },
48
+ transaction
49
+ });
50
+ yield repository.update({
51
+ filter: {
52
+ userId: _this.get('id'),
53
+ roleName
54
+ },
55
+ values: {
56
+ default: true
57
+ },
58
+ transaction
53
59
  });
54
- }
60
+ yield transaction.commit();
61
+ } catch (error) {
62
+ yield transaction.rollback();
63
+ throw error;
64
+ }
65
+
66
+ return true;
67
+ })();
68
+ }
69
+
55
70
  }
56
- exports.UserModel = UserModel;
57
- //# sourceMappingURL=UserModel.js.map
71
+
72
+ exports.UserModel = UserModel;
package/lib/server.d.ts CHANGED
@@ -2,22 +2,17 @@ import { Plugin } from '@nocobase/server';
2
2
  import { JwtOptions, JwtService } from './jwt-service';
3
3
  export interface UserPluginConfig {
4
4
  jwt: JwtOptions;
5
- installing?: {
6
- adminNickname: string;
7
- adminEmail: string;
8
- adminPassword: string;
9
- };
10
5
  }
11
6
  export default class UsersPlugin extends Plugin<UserPluginConfig> {
12
7
  jwtService: JwtService;
13
8
  constructor(app: any, options: any);
14
9
  beforeLoad(): Promise<void>;
15
10
  load(): Promise<void>;
16
- getRootUserInfo(): {
17
- adminNickname: string;
18
- adminEmail: string;
19
- adminPassword: string;
11
+ getInstallingData(options?: any): {
12
+ rootEmail: any;
13
+ rootPassword: any;
14
+ rootNickname: any;
20
15
  };
21
- install(): Promise<void>;
16
+ install(options: any): Promise<void>;
22
17
  getName(): string;
23
18
  }