@nocobase/plugin-users 0.5.0-alpha.32 → 0.5.0-alpha.36

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.
@@ -7,3 +7,4 @@ export declare function lostpassword(ctx: Context, next: Next): Promise<void>;
7
7
  export declare function resetpassword(ctx: Context, next: Next): Promise<void>;
8
8
  export declare function getUserByResetToken(ctx: Context, next: Next): Promise<void>;
9
9
  export declare function updateProfile(ctx: Context, next: Next): Promise<void>;
10
+ export declare function changePassword(ctx: Context, next: Next): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"sources":["actions/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAIlD,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAQnD;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBA0BpD;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAGrD;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAcpD;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAoB1D;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAoB3D;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAajE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAQ3D","file":"users.d.ts","sourcesContent":["import { Context, Next } from '@nocobase/actions';\nimport { PASSWORD } from '@nocobase/database';\nimport cryptoRandomString from 'crypto-random-string';\n\nexport async function check(ctx: Context, next: Next) {\n if (ctx.state.currentUser) {\n const user = ctx.state.currentUser.toJSON();\n ctx.body = user;\n await next();\n } else {\n ctx.throw(401, 'Unauthorized');\n }\n}\n\nexport async function signin(ctx: Context, next: Next) {\n const { uniqueField = 'email', values } = ctx.action.params;\n console.log('signin.values', values);\n if (!values[uniqueField]) {\n ctx.throw(401, '请填写邮箱账号');\n }\n const User = ctx.db.getModel('users');\n const user = await User.scope('withPassword').findOne({\n where: {\n [uniqueField]: values[uniqueField],\n },\n });\n if (!user) {\n ctx.throw(401, '邮箱账号未注册');\n }\n const isValid = await PASSWORD.verify(values.password, user.password);\n if (!isValid) {\n ctx.throw(401, '密码错误,请您重新输入');\n }\n if (!user.token) {\n user.token = cryptoRandomString({ length: 20 });\n await user.save();\n }\n ctx.body = user.toJSON();\n delete ctx.body.password;\n await next();\n}\n\nexport async function signout(ctx: Context, next: Next) {\n ctx.body = {};\n await next();\n}\n\nexport async function signup(ctx: Context, next: Next) {\n const User = ctx.db.getModel('users');\n const { values } = ctx.action.params;\n try {\n const user = await User.create(values);\n ctx.body = user;\n } catch (error) {\n if (error.errors) {\n ctx.throw(401, error.errors.map((data) => data.message).join(', '));\n } else {\n ctx.throw(401, '注册失败');\n }\n }\n await next();\n}\n\nexport async function lostpassword(ctx: Context, next: Next) {\n const {\n values: { email },\n } = ctx.action.params;\n if (!email) {\n ctx.throw(401, '请填写邮箱账号');\n }\n const User = ctx.db.getModel('users');\n const user = await User.findOne({\n where: {\n email,\n },\n });\n if (!user) {\n ctx.throw(401, '邮箱账号未注册');\n }\n user.reset_token = cryptoRandomString({ length: 20 });\n await user.save();\n ctx.body = user;\n await next();\n}\n\nexport async function resetpassword(ctx: Context, next: Next) {\n const {\n values: { email, password, reset_token },\n } = ctx.action.params;\n const User = ctx.db.getModel('users');\n const user = await User.findOne({\n where: {\n email,\n reset_token,\n },\n });\n if (!user) {\n ctx.throw(401, 'Unauthorized');\n }\n user.token = null;\n user.reset_token = null;\n user.password = password;\n await user.save();\n ctx.body = user;\n await next();\n}\n\nexport async function getUserByResetToken(ctx: Context, next: Next) {\n const { token } = ctx.action.params;\n const User = ctx.db.getModel('users');\n const user = await User.findOne({\n where: {\n reset_token: token,\n },\n });\n if (!user) {\n ctx.throw(401, 'Unauthorized');\n }\n ctx.body = user;\n await next();\n}\n\nexport async function updateProfile(ctx: Context, next: Next) {\n const { values } = ctx.action.params;\n if (!ctx.state.currentUser) {\n ctx.throw(401, 'Unauthorized');\n }\n await ctx.state.currentUser.update(values);\n ctx.body = ctx.state.currentUser;\n await next();\n}\n"]}
1
+ {"version":3,"sources":["actions/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAIlD,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAQnD;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBA0BpD;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAGrD;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAcpD;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAoB1D;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAoB3D;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAajE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAQ3D;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,iBAqB5D","file":"users.d.ts","sourcesContent":["import { Context, Next } from '@nocobase/actions';\nimport { PASSWORD } from '@nocobase/database';\nimport cryptoRandomString from 'crypto-random-string';\n\nexport async function check(ctx: Context, next: Next) {\n if (ctx.state.currentUser) {\n const user = ctx.state.currentUser.toJSON();\n ctx.body = user;\n await next();\n } else {\n ctx.throw(401, 'Unauthorized');\n }\n}\n\nexport async function signin(ctx: Context, next: Next) {\n const { uniqueField = 'email', values } = ctx.action.params;\n console.log('signin.values', values);\n if (!values[uniqueField]) {\n ctx.throw(401, '请填写邮箱账号');\n }\n const User = ctx.db.getModel('users');\n const user = await User.scope('withPassword').findOne({\n where: {\n [uniqueField]: values[uniqueField],\n },\n });\n if (!user) {\n ctx.throw(401, '邮箱账号未注册');\n }\n const isValid = await PASSWORD.verify(values.password, user.password);\n if (!isValid) {\n ctx.throw(401, '密码错误,请您重新输入');\n }\n if (!user.token) {\n user.token = cryptoRandomString({ length: 20 });\n await user.save();\n }\n ctx.body = user.toJSON();\n delete ctx.body.password;\n await next();\n}\n\nexport async function signout(ctx: Context, next: Next) {\n ctx.body = {};\n await next();\n}\n\nexport async function signup(ctx: Context, next: Next) {\n const User = ctx.db.getModel('users');\n const { values } = ctx.action.params;\n try {\n const user = await User.create(values);\n ctx.body = user;\n } catch (error) {\n if (error.errors) {\n ctx.throw(401, error.errors.map((data) => data.message).join(', '));\n } else {\n ctx.throw(401, '注册失败');\n }\n }\n await next();\n}\n\nexport async function lostpassword(ctx: Context, next: Next) {\n const {\n values: { email },\n } = ctx.action.params;\n if (!email) {\n ctx.throw(401, '请填写邮箱账号');\n }\n const User = ctx.db.getModel('users');\n const user = await User.findOne({\n where: {\n email,\n },\n });\n if (!user) {\n ctx.throw(401, '邮箱账号未注册');\n }\n user.reset_token = cryptoRandomString({ length: 20 });\n await user.save();\n ctx.body = user;\n await next();\n}\n\nexport async function resetpassword(ctx: Context, next: Next) {\n const {\n values: { email, password, reset_token },\n } = ctx.action.params;\n const User = ctx.db.getModel('users');\n const user = await User.findOne({\n where: {\n email,\n reset_token,\n },\n });\n if (!user) {\n ctx.throw(401, 'Unauthorized');\n }\n user.token = null;\n user.reset_token = null;\n user.password = password;\n await user.save();\n ctx.body = user;\n await next();\n}\n\nexport async function getUserByResetToken(ctx: Context, next: Next) {\n const { token } = ctx.action.params;\n const User = ctx.db.getModel('users');\n const user = await User.findOne({\n where: {\n reset_token: token,\n },\n });\n if (!user) {\n ctx.throw(401, 'Unauthorized');\n }\n ctx.body = user;\n await next();\n}\n\nexport async function updateProfile(ctx: Context, next: Next) {\n const { values } = ctx.action.params;\n if (!ctx.state.currentUser) {\n ctx.throw(401, 'Unauthorized');\n }\n await ctx.state.currentUser.update(values);\n ctx.body = ctx.state.currentUser;\n await next();\n}\n\nexport async function changePassword(ctx: Context, next: Next) {\n const {\n values: { oldPassword, newPassword },\n } = ctx.action.params;\n if (!ctx.state.currentUser) {\n ctx.throw(401, 'Unauthorized');\n }\n const User = ctx.db.getModel('users');\n const user = await User.scope('withPassword').findOne({\n where: {\n email: ctx.state.currentUser.email,\n },\n });\n const isValid = await PASSWORD.verify(oldPassword, user.password);\n if (!isValid) {\n ctx.throw(401, '密码错误,请您重新输入');\n }\n user.password = newPassword;\n user.save();\n ctx.body = ctx.state.currentUser.toJSON();\n await next();\n}\n"]}
@@ -53,7 +53,7 @@ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
53
53
  Object.defineProperty(exports, "__esModule", {
54
54
  value: true
55
55
  });
56
- exports.updateProfile = exports.getUserByResetToken = exports.resetpassword = exports.lostpassword = exports.signup = exports.signout = exports.signin = exports.check = void 0;
56
+ exports.changePassword = exports.updateProfile = exports.getUserByResetToken = exports.resetpassword = exports.lostpassword = exports.signup = exports.signout = exports.signin = exports.check = void 0;
57
57
 
58
58
  const database_1 = require("@nocobase/database");
59
59
 
@@ -103,7 +103,7 @@ function signin(ctx, next) {
103
103
  }
104
104
 
105
105
  if (!user.token) {
106
- user.token = crypto_random_string_1.default({
106
+ user.token = (0, crypto_random_string_1.default)({
107
107
  length: 20
108
108
  });
109
109
  yield user.save();
@@ -167,7 +167,7 @@ function lostpassword(ctx, next) {
167
167
  ctx.throw(401, '邮箱账号未注册');
168
168
  }
169
169
 
170
- user.reset_token = crypto_random_string_1.default({
170
+ user.reset_token = (0, crypto_random_string_1.default)({
171
171
  length: 20
172
172
  });
173
173
  yield user.save();
@@ -243,4 +243,35 @@ function updateProfile(ctx, next) {
243
243
  }
244
244
 
245
245
  exports.updateProfile = updateProfile;
246
+
247
+ function changePassword(ctx, next) {
248
+ return __awaiter(this, void 0, void 0, function* () {
249
+ const _ctx$action$params$va2 = ctx.action.params.values,
250
+ oldPassword = _ctx$action$params$va2.oldPassword,
251
+ newPassword = _ctx$action$params$va2.newPassword;
252
+
253
+ if (!ctx.state.currentUser) {
254
+ ctx.throw(401, 'Unauthorized');
255
+ }
256
+
257
+ const User = ctx.db.getModel('users');
258
+ const user = yield User.scope('withPassword').findOne({
259
+ where: {
260
+ email: ctx.state.currentUser.email
261
+ }
262
+ });
263
+ const isValid = yield database_1.PASSWORD.verify(oldPassword, user.password);
264
+
265
+ if (!isValid) {
266
+ ctx.throw(401, '密码错误,请您重新输入');
267
+ }
268
+
269
+ user.password = newPassword;
270
+ user.save();
271
+ ctx.body = ctx.state.currentUser.toJSON();
272
+ yield next();
273
+ });
274
+ }
275
+
276
+ exports.changePassword = changePassword;
246
277
  //# sourceMappingURL=users.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["actions/users.ts"],"names":[],"mappings":"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","file":"users.js","sourcesContent":["import { Context, Next } from '@nocobase/actions';\nimport { PASSWORD } from '@nocobase/database';\nimport cryptoRandomString from 'crypto-random-string';\n\nexport async function check(ctx: Context, next: Next) {\n if (ctx.state.currentUser) {\n const user = ctx.state.currentUser.toJSON();\n ctx.body = user;\n await next();\n } else {\n ctx.throw(401, 'Unauthorized');\n }\n}\n\nexport async function signin(ctx: Context, next: Next) {\n const { uniqueField = 'email', values } = ctx.action.params;\n console.log('signin.values', values);\n if (!values[uniqueField]) {\n ctx.throw(401, '请填写邮箱账号');\n }\n const User = ctx.db.getModel('users');\n const user = await User.scope('withPassword').findOne({\n where: {\n [uniqueField]: values[uniqueField],\n },\n });\n if (!user) {\n ctx.throw(401, '邮箱账号未注册');\n }\n const isValid = await PASSWORD.verify(values.password, user.password);\n if (!isValid) {\n ctx.throw(401, '密码错误,请您重新输入');\n }\n if (!user.token) {\n user.token = cryptoRandomString({ length: 20 });\n await user.save();\n }\n ctx.body = user.toJSON();\n delete ctx.body.password;\n await next();\n}\n\nexport async function signout(ctx: Context, next: Next) {\n ctx.body = {};\n await next();\n}\n\nexport async function signup(ctx: Context, next: Next) {\n const User = ctx.db.getModel('users');\n const { values } = ctx.action.params;\n try {\n const user = await User.create(values);\n ctx.body = user;\n } catch (error) {\n if (error.errors) {\n ctx.throw(401, error.errors.map((data) => data.message).join(', '));\n } else {\n ctx.throw(401, '注册失败');\n }\n }\n await next();\n}\n\nexport async function lostpassword(ctx: Context, next: Next) {\n const {\n values: { email },\n } = ctx.action.params;\n if (!email) {\n ctx.throw(401, '请填写邮箱账号');\n }\n const User = ctx.db.getModel('users');\n const user = await User.findOne({\n where: {\n email,\n },\n });\n if (!user) {\n ctx.throw(401, '邮箱账号未注册');\n }\n user.reset_token = cryptoRandomString({ length: 20 });\n await user.save();\n ctx.body = user;\n await next();\n}\n\nexport async function resetpassword(ctx: Context, next: Next) {\n const {\n values: { email, password, reset_token },\n } = ctx.action.params;\n const User = ctx.db.getModel('users');\n const user = await User.findOne({\n where: {\n email,\n reset_token,\n },\n });\n if (!user) {\n ctx.throw(401, 'Unauthorized');\n }\n user.token = null;\n user.reset_token = null;\n user.password = password;\n await user.save();\n ctx.body = user;\n await next();\n}\n\nexport async function getUserByResetToken(ctx: Context, next: Next) {\n const { token } = ctx.action.params;\n const User = ctx.db.getModel('users');\n const user = await User.findOne({\n where: {\n reset_token: token,\n },\n });\n if (!user) {\n ctx.throw(401, 'Unauthorized');\n }\n ctx.body = user;\n await next();\n}\n\nexport async function updateProfile(ctx: Context, next: Next) {\n const { values } = ctx.action.params;\n if (!ctx.state.currentUser) {\n ctx.throw(401, 'Unauthorized');\n }\n await ctx.state.currentUser.update(values);\n ctx.body = ctx.state.currentUser;\n await next();\n}\n"]}
1
+ {"version":3,"sources":["actions/users.ts"],"names":[],"mappings":"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","file":"users.js","sourcesContent":["import { Context, Next } from '@nocobase/actions';\nimport { PASSWORD } from '@nocobase/database';\nimport cryptoRandomString from 'crypto-random-string';\n\nexport async function check(ctx: Context, next: Next) {\n if (ctx.state.currentUser) {\n const user = ctx.state.currentUser.toJSON();\n ctx.body = user;\n await next();\n } else {\n ctx.throw(401, 'Unauthorized');\n }\n}\n\nexport async function signin(ctx: Context, next: Next) {\n const { uniqueField = 'email', values } = ctx.action.params;\n console.log('signin.values', values);\n if (!values[uniqueField]) {\n ctx.throw(401, '请填写邮箱账号');\n }\n const User = ctx.db.getModel('users');\n const user = await User.scope('withPassword').findOne({\n where: {\n [uniqueField]: values[uniqueField],\n },\n });\n if (!user) {\n ctx.throw(401, '邮箱账号未注册');\n }\n const isValid = await PASSWORD.verify(values.password, user.password);\n if (!isValid) {\n ctx.throw(401, '密码错误,请您重新输入');\n }\n if (!user.token) {\n user.token = cryptoRandomString({ length: 20 });\n await user.save();\n }\n ctx.body = user.toJSON();\n delete ctx.body.password;\n await next();\n}\n\nexport async function signout(ctx: Context, next: Next) {\n ctx.body = {};\n await next();\n}\n\nexport async function signup(ctx: Context, next: Next) {\n const User = ctx.db.getModel('users');\n const { values } = ctx.action.params;\n try {\n const user = await User.create(values);\n ctx.body = user;\n } catch (error) {\n if (error.errors) {\n ctx.throw(401, error.errors.map((data) => data.message).join(', '));\n } else {\n ctx.throw(401, '注册失败');\n }\n }\n await next();\n}\n\nexport async function lostpassword(ctx: Context, next: Next) {\n const {\n values: { email },\n } = ctx.action.params;\n if (!email) {\n ctx.throw(401, '请填写邮箱账号');\n }\n const User = ctx.db.getModel('users');\n const user = await User.findOne({\n where: {\n email,\n },\n });\n if (!user) {\n ctx.throw(401, '邮箱账号未注册');\n }\n user.reset_token = cryptoRandomString({ length: 20 });\n await user.save();\n ctx.body = user;\n await next();\n}\n\nexport async function resetpassword(ctx: Context, next: Next) {\n const {\n values: { email, password, reset_token },\n } = ctx.action.params;\n const User = ctx.db.getModel('users');\n const user = await User.findOne({\n where: {\n email,\n reset_token,\n },\n });\n if (!user) {\n ctx.throw(401, 'Unauthorized');\n }\n user.token = null;\n user.reset_token = null;\n user.password = password;\n await user.save();\n ctx.body = user;\n await next();\n}\n\nexport async function getUserByResetToken(ctx: Context, next: Next) {\n const { token } = ctx.action.params;\n const User = ctx.db.getModel('users');\n const user = await User.findOne({\n where: {\n reset_token: token,\n },\n });\n if (!user) {\n ctx.throw(401, 'Unauthorized');\n }\n ctx.body = user;\n await next();\n}\n\nexport async function updateProfile(ctx: Context, next: Next) {\n const { values } = ctx.action.params;\n if (!ctx.state.currentUser) {\n ctx.throw(401, 'Unauthorized');\n }\n await ctx.state.currentUser.update(values);\n ctx.body = ctx.state.currentUser;\n await next();\n}\n\nexport async function changePassword(ctx: Context, next: Next) {\n const {\n values: { oldPassword, newPassword },\n } = ctx.action.params;\n if (!ctx.state.currentUser) {\n ctx.throw(401, 'Unauthorized');\n }\n const User = ctx.db.getModel('users');\n const user = await User.scope('withPassword').findOne({\n where: {\n email: ctx.state.currentUser.email,\n },\n });\n const isValid = await PASSWORD.verify(oldPassword, user.password);\n if (!isValid) {\n ctx.throw(401, '密码错误,请您重新输入');\n }\n user.password = newPassword;\n user.save();\n ctx.body = ctx.state.currentUser.toJSON();\n await next();\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["collections/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;;AAElD,wBA8EkB","file":"users.d.ts","sourcesContent":["import { TableOptions } from '@nocobase/database';\n\nexport default {\n name: 'users',\n title: '{{t(\"Users\")}}',\n sortable: 'sort',\n // developerMode: true,\n // internal: true,\n createdBy: false,\n updatedBy: false,\n privilege: 'undelete',\n scopes: {\n withPassword: {\n attributes: { include: ['password'] },\n },\n },\n defaultScope: {\n attributes: { exclude: ['password'] },\n },\n fields: [\n {\n interface: 'string',\n type: 'string',\n name: 'nickname',\n uiSchema: {\n type: 'string',\n title: '{{t(\"Nickname\")}}',\n 'x-component': 'Input',\n },\n },\n {\n interface: 'email',\n type: 'string',\n name: 'email',\n unique: true,\n privilege: 'undelete',\n uiSchema: {\n type: 'string',\n title: '{{t(\"Email\")}}',\n 'x-component': 'Input',\n require: true,\n },\n },\n {\n interface: 'password',\n type: 'password',\n name: 'password',\n privilege: 'undelete',\n uiSchema: {\n type: 'string',\n title: '{{t(\"Password\")}}',\n 'x-component': 'Password',\n },\n },\n {\n interface: 'select',\n type: 'string',\n name: 'appLang',\n privilege: 'undelete',\n state: 0,\n },\n {\n interface: 'password',\n type: 'string',\n name: 'token',\n unique: true,\n hidden: true,\n privilege: 'undelete',\n state: 0,\n },\n {\n interface: 'password',\n type: 'string',\n name: 'reset_token',\n unique: true,\n hidden: true,\n privilege: 'undelete',\n state: 0,\n },\n ],\n} as TableOptions;\n"]}
1
+ {"version":3,"sources":["collections/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;;AAElD,wBAsGkB","file":"users.d.ts","sourcesContent":["import { TableOptions } from '@nocobase/database';\n\nexport default {\n name: 'users',\n title: '{{t(\"Users\")}}',\n sortable: 'sort',\n // developerMode: true,\n // internal: true,\n createdBy: false,\n updatedBy: false,\n privilege: 'undelete',\n scopes: {\n withPassword: {\n attributes: { include: ['password'] },\n },\n },\n defaultScope: {\n attributes: { exclude: ['password'] },\n },\n fields: [\n {\n interface: 'string',\n type: 'string',\n name: 'nickname',\n uiSchema: {\n type: 'string',\n title: '{{t(\"Nickname\")}}',\n 'x-component': 'Input',\n },\n },\n {\n interface: 'email',\n type: 'string',\n name: 'email',\n unique: true,\n privilege: 'undelete',\n uiSchema: {\n type: 'string',\n title: '{{t(\"Email\")}}',\n 'x-component': 'Input',\n require: true,\n },\n },\n {\n interface: 'password',\n type: 'password',\n name: 'password',\n privilege: 'undelete',\n uiSchema: {\n type: 'string',\n title: '{{t(\"Password\")}}',\n 'x-component': 'Password',\n },\n },\n {\n interface: 'linkTo',\n type: 'belongsToMany',\n name: 'roles',\n target: 'roles',\n foreignKey: 'user_id',\n otherKey: 'role_name',\n sourceKey: 'id',\n targetKey: 'name',\n uiSchema: {\n type: 'array',\n title: '{{t(\"Roles\")}}',\n 'x-component': 'Select.Drawer',\n 'x-component-props': {\n multiple: true,\n fieldNames: {\n label: 'title',\n value: 'name',\n },\n },\n 'x-decorator': 'FormItem',\n 'x-designable-bar': 'Select.Drawer.DesignableBar',\n },\n },\n {\n interface: 'select',\n type: 'string',\n name: 'appLang',\n privilege: 'undelete',\n state: 0,\n },\n {\n interface: 'password',\n type: 'string',\n name: 'token',\n unique: true,\n hidden: true,\n privilege: 'undelete',\n state: 0,\n },\n {\n interface: 'password',\n type: 'string',\n name: 'reset_token',\n unique: true,\n hidden: true,\n privilege: 'undelete',\n state: 0,\n },\n ],\n} as TableOptions;\n"]}
@@ -65,6 +65,29 @@ exports.default = {
65
65
  title: '{{t("Password")}}',
66
66
  'x-component': 'Password'
67
67
  }
68
+ }, {
69
+ interface: 'linkTo',
70
+ type: 'belongsToMany',
71
+ name: 'roles',
72
+ target: 'roles',
73
+ foreignKey: 'user_id',
74
+ otherKey: 'role_name',
75
+ sourceKey: 'id',
76
+ targetKey: 'name',
77
+ uiSchema: {
78
+ type: 'array',
79
+ title: '{{t("Roles")}}',
80
+ 'x-component': 'Select.Drawer',
81
+ 'x-component-props': {
82
+ multiple: true,
83
+ fieldNames: {
84
+ label: 'title',
85
+ value: 'name'
86
+ }
87
+ },
88
+ 'x-decorator': 'FormItem',
89
+ 'x-designable-bar': 'Select.Drawer.DesignableBar'
90
+ }
68
91
  }, {
69
92
  interface: 'select',
70
93
  type: 'string',
@@ -1 +1 @@
1
- {"version":3,"sources":["collections/users.ts"],"names":[],"mappings":";;AAEA,kBAAe;IACb,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,gBAAgB;IACvB,QAAQ,EAAE,MAAM;IAGhB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,UAAU;IACrB,MAAM,EAAE;QACN,YAAY,EAAE;YACZ,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE;SACtC;KACF;IACD,YAAY,EAAE;QACZ,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE;KACtC;IACD,MAAM,EAAE;QACN;YACE,SAAS,EAAE,QAAQ;YACnB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,mBAAmB;gBAC1B,aAAa,EAAE,OAAO;aACvB;SACF;QACD;YACE,SAAS,EAAE,OAAO;YAClB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,UAAU;YACrB,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,gBAAgB;gBACvB,aAAa,EAAE,OAAO;gBACtB,OAAO,EAAE,IAAI;aACd;SACF;QACD;YACE,SAAS,EAAE,UAAU;YACrB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,UAAU;YACrB,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,mBAAmB;gBAC1B,aAAa,EAAE,UAAU;aAC1B;SACF;QACD;YACE,SAAS,EAAE,QAAQ;YACnB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,UAAU;YACrB,KAAK,EAAE,CAAC;SACT;QACD;YACE,SAAS,EAAE,UAAU;YACrB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,UAAU;YACrB,KAAK,EAAE,CAAC;SACT;QACD;YACE,SAAS,EAAE,UAAU;YACrB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,UAAU;YACrB,KAAK,EAAE,CAAC;SACT;KACF;CACc,CAAC","file":"users.js","sourcesContent":["import { TableOptions } from '@nocobase/database';\n\nexport default {\n name: 'users',\n title: '{{t(\"Users\")}}',\n sortable: 'sort',\n // developerMode: true,\n // internal: true,\n createdBy: false,\n updatedBy: false,\n privilege: 'undelete',\n scopes: {\n withPassword: {\n attributes: { include: ['password'] },\n },\n },\n defaultScope: {\n attributes: { exclude: ['password'] },\n },\n fields: [\n {\n interface: 'string',\n type: 'string',\n name: 'nickname',\n uiSchema: {\n type: 'string',\n title: '{{t(\"Nickname\")}}',\n 'x-component': 'Input',\n },\n },\n {\n interface: 'email',\n type: 'string',\n name: 'email',\n unique: true,\n privilege: 'undelete',\n uiSchema: {\n type: 'string',\n title: '{{t(\"Email\")}}',\n 'x-component': 'Input',\n require: true,\n },\n },\n {\n interface: 'password',\n type: 'password',\n name: 'password',\n privilege: 'undelete',\n uiSchema: {\n type: 'string',\n title: '{{t(\"Password\")}}',\n 'x-component': 'Password',\n },\n },\n {\n interface: 'select',\n type: 'string',\n name: 'appLang',\n privilege: 'undelete',\n state: 0,\n },\n {\n interface: 'password',\n type: 'string',\n name: 'token',\n unique: true,\n hidden: true,\n privilege: 'undelete',\n state: 0,\n },\n {\n interface: 'password',\n type: 'string',\n name: 'reset_token',\n unique: true,\n hidden: true,\n privilege: 'undelete',\n state: 0,\n },\n ],\n} as TableOptions;\n"]}
1
+ {"version":3,"sources":["collections/users.ts"],"names":[],"mappings":";;AAEA,kBAAe;IACb,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,gBAAgB;IACvB,QAAQ,EAAE,MAAM;IAGhB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,UAAU;IACrB,MAAM,EAAE;QACN,YAAY,EAAE;YACZ,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE;SACtC;KACF;IACD,YAAY,EAAE;QACZ,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE;KACtC;IACD,MAAM,EAAE;QACN;YACE,SAAS,EAAE,QAAQ;YACnB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,UAAU;YAChB,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,mBAAmB;gBAC1B,aAAa,EAAE,OAAO;aACvB;SACF;QACD;YACE,SAAS,EAAE,OAAO;YAClB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,UAAU;YACrB,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,gBAAgB;gBACvB,aAAa,EAAE,OAAO;gBACtB,OAAO,EAAE,IAAI;aACd;SACF;QACD;YACE,SAAS,EAAE,UAAU;YACrB,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,UAAU;YAChB,SAAS,EAAE,UAAU;YACrB,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,mBAAmB;gBAC1B,aAAa,EAAE,UAAU;aAC1B;SACF;QACD;YACE,SAAS,EAAE,QAAQ;YACnB,IAAI,EAAE,eAAe;YACrB,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,OAAO;YACf,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,IAAI;YACf,SAAS,EAAE,MAAM;YACjB,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,gBAAgB;gBACvB,aAAa,EAAE,eAAe;gBAC9B,mBAAmB,EAAE;oBACnB,QAAQ,EAAE,IAAI;oBACd,UAAU,EAAE;wBACV,KAAK,EAAE,OAAO;wBACd,KAAK,EAAE,MAAM;qBACd;iBACF;gBACD,aAAa,EAAE,UAAU;gBACzB,kBAAkB,EAAE,6BAA6B;aAClD;SACF;QACD;YACE,SAAS,EAAE,QAAQ;YACnB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,SAAS;YACf,SAAS,EAAE,UAAU;YACrB,KAAK,EAAE,CAAC;SACT;QACD;YACE,SAAS,EAAE,UAAU;YACrB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,OAAO;YACb,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,UAAU;YACrB,KAAK,EAAE,CAAC;SACT;QACD;YACE,SAAS,EAAE,UAAU;YACrB,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,aAAa;YACnB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,UAAU;YACrB,KAAK,EAAE,CAAC;SACT;KACF;CACc,CAAC","file":"users.js","sourcesContent":["import { TableOptions } from '@nocobase/database';\n\nexport default {\n name: 'users',\n title: '{{t(\"Users\")}}',\n sortable: 'sort',\n // developerMode: true,\n // internal: true,\n createdBy: false,\n updatedBy: false,\n privilege: 'undelete',\n scopes: {\n withPassword: {\n attributes: { include: ['password'] },\n },\n },\n defaultScope: {\n attributes: { exclude: ['password'] },\n },\n fields: [\n {\n interface: 'string',\n type: 'string',\n name: 'nickname',\n uiSchema: {\n type: 'string',\n title: '{{t(\"Nickname\")}}',\n 'x-component': 'Input',\n },\n },\n {\n interface: 'email',\n type: 'string',\n name: 'email',\n unique: true,\n privilege: 'undelete',\n uiSchema: {\n type: 'string',\n title: '{{t(\"Email\")}}',\n 'x-component': 'Input',\n require: true,\n },\n },\n {\n interface: 'password',\n type: 'password',\n name: 'password',\n privilege: 'undelete',\n uiSchema: {\n type: 'string',\n title: '{{t(\"Password\")}}',\n 'x-component': 'Password',\n },\n },\n {\n interface: 'linkTo',\n type: 'belongsToMany',\n name: 'roles',\n target: 'roles',\n foreignKey: 'user_id',\n otherKey: 'role_name',\n sourceKey: 'id',\n targetKey: 'name',\n uiSchema: {\n type: 'array',\n title: '{{t(\"Roles\")}}',\n 'x-component': 'Select.Drawer',\n 'x-component-props': {\n multiple: true,\n fieldNames: {\n label: 'title',\n value: 'name',\n },\n },\n 'x-decorator': 'FormItem',\n 'x-designable-bar': 'Select.Drawer.DesignableBar',\n },\n },\n {\n interface: 'select',\n type: 'string',\n name: 'appLang',\n privilege: 'undelete',\n state: 0,\n },\n {\n interface: 'password',\n type: 'string',\n name: 'token',\n unique: true,\n hidden: true,\n privilege: 'undelete',\n state: 0,\n },\n {\n interface: 'password',\n type: 'string',\n name: 'reset_token',\n unique: true,\n hidden: true,\n privilege: 'undelete',\n state: 0,\n },\n ],\n} as TableOptions;\n"]}
package/lib/index.d.ts CHANGED
@@ -1 +1 @@
1
-
1
+ export { default } from './server';
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":"","file":"index.d.ts","sourcesContent":[""]}
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC","file":"index.d.ts","sourcesContent":["export { default } from './server';\n"]}
package/lib/index.js CHANGED
@@ -11,4 +11,24 @@ function _react() {
11
11
  }
12
12
 
13
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+
15
+ var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
16
+ return mod && mod.__esModule ? mod : {
17
+ "default": mod
18
+ };
19
+ };
20
+
21
+ Object.defineProperty(exports, "__esModule", {
22
+ value: true
23
+ });
24
+ exports.default = void 0;
25
+
26
+ var server_1 = require("./server");
27
+
28
+ Object.defineProperty(exports, "default", {
29
+ enumerable: true,
30
+ get: function get() {
31
+ return __importDefault(server_1).default;
32
+ }
33
+ });
14
34
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":"","file":"index.js","sourcesContent":[""]}
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;AAAA,mCAAmC;AAA1B,kHAAA,OAAO,OAAA","file":"index.js","sourcesContent":["export { default } from './server';\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["server.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;;AAEjD,wBA6CmB","file":"server.d.ts","sourcesContent":["import path from 'path';\nimport { registerFields, Table } from '@nocobase/database';\nimport * as fields from './fields';\nimport * as usersActions from './actions/users';\nimport * as middlewares from './middlewares';\nimport { PluginOptions } from '@nocobase/server';\n\nexport default {\n name: 'users',\n async load() {\n const database = this.app.db;\n const resourcer = this.app.resourcer;\n\n registerFields(fields);\n\n this.app.on('db.init', async () => {\n const User = database.getModel('users');\n await User.create({\n nickname: 'Super Admin',\n email: process.env.ADMIN_EMAIL || 'admin@nocobase.com',\n password: process.env.ADMIN_PASSWORD || 'admin123',\n });\n });\n\n database.on('afterTableInit', (table: Table) => {\n let { createdBy, updatedBy } = table.getOptions();\n if (createdBy !== false) {\n table.addField({\n type: 'createdBy',\n name: typeof createdBy === 'string' ? createdBy : 'createdBy',\n target: 'users',\n });\n }\n if (updatedBy !== false) {\n table.addField({\n type: 'updatedBy',\n name: typeof updatedBy === 'string' ? updatedBy : 'updatedBy',\n target: 'users',\n });\n }\n });\n\n database.import({\n directory: path.resolve(__dirname, 'collections'),\n });\n\n for (const [key, action] of Object.entries(usersActions)) {\n resourcer.registerActionHandler(`users:${key}`, action);\n }\n\n resourcer.use(middlewares.parseToken({}));\n },\n} as PluginOptions;\n"]}
1
+ {"version":3,"sources":["server.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;;AAEjD,wBA+CmB","file":"server.d.ts","sourcesContent":["import path from 'path';\nimport { registerFields, Table } from '@nocobase/database';\nimport * as fields from './fields';\nimport * as usersActions from './actions/users';\nimport * as middlewares from './middlewares';\nimport { PluginOptions } from '@nocobase/server';\n\nexport default {\n name: 'users',\n async load() {\n const database = this.app.db;\n const resourcer = this.app.resourcer;\n\n registerFields(fields);\n\n this.app.on('db.init', async () => {\n const User = database.getModel('users');\n await User.create({\n nickname: 'Super Admin',\n email: process.env.ADMIN_EMAIL || 'admin@nocobase.com',\n password: process.env.ADMIN_PASSWORD || 'admin123',\n });\n });\n\n database.on('afterTableInit', (table: Table) => {\n let { createdBy, updatedBy } = table.getOptions();\n if (createdBy !== false) {\n table.addField({\n type: 'createdBy',\n name: typeof createdBy === 'string' ? createdBy : 'createdBy',\n target: 'users',\n state: 0,\n });\n }\n if (updatedBy !== false) {\n table.addField({\n type: 'updatedBy',\n name: typeof updatedBy === 'string' ? updatedBy : 'updatedBy',\n target: 'users',\n state: 0,\n });\n }\n });\n\n database.import({\n directory: path.resolve(__dirname, 'collections'),\n });\n\n for (const [key, action] of Object.entries(usersActions)) {\n resourcer.registerActionHandler(`users:${key}`, action);\n }\n\n resourcer.use(middlewares.parseToken({}));\n },\n} as PluginOptions;\n"]}
package/lib/server.js CHANGED
@@ -115,7 +115,7 @@ exports.default = {
115
115
  return __awaiter(this, void 0, void 0, function* () {
116
116
  const database = this.app.db;
117
117
  const resourcer = this.app.resourcer;
118
- database_1.registerFields(fields);
118
+ (0, database_1.registerFields)(fields);
119
119
  this.app.on('db.init', () => __awaiter(this, void 0, void 0, function* () {
120
120
  const User = database.getModel('users');
121
121
  yield User.create({
@@ -133,7 +133,8 @@ exports.default = {
133
133
  table.addField({
134
134
  type: 'createdBy',
135
135
  name: typeof createdBy === 'string' ? createdBy : 'createdBy',
136
- target: 'users'
136
+ target: 'users',
137
+ state: 0
137
138
  });
138
139
  }
139
140
 
@@ -141,7 +142,8 @@ exports.default = {
141
142
  table.addField({
142
143
  type: 'updatedBy',
143
144
  name: typeof updatedBy === 'string' ? updatedBy : 'updatedBy',
144
- target: 'users'
145
+ target: 'users',
146
+ state: 0
145
147
  });
146
148
  }
147
149
  });
package/lib/server.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,iDAA2D;AAC3D,iDAAmC;AACnC,8DAAgD;AAChD,2DAA6C;AAG7C,kBAAe;IACb,IAAI,EAAE,OAAO;IACP,IAAI;;YACR,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAErC,yBAAc,CAAC,MAAM,CAAC,CAAC;YAEvB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAS,EAAE;gBAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACxC,MAAM,IAAI,CAAC,MAAM,CAAC;oBAChB,QAAQ,EAAE,aAAa;oBACvB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,oBAAoB;oBACtD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,UAAU;iBACnD,CAAC,CAAC;YACL,CAAC,CAAA,CAAC,CAAC;YAEH,QAAQ,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,KAAY,EAAE,EAAE;gBAC7C,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;gBAClD,IAAI,SAAS,KAAK,KAAK,EAAE;oBACvB,KAAK,CAAC,QAAQ,CAAC;wBACb,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;wBAC7D,MAAM,EAAE,OAAO;qBAChB,CAAC,CAAC;iBACJ;gBACD,IAAI,SAAS,KAAK,KAAK,EAAE;oBACvB,KAAK,CAAC,QAAQ,CAAC;wBACb,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;wBAC7D,MAAM,EAAE,OAAO;qBAChB,CAAC,CAAC;iBACJ;YACH,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,MAAM,CAAC;gBACd,SAAS,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC;aAClD,CAAC,CAAC;YAEH,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;gBACxD,SAAS,CAAC,qBAAqB,CAAC,SAAS,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;aACzD;YAED,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;KAAA;CACe,CAAC","file":"server.js","sourcesContent":["import path from 'path';\nimport { registerFields, Table } from '@nocobase/database';\nimport * as fields from './fields';\nimport * as usersActions from './actions/users';\nimport * as middlewares from './middlewares';\nimport { PluginOptions } from '@nocobase/server';\n\nexport default {\n name: 'users',\n async load() {\n const database = this.app.db;\n const resourcer = this.app.resourcer;\n\n registerFields(fields);\n\n this.app.on('db.init', async () => {\n const User = database.getModel('users');\n await User.create({\n nickname: 'Super Admin',\n email: process.env.ADMIN_EMAIL || 'admin@nocobase.com',\n password: process.env.ADMIN_PASSWORD || 'admin123',\n });\n });\n\n database.on('afterTableInit', (table: Table) => {\n let { createdBy, updatedBy } = table.getOptions();\n if (createdBy !== false) {\n table.addField({\n type: 'createdBy',\n name: typeof createdBy === 'string' ? createdBy : 'createdBy',\n target: 'users',\n });\n }\n if (updatedBy !== false) {\n table.addField({\n type: 'updatedBy',\n name: typeof updatedBy === 'string' ? updatedBy : 'updatedBy',\n target: 'users',\n });\n }\n });\n\n database.import({\n directory: path.resolve(__dirname, 'collections'),\n });\n\n for (const [key, action] of Object.entries(usersActions)) {\n resourcer.registerActionHandler(`users:${key}`, action);\n }\n\n resourcer.use(middlewares.parseToken({}));\n },\n} as PluginOptions;\n"]}
1
+ {"version":3,"sources":["server.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAwB;AACxB,iDAA2D;AAC3D,iDAAmC;AACnC,8DAAgD;AAChD,2DAA6C;AAG7C,kBAAe;IACb,IAAI,EAAE,OAAO;IACP,IAAI;;YACR,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YAErC,IAAA,yBAAc,EAAC,MAAM,CAAC,CAAC;YAEvB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAS,EAAE;gBAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACxC,MAAM,IAAI,CAAC,MAAM,CAAC;oBAChB,QAAQ,EAAE,aAAa;oBACvB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,oBAAoB;oBACtD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,UAAU;iBACnD,CAAC,CAAC;YACL,CAAC,CAAA,CAAC,CAAC;YAEH,QAAQ,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,KAAY,EAAE,EAAE;gBAC7C,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;gBAClD,IAAI,SAAS,KAAK,KAAK,EAAE;oBACvB,KAAK,CAAC,QAAQ,CAAC;wBACb,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;wBAC7D,MAAM,EAAE,OAAO;wBACf,KAAK,EAAE,CAAC;qBACT,CAAC,CAAC;iBACJ;gBACD,IAAI,SAAS,KAAK,KAAK,EAAE;oBACvB,KAAK,CAAC,QAAQ,CAAC;wBACb,IAAI,EAAE,WAAW;wBACjB,IAAI,EAAE,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW;wBAC7D,MAAM,EAAE,OAAO;wBACf,KAAK,EAAE,CAAC;qBACT,CAAC,CAAC;iBACJ;YACH,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,MAAM,CAAC;gBACd,SAAS,EAAE,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC;aAClD,CAAC,CAAC;YAEH,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;gBACxD,SAAS,CAAC,qBAAqB,CAAC,SAAS,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;aACzD;YAED,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;KAAA;CACe,CAAC","file":"server.js","sourcesContent":["import path from 'path';\nimport { registerFields, Table } from '@nocobase/database';\nimport * as fields from './fields';\nimport * as usersActions from './actions/users';\nimport * as middlewares from './middlewares';\nimport { PluginOptions } from '@nocobase/server';\n\nexport default {\n name: 'users',\n async load() {\n const database = this.app.db;\n const resourcer = this.app.resourcer;\n\n registerFields(fields);\n\n this.app.on('db.init', async () => {\n const User = database.getModel('users');\n await User.create({\n nickname: 'Super Admin',\n email: process.env.ADMIN_EMAIL || 'admin@nocobase.com',\n password: process.env.ADMIN_PASSWORD || 'admin123',\n });\n });\n\n database.on('afterTableInit', (table: Table) => {\n let { createdBy, updatedBy } = table.getOptions();\n if (createdBy !== false) {\n table.addField({\n type: 'createdBy',\n name: typeof createdBy === 'string' ? createdBy : 'createdBy',\n target: 'users',\n state: 0,\n });\n }\n if (updatedBy !== false) {\n table.addField({\n type: 'updatedBy',\n name: typeof updatedBy === 'string' ? updatedBy : 'updatedBy',\n target: 'users',\n state: 0,\n });\n }\n });\n\n database.import({\n directory: path.resolve(__dirname, 'collections'),\n });\n\n for (const [key, action] of Object.entries(usersActions)) {\n resourcer.registerActionHandler(`users:${key}`, action);\n }\n\n resourcer.use(middlewares.parseToken({}));\n },\n} as PluginOptions;\n"]}
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@nocobase/plugin-users",
3
- "version": "0.5.0-alpha.32",
3
+ "version": "0.5.0-alpha.36",
4
4
  "main": "lib/index.js",
5
5
  "license": "MIT",
6
6
  "dependencies": {
7
- "@nocobase/server": "^0.5.0-alpha.32",
7
+ "@nocobase/server": "^0.5.0-alpha.36",
8
8
  "crypto-random-string": "^3.3.0"
9
9
  },
10
10
  "devDependencies": {
11
- "@nocobase/test": "^0.5.0-alpha.32"
11
+ "@nocobase/test": "^0.5.0-alpha.36"
12
12
  },
13
- "gitHead": "7be6327458cb376e7281cff42a43a282105b65f8"
13
+ "gitHead": "9998cd903bf87bf9a5d8a7616055f0cd1a007a72"
14
14
  }