问题
从V8.5等历史版本升级到V10.5及之后的版本,会发现用户原本可查看的报表、目录、数据集等突然间看不到了。
这是因为在V10.5版本中,升级了权限体系,区分开引用权限和查看权限。详情可参考:【升级注意事项】V8.5➜V10.5
解决方案
在系统中角色、权限配置较简单时,可以采用直接对角色修改资源权限,勾选上资源的“查看”权限来解决。
但是在系统中角色较多、权限配置较复杂时,通过修改角色的资源权限的方案所需要的时间、精力都非常大。那么可以通过脚本方式进行批量修改。
新建任务,类型选择“定制”。拷贝以下脚本,保存任务后执行任务即可。
注:运行前请先备份知识库!
importPackage(Packages.java.io); importPackage(Packages.java.lang); importPackage(Packages.java.util); importPackage(Packages.smartbi.connectionpool); importPackage(Packages.smartbi.util); importPackage(Packages.smartbi.oltp); var conn = null; var state = null; try { var connectionPool = ConnectionPool.getInstance(); conn = connectionPool.getConnection("DS.SYSTEM知识库"); var updateSql = "update t_permission_detail p left join t_restree r on p.c_resid = r.c_resid set p.c_type = 'READ' where p. c_type = 'REF' and p.c_assigneetype = 'ROLE' and r.c_restype='DEFAULT_TREENODE'"; state = conn.createStatement(); var deleteCount = state.executeUpdate(updateSql); logger.info("EPPR-63157 Update SQL==>" + updateSql); logger.info("EPPR-63157 Delete Count==>" + deleteCount); state.close(); state = null; conn.close(); conn = null; logger.info("EPPR-63157 Script Execute End"); connector.remoteInvoke('CompositeService', 'clearCache', []); } catch (e) { var p = org.apache.commons.lang.reflect.FieldUtils.readDeclaredField(e, "stackProvider", true); var ex = org.apache.commons.lang.reflect.FieldUtils.readDeclaredField(p, "exception", true); logger.error("EPPR-63157 Script Execute Error", ex); } finally { if (state) { state.close(); } if (conn) { conn.close(); } }