润乾报表如何实现数据权限控制

技术标签: 润乾报表  权限控制  参数  数据权限

售前现场交流或售后技术支持阶段,经常被客户问到:“你们报表系统是怎么搞权限控制的?”

既然经常被问,那么今天就讨论一下这个问题。

首先呢,看看权限管理长啥样!

权限管理:(来自百度百科),一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少。

权限管理几乎出现在任何系统里面,一般只要有用户的系统就可能涉及权限管理。

从控制力度来看,可以将权限管理分为两大类:

1,功能级权限管理;

2,数据级权限管理。

功能级权限管理是系统要做的事情,比如哪些人可以看到系统的哪些菜单和资源,通常可以由系统开发人员根据业务的流程逻辑控制。而数据级的权限,特别是报表的数据权限,则是由报表可以控制或应该控制的事情。

报表的数据权限控制,可以直观地理解为:不同的机构、角色或具体到人,访问同一张报表时所看到的数据是可能不同的。比如,工资条(也是一张简单的报表),因为绝大多数公司薪资都是保密的,所以很显然,系统内不同人看到的结果是不能相同的。 再比如,区域销售情况统计,各区域销售经理也只能看到所在区域的数据等等。

实际应用环境中,解决此类问题一般是通过直接在 SQL 中筛选出数据绘制报表模板,然后按照登录对象访问指定的模板就可以了。但是,如果使用用户的人员众多,就需要制作 N 多张样式相同只是 SQL(报表数据集)略有不同的报表,工作量大且不利于后期维护。

Then,润乾报表是如何解决数据权限控制的呢?

实际上,针对这种数据权限问题,在润乾报表工具中,可以简单地通过参数或者宏的方式来实现,报表接收到系统传来的人员账号等信息参数,动态显示报表中的数据就行了,从而达到数据权限控制的目的。

接下来,咱们就赶紧瞅瞅该怎么做:

第一步:数据准备

这里采用 mysql 数据库,创建数据表 m_datas , 脚本如下:

CREATE TABLE m_datas (
       id INT NOT NULL,
       'data' varchar(100) NULL,
       'role' varchar(100) NULL
)

表数据

q1png

ID:编号

DATA:数据

ROLE:可查看角色编码

创建角色字典表 m_roles ,脚本如下:

CREATE TABLE m_roles (
       id INT NOT NULL,
       rolename varchar(100) NULL,
       'role' varchar(100) NULL
)

表数据

q2png

ID:编号

ROLENAME:角色名称

ROLE:角色编码

第二步:搞一张报表模板,使用动态参数(宏),并且拼 sql**** 实现数据权限

新建一张报表模板

(1)报表数据集中新建一个“sql 类型”数据集,名称为:m_datas,SQL 语句写成:

SELECT m_datas.id,m_datas.data,m_datas.role,m_roles.rolename FROM m_datas,m_roles 
WHERE  m_datas.role = m_roles.role ${pri}

根据数据集 m_datas 设计模板并定义表达式:

q3png

其中:

A2单元格录入表达式:=m_datas.select(id)
B2单元格录入表达式:=m_datas.data
C2单元格录入表达式:=m_datas.role
D2单元格录入表达式:=m_datas.rolename

(2)菜单栏:报表à参数,增加“role”参数,参数类型为“普通参数”

q4png

(3)菜单栏:报表à参数,增加“pri”参数,参数类型为“动态参数”

q5png

值表达式为:"and m_datas.role>="+role

注意,通过 role 的编号我们可以看出,角色越高看到的数据越多。

保存模板文件即可。

第三步:发布到服务器,并访问报表查看结果数据

把这个报表发布到报表设计器自带的 demo 应用下,通过如下 url 访问:

http://127.0.0.1:6868/demo/reportJsp/showReport.jsp?rpx=datas_pri.rpx&role=0

其中,role 为报表接收的角色 id 值,在集成应用时,可从 session 获取后传入。

** 好了,来啦!!**看效果:

role 为 0 时

q6png

切换 role 为 3 时,仅出现角色 ID>=3 的数据

q7png

肿么样, 是不是很简单?

最后,总个结: 润乾报表不是系统平台,而是一款面向程序猿用于开发报表的工具类软件产品。之所以不做成统一平台,是为了方便和其他应用系统搞在一起,也就是常说的集成,报表开发后,就可以在系统内作为资源被访问了。而对于功能或资源权限,并不是润乾报表有功能缺失,而是这类控制更容易让集成应用自己去管,而且也可以免去重复登录验证或搞单点登录的麻烦。



作者:bubblegum
链接:http://c.raqsoft.com.cn/article/1535076354197
来源:乾学院
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

来源:网络


智能推荐

润乾报表实现移动端报表展现

可直接阅读原文:http://c.raqsoft.com.cn/article/1539050767973?r=alice 在各企业中或者电商平台的商家,业务方,每天都有大量的人需要在线查看大量的指标,用于监控、分析关键业务数据的发展趋势。同时,又有着能够随时随地,方便快捷的查看分析数据的诉求。我们习惯于,使用润乾报表在 PC 端或大屏中展现,但是你知道吗?润乾报表 V2018 是以 HTML5 ...

如何在润乾报表中制作分组填报表

