权限细粒度之参数控制

编辑
  • 文档创建者:文档助手1
  • 浏览次数:32598次
  • 编辑次数:21次
  • 最近更新:Kevin-s 于 2019-06-07
  • 1. 版本

    报表服务器版本
    10.0

    2. 描述

    希望不同用户登陆系统后,访问相同的模板,所看到的数据是不同,样式不同等。如:访问报表 A,中央的账号登陆系统,看到的是全国的数据,而省级用户登陆系统,看到的是该省的数据,依次往下类推。

    3. 实现原理

    用户认证后会将报表三个固定的默认参数$fine_username$fine_role$fine_position保存在 Session 中。

    同时提供两个函数GETUSERDEPARTMENTS()GETUSERJOBTITLES()来分别获取部门角色的部门和职位。

    同一报表环境下,模板中就可以直接以参数的形式获取到对应的值,然后在模板里面进行筛选判断就可以显示不同数据及样式。

    3.1 $fine_username

    获取登录系统的用户名。

    比如说登录用户名为 Anna,那么$fine_username=Anna

    3.2 $fine_role

    获取登录系统的角色。

    如果是管理员用户登录,则$fine_role=SUPERROLE

    如果是角色用户登录,比如说角色「数据架构师」用户登录,$fine_role=数据架构师

    如果是部门角色登录,该参数为空,$fine_role 返回值为数组,使用concatenate($fine_role,"")即可将其转化为字符串。

    3.3 $fine_position

    获取部门职位,返回值为一个由部门和职位组成的数组。

    比如「人力资源部长」职位登录系统,那么$fine_position={"departments":"人力资源","jobTitle":"部长"}

    3.4 GETUSERDEPARTMENTS()

    获取部门职位里面的部门。

    比如说「人力资源部长」职位登录系统,那么GETUSERDEPARTMENTS()=人力资源

    若多个部门,则数组GETUSERDEPARTMENTS(3,2)返回角色该部门的第三层和第二层名字。若多个部门则返回数组,若没有第三层则只显示第二层。

    3.5 GETUSERJOBTITLES()

    获取部门职位里面的职位。

    比如说「人力资源部长」职位登录系统,那么 GETUSERJOBTITLES()=部长

    注:$fine_username、$fine_role、$fine_position 是我们报表默认的参数,所以调用时大小写必须保持一致。

    注:$fine_username、$fine_role、$fine_position 参数在 9.0 里分别对应 $fr_username、$fr_authority、$fr_userposition。

    4. $fine_username

    不同用户登录查看的数据是不同的。下文在数据集中通过报表默认参数$fine_username进行过滤筛选,在 SQL 中加入过滤筛选语句,即可达到不同的人看不一样的数据。

    4.1 示例一

    用户王伟登陆成功之后只能看到自己的销量,定义的数据集为 ds1:SELECT * FROM 销量 where 英文简称='${fine_username}'

    配置好权限以王伟登陆成功之后,模板内容就会自动筛选到王伟的信息了, 以其他用户登陆进去则可以看到其他用户的信息。
    222

    4.2 示例二

    在参数界面,控件的值根据权限参数值的改变而显示的值不同,这样通过动态 SQL 获取,增加 SQL 的过滤条件为权限参数名称即可。

    用户王伟登陆成功,看到的下拉框控件只有自己的产品,

    在设置下拉框控件,选择动态 SQL 输入 SQL 语句为:SELECT * FROM 销量 where 英文简称='${fine_username}'选择实际值和显示值。

    这样就实现不同的用户,登陆系统进入报表,下拉框所看到值就不同了。
    222

    注:参数界面必须定义控件,参数名为报表默认参数 fine_username,因为参数界面传值是通过控件的值来引用的,所以先定义控件才可以把值传到控件 chanpin 里面,进行筛选数据。如果控件 fine_username 不希望显示,可以在控件设置,可见的勾去掉即可。

    5. $fine_role

    希望不同角色看到的列数不同,行列的颜色不同,这样可以给行列添加条件属性设置行高、列宽、背景等,如果登录系统用户为角色用户,则可以在公式中通过$fine_role进行过滤,如果是部门职位用户,则不可使用该参数进行过滤。设置模板的条件属性格式可参考 条件属性 文档。

    若王伟是管理员,孙林的角色名称是销售主管,且为导入的角色或者手动添加的角色,王伟登录的时候可以看到所有的列,而孙林登录的时候只显示地区、销售员、产品和销量,汇总这列看不到。这里就得在汇总这列添加条件属性>列宽,设置为 0 。

    公式中写入默认参数$fine_role='销售主管'判断登录的角色为销售主管,如下图所示:

    222
    注:如有一个用户有多个角色的情况,可将公式改为:find('销售主管',$fine_role)>0

    以孙林登陆成功后,即角色为销售主管登录,访问模板只能看到报表展示了以下内容,如下图所示:
    222

    6. 两个函数

    仍然以上面的$fine_role示例中的模板为例,只是此时孙林不再是角色用户,而是部门职位用户,部门为销售部,职位为 sale,那么公式中应该写入两个函数GETUSERDEPARTMENTS()='销售部'GETUSERJOBTITLES()='sale',如下图:

    222

    附件列表


    主题: 部署集成
    标签: 暂无标签
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]