|
|
@@ -1,4 +1,5 @@
|
|
|
import loggerFactory from '~/utils/logger';
|
|
|
+import { filterIdsByIds } from '~/server/util/compare-objectId';
|
|
|
|
|
|
const logger = loggerFactory('growi:routes:apiv3:user-group'); // eslint-disable-line no-unused-vars
|
|
|
|
|
|
@@ -255,7 +256,7 @@ module.exports = (crowi) => {
|
|
|
* type: object
|
|
|
* description: A result of `UserGroup.updateName`
|
|
|
*/
|
|
|
- router.put('/:id', loginRequiredStrictly, adminRequired, csrf, validator.update, apiV3FormValidator, async(req, res) => {
|
|
|
+ router.put('/:id', /*loginRequiredStrictly, adminRequired, csrf,*/ validator.update, apiV3FormValidator, async(req, res) => {
|
|
|
const { id } = req.params;
|
|
|
const {
|
|
|
name, description, parentId, forceUpdateParents = false,
|
|
|
@@ -435,18 +436,19 @@ module.exports = (crowi) => {
|
|
|
User.findUserByUsername(username),
|
|
|
]);
|
|
|
|
|
|
+ const userGroups = await UserGroup.findGroupsWithAncestorsRecursively(userGroup);
|
|
|
+ const userGroupIds = userGroups.map(g => g._id);
|
|
|
+
|
|
|
// check for duplicate users in groups
|
|
|
- const isRelatedUserForGroup = await UserGroupRelation.isRelatedUserForGroup(userGroup, user);
|
|
|
+ const existingRelations = await UserGroupRelation.find({ relatedGroup: { $in: userGroupIds }, relatedUser: user._id });
|
|
|
+ const existingGroupIds = existingRelations.map(r => r.relatedGroup);
|
|
|
|
|
|
- if (isRelatedUserForGroup) {
|
|
|
- logger.warn('The user is already joined');
|
|
|
- return res.apiv3();
|
|
|
- }
|
|
|
+ const groupIdsOfRelationToCreate = filterIdsByIds(userGroupIds, existingGroupIds);
|
|
|
|
|
|
- const userGroupRelation = await UserGroupRelation.createRelation(userGroup, user);
|
|
|
+ const insertedRelations = await UserGroupRelation.createRelations(groupIdsOfRelationToCreate, user);
|
|
|
const serializedUser = serializeUserSecurely(user);
|
|
|
|
|
|
- return res.apiv3({ user: serializedUser, userGroup, userGroupRelation });
|
|
|
+ return res.apiv3({ user: serializedUser, createdRelationCount: insertedRelations.length });
|
|
|
}
|
|
|
catch (err) {
|
|
|
const msg = `Error occurred in adding the user "${username}" to group "${id}"`;
|
|
|
@@ -507,10 +509,10 @@ module.exports = (crowi) => {
|
|
|
const groupsOfRelationsToDelete = await UserGroup.findGroupsWithDescendantsRecursively([userGroup]);
|
|
|
const relatedGroupIdsToDelete = groupsOfRelationsToDelete.map(g => g._id);
|
|
|
|
|
|
- const res = await UserGroupRelation.deleteMany({ relatedUser: user._id, relatedGroup: { $in: relatedGroupIdsToDelete } });
|
|
|
+ const deleteManyRes = await UserGroupRelation.deleteMany({ relatedUser: user._id, relatedGroup: { $in: relatedGroupIdsToDelete } });
|
|
|
const serializedUser = serializeUserSecurely(user);
|
|
|
|
|
|
- return res.apiv3({ user: serializedUser, deletedGroupsCount: res.deletedCount });
|
|
|
+ return res.apiv3({ user: serializedUser, deletedGroupsCount: deleteManyRes.deletedCount });
|
|
|
}
|
|
|
catch (err) {
|
|
|
const msg = 'Error occurred while removing the user from groups.';
|