feat: 移除身份组的时候顺便移除已有成员的该角色

pull/56/head
moonrailgun 3 years ago
parent 1f93e24fbc
commit ed2b949405

@ -260,6 +260,7 @@ export class Group extends TimeStamps implements Base {
const member = group.members.find( const member = group.members.find(
(member) => String(member.userId) === userId (member) => String(member.userId) === userId
); );
if (!member) { if (!member) {
throw new Error('Not Found Member'); throw new Error('Not Found Member');
} }

@ -807,7 +807,7 @@ class GroupService extends TcService {
const [hasPermission] = await call(ctx).checkUserPermissions( const [hasPermission] = await call(ctx).checkUserPermissions(
groupId, groupId,
userId, userId,
[PERMISSION.core.managePanel] [PERMISSION.core.manageRoles]
); );
if (!hasPermission) { if (!hasPermission) {
throw new NoPermissionError(t('没有操作权限')); throw new NoPermissionError(t('没有操作权限'));
@ -822,7 +822,8 @@ class GroupService extends TcService {
$pull: { $pull: {
roles: { roles: {
_id: roleId, _id: roleId,
}, }, // 删除角色
'members.$[].roles': roleId, // 删除成员角色
}, },
}, },
{ {

@ -1,9 +1,10 @@
import { createTestServiceBroker } from '../../utils'; import { createTestServiceBroker } from '../../utils';
import GroupService from '../../../services/core/group/group.service'; import GroupService from '../../../services/core/group/group.service';
import { Types } from 'mongoose'; import { Types } from 'mongoose';
import { Group, GroupPanelType } from '../../../models/group/group'; import type { Group } from '../../../models/group/group';
import { generateRandomStr } from '../../../lib/utils'; import { generateRandomStr } from '../../../lib/utils';
import _ from 'lodash'; import _ from 'lodash';
import { GroupPanelType, PERMISSION } from 'tailchat-server-sdk';
function createTestGroup( function createTestGroup(
userId: Types.ObjectId = new Types.ObjectId(), userId: Types.ObjectId = new Types.ObjectId(),
@ -38,7 +39,13 @@ function createTestRole(
describe('Test "group" service', () => { describe('Test "group" service', () => {
const { broker, service, insertTestData } = const { broker, service, insertTestData } =
createTestServiceBroker<GroupService>(GroupService); createTestServiceBroker<GroupService>(GroupService, {
contextCallMockFn(actionName) {
if (actionName === 'group.getUserAllPermissions') {
return [PERMISSION.core.owner];
}
},
});
test('Test "group.createGroup"', async () => { test('Test "group.createGroup"', async () => {
const userId = String(new Types.ObjectId()); const userId = String(new Types.ObjectId());
@ -310,6 +317,12 @@ describe('Test "group" service', () => {
const testGroup = await insertTestData( const testGroup = await insertTestData(
createTestGroup(userId, { createTestGroup(userId, {
roles: [role1, role2], roles: [role1, role2],
members: [
{
userId,
roles: [role1.id, role2.id],
},
],
}) })
); );
@ -320,7 +333,7 @@ describe('Test "group" service', () => {
'group.deleteGroupRole', 'group.deleteGroupRole',
{ {
groupId: String(testGroup.id), groupId: String(testGroup.id),
roleId: testGroup.roles?.[0]._id, roleId: String(role1.id),
}, },
{ {
meta: { meta: {
@ -336,6 +349,12 @@ describe('Test "group" service', () => {
permissions: ['permission1', 'permission2'], permissions: ['permission1', 'permission2'],
}, },
]); ]);
expect(res.members).toMatchObject([
{
userId,
roles: [role2.id],
},
]);
}); });
test('Test "group.updateGroupRolePermission"', async () => { test('Test "group.updateGroupRolePermission"', async () => {

Loading…
Cancel
Save