BI 前端实践 10:基于语义层的权限控制

实践目标

         元数据中定义了整个数据库的表信息,在使用它时,要控制某些用户不能看某些表、某些字段、或不能看表中的某些数据。

控制参与多维分析的表、字段范围

         由元数据生成的字典文件,之前已经认识过,它里面有个分类项功能,简单说就是挑选一些表、字段、维度,组成一个完整的大分类,给某些特定用户使用,从而限制他们看到的信息范围。比如下面的员工分析这个分类中,就去掉了订单、产品相关的表,区域表中去掉了区域级别字段:

..

         在多维分析jsp中设置使用上面这个orders.dct,同时设置使用员工分析这个分类项:

..

         这时,再访问jsp,看到只剩下选出的表和字段了:

..

         再来看另外一个细节,上面的区域表的父区域ID、员工表的负责城市、包括隐藏了的发货城市、收货城市,这些外键字段都能展开出关联的区域表,如果想统一的控制这些外键不再展开,不选出维项中的区域维就可以了:

..

         保存后再刷新多维分析页面,看到所有指向区域表的外键字段就不能展开了:

..

用预设条件限制表内数据范围

         普通用户,不希望他们看到部门表中的全部数据,要去掉总办室、销售 1 部,销售 2 部, 可以通过在 session 中预设表条件限制部门表的取数范围:

..

         再分析的时候,用户在界面上不用设置任何条件,结果就自动去掉了总办室、销售 1 部,销售 2 部这三个部门了:

..

   

         即便分析的时候不选出部门名称,从控制台及界面数据上都能观察到,预设的部门名称限制条件仍然生效了:

..

..

 

         假如很多表都有可视条件,可以用 DQL 设计器通过元数据文件直接生成一个可视文件(vsb),在这个可视文件中编辑表的预置条件:

..

..

         然后 jsp 里使用这个 orders.vsb,界面上再做分析,同样会看到数据被成功限制住了:

..

   

         假如另外一个用户需要不同的权限条件,就再制作另外一个可视文件 orders2.vsb:

..

 

         假如权限条件的情况太多,制作很多 vsb 比较麻烦,可以用宏替代的方式进一步改善,条件中使用 ${宏名称},比如下面的 ${exclude}:

..

         之后在 jsp 中,根据登录用户动态设置宏 exclude 的值就可以了:

..