数据表动态行操作可见性

时间:2018-09-28 07:16:53

标签: javascript datatables

我正在使用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);
}

是否可以实现每行权限检查?如果可以,怎么办?

0 个答案:

没有答案