我正在使用ASP.NET Zero框架,该框架使用Datatables。 每行都有一个动作下拉菜单,下拉菜单中的项目可以通过“ visible”属性控制其可见性。
在.NET零内,将在加载视图的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;
}
但是,当我根据检查功能的结果更改此测试用例以返回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);
}
是否可以实现每行权限检查?如果可以,怎么办?