在前面几篇文章中,我们一起学习了行式填报表制作的相关内容,也了解了多源 SQL 和脚本两种数据处理方式,今天我们来研究一下如何制作分组填报表。 同样地,我们以 demo 示例库中的雇员表信息维护为例,在数据填报页面,需要实现以下效果: 1)雇员信息按照地区分组显示 2)雇员基本信息可进行修改 效果图如下图所示: 在制作分组填报表之前,我们先来看一下它的设计原理。 原理说明: 分组填报表中有两个维度...

润乾填报表如何实现文件(附件)的上下载

报表一般分为统计类和填报类两大类型。统计类只要从数据源取出数据后,以表格或图表形式进行展现就可以了,而填报类除了展现数据,还要允许在页面上对数据进行编辑,并提交入库。 对于填报表来说,除了能编辑展现的文字外,支持填报表上传下载文件也是经常需要的,比如将在工作流中嵌入填报表,代替表单的工作,此时除了录入文字,还有可能要上传一些附件,也就是上传下载文件。 那么,润乾的填报表能否支持上传下载的功能呢? ...

润乾填报表如何实现文件(附件)的上下载

报表一般分为统计类和填报类两大类型。统计类只要从数据源取出数据后,以表格或图表形式进行展现就可以了,而填报类除了展现数据,还要允许在页面上对数据进行编辑,并提交入库。 对于填报表来说,除了能编辑展现的文字外,支持填报表上传下载文件也是经常需要的,比如将在工作流中嵌入填报表,代替表单的工作,此时除了录入文字,还有可能要上传一些附件,也就是上传下载文件。 那么,润乾的填报表能否支持上传下载的功能呢? ...

润乾报表:数据横向扩展列太多时实现换行

润乾报表,横向扩展,数据很多时,会有很多的列,因此浏览效果可能不好。 因此,我想横向扩展的时候,到达一定数据自动换行,实现下图效果 数据集:ds1=select name,price,rownum from foods 润乾: A1:=ds1.count(),用于计算此数据集内的数据个数。 B1:=int(A1)/6+1,用于计算一共需要扩展的行数,其中”6″是每行的数据列...

猜你喜欢

润乾报表实现多数据源混合计算

报表数据经常来自于多个数据源,如不同的数据库、文件、分布式文件系统等。传统报表工具往往要借助第三方程序(如 JAVA 自定义数据源)完成多数据源的访问,过程复杂、代码难写,而且会导致应用系统与报表系统耦合度过高,从而增加后期维护难度。而润乾报表除了支持自定义数据源外,还可以用脚本数据集直接进行多数据源的混合计算。下面通过实际例子分别来看一下这两种方法。 这里以查询某发货时间段内所有订单的客户信息为...

润乾报表实现多数据源混合计算

报表数据经常来自于多个数据源,如不同的数据库、文件、分布式文件系统等。传统报表工具往往要借助第三方程序(如 JAVA 自定义数据源)完成多数据源的访问,过程复杂、代码难写,而且会导致应用系统与报表系统耦合度过高,从而增加后期维护难度。而润乾报表除了支持自定义数据源外,还可以用脚本数据集直接进行多数据源的混合计算。下面通过实际例子分别来看一下这两种方法。 这里以查询某发货时间段内所有订单的客户信息为...

润乾报表4参数模板的下拉数据集的样式如何修改

网页脚本控制单元格属性,我们可以按照我们的  应用开发手册里面的在我们的展现页面添加JavaScript 修改即可。例如:修改单元格下拉数据集的样式。     <script language=javascript>           var _ddboxBackColor = &qu...

redis中的hash扩容渐进式rehash过程

背景: redis字典(hash表)当数据越来越多的时候,就会发生扩容,也就是rehash 对比:java中的hashmap,当数据数量达到阈值的时候(0.75),就会发生rehash,hash表长度变为原来的二倍,将原hash表数据全部重新计算hash地址,重新分配位置,达到rehash目的 redis中的hash表采用的是渐进式hash的方式: 1、redis字典(hash表)底层有...

不同系统下的回车\r和换行\n,及其历史

2019独角兽企业重金招聘Python工程师标准>>>      我们平时按下键盘上的‘回车键’,就能实现回车换行【我们在屏幕上所看到的就是光标移到了下一行的开头位置!!ps:不讨论软件实现的特殊功能,如word里的回车智能缩进】。因此对这个按键更准确说应该叫做‘回车换行键’ 就且将这种将光标移到下行开...

问答精选

How to get the sum of rows using a vector and the make the result in a column

I have a dataframe and i want to calculate the sum of variables present in a vector in every row and make the sum in other variable after i want the name of new variable created to be from the name of...

Call a custom class in zend framework

I have a very rough project that done partially in zend framework (not ZF2). The 'application', 'library' and 'public' folders are on the same root. Now i need to create a library 'Anil' in the 'libra...

Hide Some Of The Categories In Magento?

I want to hide some of the categories from magento home page. I have created some categories like New Arrivals, Special Offer Which I would like to show in some different way may be in left panel or r...

Reading an internal file in Android Studio

I am writing to an internal file in Android Studio The code lets me write lines of data split with commas. I am able to then go to another activity and read it all out at once. However I want to be ab...

Rails Acts_as_votable Gem Like/Unlike Buttons with Ajax

I'm new to Ruby On Rails, I used the acts_as_votable gem to create Like and Unlike Buttons to make Users like and unlike Posts but I can't make them change from Like to Unlike (and viceversa) and upda...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答