Datatables Dynamic Row Action Visibility - PullRequest
       0

Datatables Dynamic Row Action Visibility

0 голосов
/ 28 сентября 2018

Я использую платформу ASP.NET Zero, которая использует Datatables .В каждой строке есть раскрывающийся список действий, и элементы в раскрывающемся списке могут контролировать свою видимость с помощью свойства visible.

В .NET Zero разрешения проверяются при загрузке JS-файла представления и логического значениязначение сохраняется, если текущий пользователь имеет необходимые права доступа, например:

    var _permissions = {
        create: abp.auth.hasPermission('Pages.Records.Create'),
        edit: abp.auth.hasPermission('Pages.Records.Edit'),
        delete: abp.auth.hasPermission('Pages.Records.Delete')
    };

И таблица данных проверяет эти параметры в каждом определении элементов действий, например:

text: app.localize('Delete'),
visible: function () {
    return _permissions.delete;
},
action: function (data) {
    deleteRecord(data.record.record);
}

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

Я не был уверен, можно ли динамически устанавливать свойство visible, поэтому я создал тестовый пример, который работал, показывая или скрывая тестовое действие в зависимости от значения:

text: app.localize('Delete'),
visible: function () {
    return Math.round(Math.random()) == 1 ? true : false;
}

Однако, когда я изменял этотестовый случай, чтобы вернуть истину или ложь на основе результата функции проверки, он больше не работает.Я пробовал следующие варианты:

text: app.localize('Delete'),
visible: async function (data) {
    return await _aCLService.checkCanShareACL(data.record.id) == true ? true : false;
}

text: app.localize('Delete'),
visible: async function (data) {
    var IsAuthed = await _aCLService.checkCanShareACL(data.record.id)
    return Math.round(Math.random()) == 1 ? true : false;
}

Кажется, что асинхронность / ожидание является фактором неправильного поведения видимого свойства, поэтому я попытался также перенести его в отдельную функцию:

text: app.localize('Delete'),
visible: function (data) {
    return Test(data) == true  ? true : false;
}

async function Test(data){
    return await _aCLService.checkCanShareACL(data.record.id);
}

Можно ли добиться этого для проверки прав доступа к строке и, если да, то как?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...