diff --git a/packages/plugin-users/src/__tests__/fields.test.ts b/packages/plugin-users/src/__tests__/fields.test.ts index e338fe75a..a2c66f59b 100644 --- a/packages/plugin-users/src/__tests__/fields.test.ts +++ b/packages/plugin-users/src/__tests__/fields.test.ts @@ -1,14 +1,16 @@ import Database from '@nocobase/database'; +import PluginACL from '@nocobase/plugin-acl'; +import UsersPlugin from '@nocobase/plugin-users'; import { mockServer, MockServer } from '@nocobase/test'; import { userPluginConfig } from './utils'; - describe('createdBy/updatedBy', () => { let api: MockServer; let db: Database; beforeEach(async () => { api = mockServer(); - api.plugin(require('../server').default, userPluginConfig); + api.plugin(UsersPlugin, userPluginConfig); + api.plugin(PluginACL); await api.loadAndInstall(); db = api.db; }); diff --git a/packages/plugin-users/src/middlewares/parseToken.ts b/packages/plugin-users/src/middlewares/parseToken.ts index 0f8bb723b..8c5828203 100644 --- a/packages/plugin-users/src/middlewares/parseToken.ts +++ b/packages/plugin-users/src/middlewares/parseToken.ts @@ -27,7 +27,7 @@ export function setCurrentRole(ctx) { } else if (userRoles.length > 1) { const role = userRoles.find((role) => role.name === currentRole); if (!role) { - const defaultRole = userRoles.find((role) => role.rolesUsers?.default); + const defaultRole = userRoles.find((role) => role?.rolesUsers?.default); currentRole = (defaultRole || userRoles[0])?.name; } } diff --git a/packages/plugin-users/src/models/UserModel.ts b/packages/plugin-users/src/models/UserModel.ts index 191c66a08..70f635e11 100644 --- a/packages/plugin-users/src/models/UserModel.ts +++ b/packages/plugin-users/src/models/UserModel.ts @@ -7,10 +7,14 @@ export class UserModel extends Model { } const db = (this.constructor as any).database as Database; + const repository = db.getRepository('rolesUsers'); + if (!repository) { + return false; + } const transaction = options.transaction || (await db.sequelize.transaction()); try { - await db.getRepository('rolesUsers').update({ + await repository.update({ filter: { userId: this.get('id'), }, @@ -19,8 +23,7 @@ export class UserModel extends Model { }, transaction, }); - - await db.getRepository('rolesUsers').update({ + await repository.update({ filter: { userId: this.get('id'), roleName, diff --git a/packages/plugin-users/src/server.ts b/packages/plugin-users/src/server.ts index 11efbb010..c072bc168 100644 --- a/packages/plugin-users/src/server.ts +++ b/packages/plugin-users/src/server.ts @@ -28,18 +28,18 @@ export default class UsersPlugin extends Plugin { this.db.registerModels({ UserModel }); this.db.on('users.afterCreateWithAssociations', async (model, options) => { const { transaction } = options; - - if (this.app.db.getCollection('roles')) { - const defaultRole = await this.app.db.getRepository('roles').findOne({ - filter: { - default: true, - }, - transaction, - }); - - if (defaultRole && (await model.countRoles({ transaction })) == 0) { - await model.addRoles(defaultRole, { transaction }); - } + const repository = this.app.db.getRepository('roles'); + if (!repository) { + return; + } + const defaultRole = await repository.findOne({ + filter: { + default: true, + }, + transaction, + }); + if (defaultRole && (await model.countRoles({ transaction })) == 0) { + await model.addRoles(defaultRole, { transaction }); } });