@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.
- package/lib/actions/users.js +265 -163
- package/lib/collections/roles-users.js +12 -5
- package/lib/collections/users.js +87 -86
- package/lib/index.js +14 -8
- package/lib/jwt-service.js +50 -29
- package/lib/middlewares/check.js +28 -23
- package/lib/middlewares/index.js +20 -7
- package/lib/middlewares/parseToken.js +86 -62
- package/lib/models/UserModel.js +68 -53
- package/lib/server.d.ts +5 -10
- package/lib/server.js +253 -149
- package/package.json +3 -8
- package/esm/actions/users.d.ts +0 -11
- package/esm/actions/users.js +0 -165
- package/esm/actions/users.js.map +0 -1
- package/esm/collections/roles-users.d.ts +0 -3
- package/esm/collections/roles-users.js +0 -5
- package/esm/collections/roles-users.js.map +0 -1
- package/esm/collections/users.d.ts +0 -3
- package/esm/collections/users.js +0 -86
- package/esm/collections/users.js.map +0 -1
- package/esm/index.d.ts +0 -1
- package/esm/index.js +0 -2
- package/esm/index.js.map +0 -1
- package/esm/jwt-service.d.ts +0 -12
- package/esm/jwt-service.js +0 -26
- package/esm/jwt-service.js.map +0 -1
- package/esm/middlewares/check.d.ts +0 -1
- package/esm/middlewares/check.js +0 -22
- package/esm/middlewares/check.js.map +0 -1
- package/esm/middlewares/index.d.ts +0 -2
- package/esm/middlewares/index.js +0 -3
- package/esm/middlewares/index.js.map +0 -1
- package/esm/middlewares/parseToken.d.ts +0 -6
- package/esm/middlewares/parseToken.js +0 -64
- package/esm/middlewares/parseToken.js.map +0 -1
- package/esm/models/UserModel.d.ts +0 -4
- package/esm/models/UserModel.js +0 -53
- package/esm/models/UserModel.js.map +0 -1
- package/esm/server.d.ts +0 -23
- package/esm/server.js +0 -133
- package/esm/server.js.map +0 -1
- package/lib/actions/users.js.map +0 -1
- package/lib/collections/roles-users.js.map +0 -1
- package/lib/collections/users.js.map +0 -1
- package/lib/index.js.map +0 -1
- package/lib/jwt-service.js.map +0 -1
- package/lib/middlewares/check.js.map +0 -1
- package/lib/middlewares/index.js.map +0 -1
- package/lib/middlewares/parseToken.js.map +0 -1
- package/lib/models/UserModel.js.map +0 -1
- package/lib/server.js.map +0 -1
- package/tsconfig.build.json +0 -9
package/lib/jwt-service.js
CHANGED
|
@@ -1,33 +1,54 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
6
|
exports.JwtService = void 0;
|
|
7
|
-
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
33
|
-
|
|
53
|
+
|
|
54
|
+
exports.JwtService = JwtService;
|
package/lib/middlewares/check.js
CHANGED
|
@@ -1,26 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
};
|
|
11
|
-
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
|
|
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
|
+
}
|
package/lib/middlewares/index.js
CHANGED
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
33
|
+
|
|
26
34
|
function setCurrentRole(ctx) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
49
|
-
function findUserByToken(
|
|
50
|
-
|
|
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
|
-
|
|
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
|
+
}
|
package/lib/models/UserModel.js
CHANGED
|
@@ -1,57 +1,72 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|
-
|
|
57
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
}
|