mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 07:37:25 +01:00
Fix: Edit/deleting tasks in a challenge appears possible for people who are not admin/the creator (#11349)
* Fix: introduce new prop showOptions for task component - Pull showOptions propr from challenge container to task itself to restrict editing for non leader of challenge users * Fix: for group plan edit/delete tasks
This commit is contained in:
committed by
Matteo Pagliazzi
parent
65906f0b71
commit
659c7e7249
@@ -57,6 +57,7 @@
|
|||||||
:type="column",
|
:type="column",
|
||||||
:key="column",
|
:key="column",
|
||||||
:taskListOverride='tasksByType[column]',
|
:taskListOverride='tasksByType[column]',
|
||||||
|
:showOptions="showOptions",
|
||||||
@editTask="editTask",
|
@editTask="editTask",
|
||||||
@taskDestroyed="taskDestroyed",
|
@taskDestroyed="taskDestroyed",
|
||||||
v-if='tasksByType[column].length > 0')
|
v-if='tasksByType[column].length > 0')
|
||||||
@@ -251,6 +252,9 @@ export default {
|
|||||||
canJoin () {
|
canJoin () {
|
||||||
return !this.isMember;
|
return !this.isMember;
|
||||||
},
|
},
|
||||||
|
showOptions () {
|
||||||
|
return this.isLeader;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
mounted () {
|
mounted () {
|
||||||
if (!this.searchId) this.searchId = this.challengeId;
|
if (!this.searchId) this.searchId = this.challengeId;
|
||||||
|
|||||||
@@ -41,6 +41,7 @@
|
|||||||
:type="column",
|
:type="column",
|
||||||
:key="column",
|
:key="column",
|
||||||
:taskListOverride='tasksByType[column]',
|
:taskListOverride='tasksByType[column]',
|
||||||
|
:showOptions="showOptions"
|
||||||
v-on:editTask="editTask",
|
v-on:editTask="editTask",
|
||||||
v-on:loadGroupCompletedTodos="loadGroupCompletedTodos",
|
v-on:loadGroupCompletedTodos="loadGroupCompletedTodos",
|
||||||
v-on:taskDestroyed="taskDestroyed",
|
v-on:taskDestroyed="taskDestroyed",
|
||||||
@@ -176,6 +177,9 @@ export default {
|
|||||||
if (!this.group) return false;
|
if (!this.group) return false;
|
||||||
return this.group.leader && this.group.leader._id === this.user._id || this.group.managers && Boolean(this.group.managers[this.user._id]);
|
return this.group.leader && this.group.leader._id === this.user._id || this.group.managers && Boolean(this.group.managers[this.user._id]);
|
||||||
},
|
},
|
||||||
|
showOptions () {
|
||||||
|
return this.canCreateTasks;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
async load () {
|
async load () {
|
||||||
|
|||||||
@@ -45,6 +45,7 @@
|
|||||||
v-for="task in taskList",
|
v-for="task in taskList",
|
||||||
:key="task.id", :task="task",
|
:key="task.id", :task="task",
|
||||||
:isUser="isUser",
|
:isUser="isUser",
|
||||||
|
:showOptions="showOptions"
|
||||||
@editTask="editTask",
|
@editTask="editTask",
|
||||||
@moveTo="moveTo",
|
@moveTo="moveTo",
|
||||||
:group='group',
|
:group='group',
|
||||||
@@ -311,6 +312,10 @@ export default {
|
|||||||
selectedTags: {},
|
selectedTags: {},
|
||||||
taskListOverride: {},
|
taskListOverride: {},
|
||||||
group: {},
|
group: {},
|
||||||
|
showOptions: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
}, // @TODO: maybe we should store the group on state?
|
}, // @TODO: maybe we should store the group on state?
|
||||||
data () {
|
data () {
|
||||||
const icons = Object.freeze({
|
const icons = Object.freeze({
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
.d-flex.justify-content-between
|
.d-flex.justify-content-between
|
||||||
h3.task-title(:class="{ 'has-notes': task.notes }", v-markdown="task.text")
|
h3.task-title(:class="{ 'has-notes': task.notes }", v-markdown="task.text")
|
||||||
menu-dropdown.task-dropdown(
|
menu-dropdown.task-dropdown(
|
||||||
v-if="!isRunningYesterdailies",
|
v-if="!isRunningYesterdailies && showOptions",
|
||||||
:right="task.type === 'reward'",
|
:right="task.type === 'reward'",
|
||||||
ref="taskDropdown",
|
ref="taskDropdown",
|
||||||
v-b-tooltip.hover.top="$t('options')"
|
v-b-tooltip.hover.top="$t('options')"
|
||||||
@@ -555,7 +555,7 @@ export default {
|
|||||||
directives: {
|
directives: {
|
||||||
markdown: markdownDirective,
|
markdown: markdownDirective,
|
||||||
},
|
},
|
||||||
props: ['task', 'isUser', 'group', 'dueDate'], // @TODO: maybe we should store the group on state?
|
props: ['task', 'isUser', 'group', 'dueDate', 'showOptions'], // @TODO: maybe we should store the group on state?
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
random: uuid.v4(), // used to avoid conflicts between checkboxes ids
|
random: uuid.v4(), // used to avoid conflicts between checkboxes ids
|
||||||
|
|||||||
Reference in New Issue
Block a user