Youtrack проверить, есть ли у пользователя разрешения
Я пытаюсь создать рабочий процесс Youtrack, в котором только определенная роль может редактировать состояние Канбана до готовности к извлечению, когда текущая проблема находится в отставании. Я не был в состоянии заставить это работать правильно, продолжает выдавать исключения, но я не могу прочитать полное исключение.
Я попытался создать текущий код рабочего процесса:
var entities = require('@jetbrains/youtrack-scripting-api/entities');
var workflow = require('@jetbrains/youtrack-scripting-api/workflow');
exports.rule = entities.Issue.onChange({
title: workflow.i18n('Block change in Kanban stage for issues that are in backlog'),
guard: function(ctx) {
return ctx.issue.isReported && ctx.issue.fields.isChanged(ctx.KanbanState);
},
action: function(ctx) {
var issue = ctx.issue;
if (!ctx.user.hasRole('project-admin', ctx.project)) {
workflow.message('U dont have the correct permissions to do this');
ctx.KanbanState = ctx.KanbanState.Blocked;
}
},
requirements: {
Stage: {
type: entities.State.fieldType
},
KanbanState: {
name: 'Kanban State',
type: entities.EnumField.fieldType,
ReadyToPull: {
name: 'Ready to pull'
},
Blocked: {}
}
}
});
Большая часть этого - копия рабочего процесса изменения Kanban, которая блокирует перемещение проблемы на новый этап, когда состояние kanban не установлено в "Ready-to-Pull". Я в основном хочу то же самое, но я хочу, чтобы администраторы проекта могли изменять состояние канбана на "готовый к извлечению", когда текущим этапом является "Отставание". Текущий код только проверяет разрешения на данный момент, но я уже начал застрять там.
2 ответа
Для реализации этой задачи я предлагаю вам использовать метод workflow.check, например:
workflow.check(ctx.user.hasRole('project-admin', ctx.project), 'U dont have the correct permissions to do this');
Надеюсь, это поможет.
Поскольку в текущей ситуации нам нужно отключить только одного человека, чтобы он не мог изменять состояния Канбана при установке новых билетов, у нас есть следующее решение:
exports.rule = entities.Issue.onChange({
title: workflow.i18n('Block change in Kanban stage for issues in backlog stage'),
guard: function(ctx) {
var issue = ctx.issue;
return issue.fields.isChanged(ctx.KanbanState);//Runs when Kanban state changes
},
action: function(ctx) {
var issue = ctx.issue;
//Check if user has changed the kanban state to ready to pull while the current stage is backlog.
if (issue.fields.Stage.name == 'Backlog') {
//Current stage is backlog
if (issue.fields.KanbanState.name === ctx.KanbanState.ReadyToPull.name) {
//Kanban state was changed to ready to pull;
var target = '<useremail>';
workflow.check(ctx.currentUser.email == target,
workflow.i18n('No permissions to change the Kanban state.'));
issue.fields.KanbanState = ctx.KanbanState.Blocked;
}
}
},
requirements: {
Stage: {
type: entities.State.fieldType,
Backlog: {},
Development: {}
},
KanbanState: {
name: 'Kanban State',
type: entities.EnumField.fieldType,
ReadyToPull: {
name: 'Ready to pull'
},
Blocked: {}
}
}
});
Однако я проверил ответ @ Олега Ларшуна, и его ответ тоже сработал. заменить раздел электронной почты на:
workflow.check(ctx.user.hasRole('project-admin', ctx.project), 'U dont have the correct permissions to do this');