mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 15:48:04 +01:00
Merge pull request #12314 from HabitRPG/hotfix/groups-checklist-toggle
Groups: always show checklist-toggle
This commit is contained in:
@@ -169,7 +169,6 @@
|
|||||||
>
|
>
|
||||||
<div class="d-inline-flex">
|
<div class="d-inline-flex">
|
||||||
<div
|
<div
|
||||||
v-if="isUser"
|
|
||||||
v-b-tooltip.hover.right="$t(`${task.collapseChecklist
|
v-b-tooltip.hover.right="$t(`${task.collapseChecklist
|
||||||
? 'expand': 'collapse'}Checklist`)"
|
? 'expand': 'collapse'}Checklist`)"
|
||||||
class="collapse-checklist d-flex align-items-center expand-toggle"
|
class="collapse-checklist d-flex align-items-center expand-toggle"
|
||||||
|
|||||||
@@ -26,11 +26,25 @@ import common from '../../../common';
|
|||||||
import logger from '../../libs/logger';
|
import logger from '../../libs/logger';
|
||||||
import apiError from '../../libs/apiError';
|
import apiError from '../../libs/apiError';
|
||||||
|
|
||||||
function canNotEditTasks (group, user, assignedUserId) {
|
function canNotEditTasks (group, user, assignedUserId, taskPayload = null) {
|
||||||
const isNotGroupLeader = group.leader !== user._id;
|
const isNotGroupLeader = group.leader !== user._id;
|
||||||
const isManager = Boolean(group.managers[user._id]);
|
const isManager = Boolean(group.managers[user._id]);
|
||||||
const userIsAssigningToSelf = Boolean(assignedUserId && user._id === assignedUserId);
|
const userIsAssigningToSelf = Boolean(assignedUserId && user._id === assignedUserId);
|
||||||
return isNotGroupLeader && !isManager && !userIsAssigningToSelf;
|
|
||||||
|
const taskPayloadProps = taskPayload
|
||||||
|
? Object.keys(taskPayload)
|
||||||
|
: [];
|
||||||
|
|
||||||
|
// only allow collapseChecklist to be changed by everyone
|
||||||
|
const allowedByTaskPayload = taskPayloadProps.length === 1
|
||||||
|
&& taskPayloadProps.includes('collapseChecklist');
|
||||||
|
|
||||||
|
if (allowedByTaskPayload) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return isNotGroupLeader && !isManager
|
||||||
|
&& !userIsAssigningToSelf;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -618,7 +632,7 @@ api.updateTask = {
|
|||||||
const fields = requiredGroupFields.concat(' managers');
|
const fields = requiredGroupFields.concat(' managers');
|
||||||
group = await Group.getGroup({ user, groupId: task.group.id, fields });
|
group = await Group.getGroup({ user, groupId: task.group.id, fields });
|
||||||
if (!group) throw new NotFound(res.t('groupNotFound'));
|
if (!group) throw new NotFound(res.t('groupNotFound'));
|
||||||
if (canNotEditTasks(group, user)) throw new NotAuthorized(res.t('onlyGroupLeaderCanEditTasks'));
|
if (canNotEditTasks(group, user, null, req.body)) throw new NotAuthorized(res.t('onlyGroupLeaderCanEditTasks'));
|
||||||
|
|
||||||
// If the task belongs to a challenge make sure the user has rights
|
// If the task belongs to a challenge make sure the user has rights
|
||||||
} else if (task.challenge.id && !task.userId) {
|
} else if (task.challenge.id && !task.userId) {
|
||||||
|
|||||||
Reference in New Issue
Block a user