summaryrefslogtreecommitdiffstats
path: root/models/boards.js
diff options
context:
space:
mode:
authorLauri Ojansivu <x@xet7.org>2020-01-05 21:28:14 +0200
committerLauri Ojansivu <x@xet7.org>2020-01-05 21:28:14 +0200
commitf6f7705f23ea18d7f1b8f8736b762eb89e00a3cf (patch)
treed1213a62330b38c1a293f39a8b5265deefff0535 /models/boards.js
parent6209b792aa9548ba66691fcaa0033ec9c29a3c7c (diff)
downloadwekan-f6f7705f23ea18d7f1b8f8736b762eb89e00a3cf.tar.gz
wekan-f6f7705f23ea18d7f1b8f8736b762eb89e00a3cf.tar.bz2
wekan-f6f7705f23ea18d7f1b8f8736b762eb89e00a3cf.zip
Add Worker role.
This was originally added at Wekan v3.58, reverted at Wekan v3.60 because of bugs, and now after fixes added back. Thanks to xet7 ! Closes #2788
Diffstat (limited to 'models/boards.js')
-rw-r--r--models/boards.js29
1 files changed, 28 insertions, 1 deletions
diff --git a/models/boards.js b/models/boards.js
index 857aa963..4e193dc7 100644
--- a/models/boards.js
+++ b/models/boards.js
@@ -185,6 +185,7 @@ Boards.attachSchema(
isActive: true,
isNoComments: false,
isCommentOnly: false,
+ isWorker: false,
},
];
}
@@ -222,6 +223,13 @@ Boards.attachSchema(
type: Boolean,
optional: true,
},
+ 'members.$.isWorker': {
+ /**
+ * Is the member only allowed to move card, assign himself to card and comment
+ */
+ type: Boolean,
+ optional: true,
+ },
permission: {
/**
* visibility of the board
@@ -538,6 +546,7 @@ Boards.helpers({
isActive: true,
isAdmin: false,
isNoComments: true,
+ isWorker: false,
});
},
@@ -547,6 +556,17 @@ Boards.helpers({
isActive: true,
isAdmin: false,
isCommentOnly: true,
+ isWorker: false,
+ });
+ },
+
+ hasWorker(memberId) {
+ return !!_.findWhere(this.members, {
+ userId: memberId,
+ isActive: true,
+ isAdmin: false,
+ isCommentOnly: false,
+ isWorker: true,
});
},
@@ -849,6 +869,7 @@ Boards.mutations({
isActive: true,
isNoComments: false,
isCommentOnly: false,
+ isWorker: false,
},
},
};
@@ -881,6 +902,7 @@ Boards.mutations({
isAdmin,
isNoComments,
isCommentOnly,
+ isWorker,
currentUserId = Meteor.userId(),
) {
const memberIndex = this.memberIndex(memberId);
@@ -894,6 +916,7 @@ Boards.mutations({
[`members.${memberIndex}.isAdmin`]: isAdmin,
[`members.${memberIndex}.isNoComments`]: isNoComments,
[`members.${memberIndex}.isCommentOnly`]: isCommentOnly,
+ [`members.${memberIndex}.isWorker`]: isWorker,
},
};
},
@@ -1281,6 +1304,7 @@ if (Meteor.isServer) {
* @param {boolean} [isActive] is the board active (default true)
* @param {boolean} [isNoComments] disable comments (default false)
* @param {boolean} [isCommentOnly] only enable comments (default false)
+ * @param {boolean} [isWorker] only move cards, assign himself to card and comment (default false)
* @param {string} [permission] "private" board <== Set to "public" if you
* want public Wekan board
* @param {string} [color] the color of the board
@@ -1300,6 +1324,7 @@ if (Meteor.isServer) {
isActive: req.body.isActive || true,
isNoComments: req.body.isNoComments || false,
isCommentOnly: req.body.isCommentOnly || false,
+ isWorker: req.body.isWorker || false,
},
],
permission: req.body.permission || 'private',
@@ -1403,6 +1428,7 @@ if (Meteor.isServer) {
* @param {boolean} isAdmin admin capability
* @param {boolean} isNoComments NoComments capability
* @param {boolean} isCommentOnly CommentsOnly capability
+ * @param {boolean} isWorker Worker capability
*/
JsonRoutes.add('POST', '/api/boards/:boardId/members/:memberId', function(
req,
@@ -1411,7 +1437,7 @@ if (Meteor.isServer) {
try {
const boardId = req.params.boardId;
const memberId = req.params.memberId;
- const { isAdmin, isNoComments, isCommentOnly } = req.body;
+ const { isAdmin, isNoComments, isCommentOnly, isWorker } = req.body;
Authentication.checkBoardAccess(req.userId, boardId);
const board = Boards.findOne({ _id: boardId });
function isTrue(data) {
@@ -1426,6 +1452,7 @@ if (Meteor.isServer) {
isTrue(isAdmin),
isTrue(isNoComments),
isTrue(isCommentOnly),
+ isTrue(isWorker),
req.userId,
);