Commit a9cfd99b authored by Chareice's avatar Chareice
Browse files

feat: setDefaultRole for users

parent d9593881
Showing with 79 additions and 2 deletions
+79 -2
import Database from '@nocobase/database';
import Database, { BelongsToManyRepository } from '@nocobase/database';
import PluginACL from '@nocobase/plugin-acl';
import { MockServer, mockServer } from '@nocobase/test';
......@@ -69,4 +69,50 @@ describe('role', () => {
expect(roles.length).toEqual(1);
expect(roles[0].get('name')).toEqual('test2');
});
it('should set users default role', async () => {
await db.getRepository('roles').create({
values: {
name: 'test1',
title: 'Admin User',
allowConfigure: true,
default: true,
},
});
await db.getRepository('roles').create({
values: {
name: 'test2',
title: 'test2 user',
allowConfigure: true,
},
});
const user = await db.getRepository('users').create({
values: {
token: '123',
},
});
const userRolesRepo = db.getRepository<BelongsToManyRepository>('users.roles', user.get('id') as string);
await userRolesRepo.add('test1');
await userRolesRepo.add('test2');
const response = await api
.agent()
.post('/users:setDefaultRole')
.send({
defaultRole: 'test2',
})
.set({
Authorization: `Bearer ${user.get('token')}`,
});
expect(response.statusCode).toEqual(200);
const userRoles = await userRolesRepo.find();
const defaultRole = userRoles.find((userRole) => userRole.get('rolesUsers').default);
expect(defaultRole['name']).toEqual('test2');
});
});
......@@ -148,3 +148,34 @@ export async function changePassword(ctx: Context, next: Next) {
ctx.body = ctx.state.currentUser.toJSON();
await next();
}
export async function setDefaultRole(ctx: Context, next: Next) {
const {
values: { defaultRole },
} = ctx.action.params;
const currentUserId = ctx.state.currentUser.id;
await ctx.db.getRepository('rolesUsers').update({
filter: {
userId: currentUserId,
},
values: {
default: false,
},
});
await ctx.db.getRepository('rolesUsers').update({
filter: {
userId: currentUserId,
roleName: defaultRole,
},
values: {
default: true,
},
});
ctx.body = 'ok';
await next();
}
......@@ -61,7 +61,7 @@ export default class UsersPlugin extends Plugin {
this.app.resourcer.use(middlewares.parseToken());
const publicActions = ['check', 'signin', 'signup', 'lostpassword', 'resetpassword', 'getUserByResetToken'];
const loggedInActions = ['signout', 'updateProfile', 'changePassword'];
const loggedInActions = ['signout', 'updateProfile', 'changePassword', 'setDefaultRole'];
publicActions.forEach((action) => this.app.acl.skip('users', action));
loggedInActions.forEach((action) => this.app.acl.skip('users', action, 'logged-in'));
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment