Необходимо отключить меню для определенной роли и групп - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть меню для «отмены заявки». Это меню должно быть доступно только для человека с правами администратора и рабочего процесса, а не для других людей роли.

Я попробовал приведенный ниже код для отключения, чтобы сделать отключение, но оно не работает. все еще меню работает для других ролей.

Core.Action({
    id: "Core:releaseTasks",
    icon: 'workflow_task_claim_cancel',
    invoke: function (context) {
        context.setProperties({
            pool: 'release',
            skipTitle: this.get('messages.skip.title'),
            skipMessage: this.get('messages.skip.message'),
            taskIsValidForAction: function (task) {
                var assignee = task.get('assigneeUserId'),
                    my = context.get('user'),
                    admin = my.roles.CoreAdministrator || my.roles.CoreWorkflowAdministrator;
                return assignee && (assignee === my.name || admin);
            },
            taskIsInvalidForAction: function (task) {
                var assignee = task.get('assigneeUserId'),
                    admin = context.get('user.roles.CoreAdministrator') || context.get('user.roles.CoreWorkflowAdministrator');
                return assignee && (!admin && assignee !== context.get('user').name);
            }
        });
        return Core.Action('Core:workflow:setPool', context);
    },
    isValid: 'areTasks && isAssigned && isOpenTask && (isMyTask || isWorkflowAdmin)'
});

Core.Action({
    id: "Core:workflow:setPool",
    invoke: function (context) {
        if (!context.pool) {
            return Promise.reject(new Error("Must specify a `pool`"));
        }
        return new Promise(function (resolve, reject) {
            var tasks = context.get('tasks') || [];
            if (context.get('task')) {
                tasks.push(context.get('task'));
            }
            tasks = tasks.map(function (task) {
                var ct = task.get('currentTask');
                if (ct) {
                    return ct;
                }
                return task;
            });
            var requestData = [],
                skipped = [],
                requested = [];

            var valid = context.taskIsValidForAction || function () { return true; },
                invalid = context.taskIsInvalidForAction || function () { return false; };
            tasks.forEach(function (task) {
                if (valid.call(context, task)) {
                    requestData.push({ name: 'id', value: task.get('id') });
                    requestData.push({ name: 'pool', value: context.pool });
                    requested.push(task);
                } else {
                    if (invalid.call(context, task)) {
                        skipped.push(task);
                    }
                }
            });

            function notifySkipped() {
                if (skipped.length) {
                    Core.notify({
                        title: context.skipTitle,
                        message: context.skipMessage +
                            skipped.map(function (task) {
                                return '<dt>' + task.get('name') + ' [' + task.get('id') + ']</dt>';
                            }).join('') + '</dl>'
                    });
                }
            }

            if (requested.length === 0) {
                notifySkipped();
                resolve();
                return;
            }
            return (Core.services({
                    type: 'post',
                    service: 'workflow/task/assignee',
                    data: requestData
                })
                .done(function (res) {
                    Core.model.ingestResources(res);
                    resolve();
                })
                .fail(function (xhr, status, error) {
                    Core.Error.show(error);
                })
                .always(function () {
                    tasks.forEach(function (task) {
                        if (Ember.get(task, 'isClip')) {
                            Core.model.clip.clear();
                        }
                    });
                    Core.Tab.Workflow.getController().reloadResultSet();
                    Core.Tab.Workflow.getController().get('selection').clear();
                    notifySkipped();
                    resolve();
                })
            );
        });
    }
});

Мне нужно, чтобы меню работало только для CoreAdministrator и CoreWorkflowAdministrator, а не для других ролей.

...