本帖最后由 加菲喵 于 2015-9-10 15:41 编辑
报表按钮人员细粒度控制
1. 问题描述
对于某些用户来说,报表集成在客户系统中后,可能只能对用户的访问权限做控制,但是在报表界面的按钮的控制,却无法实现,本文档将介绍如何实现
2. 解决方案
2.1 新建模板参数
userid 默认值为 $fr_username(此为决策系统平台当前登录人获取方式,便于与平台集成后的管理)
此处演示模板userid 默认值为 1(方便获取到usierid等于1的用户对应的不可见的按钮的index数组)
在集成到其他系统后,访问报表时,通过参数传入userid
2.2 新建按钮表
对要进行权限控制的所有模板及其模板下的所有工具栏按钮和参数界面按钮做数据库维护
按照按钮描述,按钮index(为菜单栏的排列顺序,0 为第一个按钮的index),模板名做维护
如图,是对模板 id 1 7 8 对应的 上一页 邮件 导出按钮做维护 编号按照报表界面的顺序 0为第一个
2.3 新建权限管理表
通过人员id控制人员可见的不同模板下的按钮
userid 1 不可见 1 7 8 三个按钮
userid 2 不可见 1 一个按钮
2.4 js代码
在页面加载结束时间中,添加如下参数和代码
- <div style="text-align: left;">for (var i = 0; i < userpri.length; i++) {</div><div style="text-align: left;"> var count = contentPane.toolbar.options.items.length;//获取工具栏所有按钮的总数</div><div style="text-align: left;"> if (Number(userpri[i]) < count) {//判断查询到的权限按钮index是否超出工具栏按钮最大索引,防止报错</div><div style="text-align: left;"> contentPane.toolbar.options.items[Number(userpri[i])].setVisible(false);//核心隐藏按钮代码</div><div style="text-align: left;"> }</div><div style="text-align: left;">}</div>
复制代码
如此 可达到极细的权限管理
2.4 同理,可控制参数界面的按钮
只需把按钮id换成参数界面按钮的name,
在参数界面的加载结束事件添加下述代码实现
- <div style="text-align: left;">$.each(this.options.form.name_widgets,function(i,item){ </div><div style="text-align: left;"> if (item.options.type !=='button') {item.invisible();} </div><div style="text-align: left;">});; </div>
复制代码
2.5 由于自带数据库没有可编辑表,所以采用自定义表,作为内置数据集导出到cpt模板中
- <div style="text-align: left;">create table 菜单表</div><div style="text-align: left;">(</div><div style="text-align: left;"> desscr VARCHAR2(20),//工具栏按钮的中文描述,方便前台配置识别</div><div style="text-align: left;"> id VARCHAR2(20),//工具栏按钮的唯一id,唯一识别</div><div style="text-align: left;"> cptname VARCHAR2(20)//模板名称,便于区别工具栏按钮所属于的模板</div><div style="text-align: left;">)</div><div style="text-align: left;">;</div><div style="text-align: left;">
- </div><div style="text-align: left;">prompt Creating 权限表...</div><div style="text-align: left;">create table 权限表</div><div style="text-align: left;">(</div><div style="text-align: left;"> userid VARCHAR2(20), //人员id</div><div style="text-align: left;"> desid VARCHAR2(20)//按钮id,做关联后可以查询到一个唯一的模板下的按钮</div><div style="text-align: left;">)</div><div style="text-align: left;">;</div>
复制代码2.6 效果 初始工具栏
userid=1 时,点击查询后的工具栏
隐藏了 上一页 输出 邮件三个按钮
userid=2 时,点击查询后的工具栏
隐藏了 上一页 按钮
编辑于 2019-3-2 17:34
编辑于 2019-3-2 17:35
编辑于 2019-3-2 17:35
|