Я использую платформу 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);
}
Можно ли добиться этого для проверки прав доступа к строке и, если да, то как?