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'); 
Другие вопросы по тегам