示例说明
对于灵活分析,实现"根据角色不同控制【导出】按钮显示与否"。
现有灵活分析报表1,报表ID为:I4028818a5866e9ec0152256f44f933b6;灵活分析报表2,报表ID为: I4028818a5866e9ec015225708b143407。
- 当登录用户拥有"Admin"角色时,该角色拥有对“报表1”和”报表2“的映射,因此该用户打开此两个报表时都显示【导出】按钮。
报表1:
报表2:
- 当登录用户拥有"demo"角色时,由于该角色只拥有对”报表2“的映射,因此该用户打开”报表1“时,不显示【导出】按钮;打开”报表2“时,显示【导出】按钮。
报表1:
报表2:
设置方法
- 公共设置中,创建一个资源包,并设置要起效的报表,报表包含”报表1“和”报表2“;
- 在资源包中,编写宏代码,根据角色不同控制【导出】按钮显示与否;
宏类型
类型 | 对象 | 事件 |
ClientSide | simpleReport | onRender |
宏代码
//定义角色可以对那些报表使用导出按钮权限 var rolesToReports = { "Admins": ["I4028818a5866e9ec0152256f44f933b6", "I4028818a5866e9ec015225708b143407"], "demo": ["I4028818a5866e9ec015225708b143407"] }; //获取当前用户的所有角色 function getAllRoles() { var roles = registry.get("allRolesOfUser"); if (roles != null) return roles; var util = jsloader.resolve("freequery.common.util"); var ret = util.remoteInvokeEx("UserService", "getMyAccountInfo", []); roles = new Array(); if (ret && ret.result) { var rolesToGroupList = ret.result.allRolesOfUser; for (var i = 0; i < rolesToGroupList.length; i++) { var item = rolesToGroupList[i].rolesList; for (var j = 0; j < item.length; j++) { roles.push(item[j].role.name); } } } registry.put("allRolesOfUser", roles); return roles; } function main(simpleReport, simpleReportContext) { var roles = getAllRoles(); var found = false; for (var i = 0; i < roles.length; i++) { var reps = rolesToReports[roles[i]]; if (reps == null) continue; for (var j = 0; j < reps.length; j++) { if (simpleReport.queryId == reps[j]) { i = roles.length; j = reps.length; found = true; } } } var r = simpleReport; //根据结果设置导出按钮是否可见 if (!found) { simpleReport.btnExport.parentNode.style.display = "none"; } else { simpleReport.btnExport.parentNode.style.display = ""; } }
关键对象总结
- 获取当前用户所有角色:registry.get("allRolesOfUser")