Page tree
Skip to end of metadata
Go to start of metadata


用户权限集成,是指根据用户身份,控制可以查看的报表内容。比如一张销售业绩统计表,如果是销售总监查看,可以查看全国的销售数据;如果是区域经理,只能看到其负责区域内的各省份的销售数据;如果是销售业务员,则仅能看到其负责的客户的销售数据。
在葡萄城报表中,这种数据权限的控制是通过【用户上下文】参数来实现的。
所谓用户上下文(UserContext),是指葡萄城报表提供的几个特殊的表达式,其中包括:


  • 用户名:=Code.UserContext.GetValue("Name"),返回用户登录名。例如:Administrator,ZhangSan等。
  • 用户角色: =Code.UserContext.GetValue("Roles"),返回用户从属的角色列表,多个角色之间用逗号分隔。例如:everyone,销售业务人员。
  • 用户电子邮箱:=Code.UserContext.GetValue("Email"),返回用户的电子邮件地址。例如:name@company.com。


将上述用户上下文表达式的值作为数据集的参数,就可以实现根据用户身份过滤数据的目的。
除了在数据集的定义中根据用户身份过滤数据,也可以在报表元素的可见性设置中,根据用户身份来隐藏表格列或某个图表。这种控制也称报表元素权限控制。


以下是一个通过用户上下文控制数据权限和报表元素权限的具体示例:
(1)打开报表设计器,创建一个新的报表模板。
(2)定义一个新的数据源,提供程序类型为【Microsoft Odbc Provider】,连接字串为:
DRIVER=SQLITE3 ODBC DRIVER;DATABASE=C:\葡萄城报表服务器\DemoData\ArsDemo.db
(3)定义一个新的数据集,设置参数UserName值为=Code.UserContext.GetValue("Name"),如下图:

(4)在【查询】中,设置SQL查询语句为:
select 订单.* from 订单
inner join 雇员 on 雇员.雇员ID = 订单.雇员ID
WHERE 雇员.NetUserAccount = ?
order by 订单.订购日期

其中,问号(?)代表的参数就是上面定义的用户上下文参数。
(5)拖放一个表格,绑定数据集的字段,如下图:

(6)选中【货主名称】列,设置Visibility – Hidden属性为如下表达式:
=iif(Code.UserContext.GetValue("Roles").Contains("集团总监"), false, true)

其含义为:如果用户上下文中的角色信息包含"集团总监",那么就显示【货主名称】列,否则就隐藏该列。
(7)将报表模板保存到服务器上。
(8)在系统管理门户(http://localhost:8080/admin)创建角色和用户:
角色:集团总监。
用户:WangWei,勾选【集团总监】角色。
用户:ZhangYing,不选角色。
(9)以ZhangYing身份登录报表门户(http://localhost:8080),查看报表。

可以看到:表格中的雇员ID都是1,就是ZhangYing这个用户对应的雇员ID。并且【货主名称】列是隐藏的。
(10)以WangWei身份登录报表门户,查看该报表:

可以看到:表格中的雇员ID都是2,就是WangWei这个用户对应的雇员ID。并且【货主名称】列是可见的。

  • No labels