• 通用数据级权限控制解决方案的实现(二)(转)


    [BI] 通用数据级权限控制解决方案的实现(二):Cube中的角色设置与数据级权限控制

     原文链接:https://www.cnblogs.com/jasper/archive/2009/07/28/1532821.html
     
     
    上一篇文章说了如何写一个控制数据级权限的DLL,并且放到Cube中去。那么这个DLL放到Cube里了,怎么让他起作用呢?这就是我们这节要讲述的内容了。

    用一句话概括说,在Analysis Services中,我们是通过控制角色的维度数据,来让上一节的DLL起作用的。那么具体如果操作呢?

    首先我们先建立一个角色,角色名字是无所谓的,在这里我们将之称为DataSecurity。如下图所示:


    创建好了角色之后,就出现了在上节中“老南瓜”同学关心的问题了。是不是我们需要针对每种类型的访问用户都建立一个角色,再把相应的用户加入到角色中去呢?

    这个想法,想想都让我害怕,那么多的人,那么多的不同的访问权限,我要设置多少个角色啊。。。我肯定会为了这个忙死,烦死;可是我又是一个懒人,有什么办法可以让我轻松点呢?

    答案就是:你只需要建立一个角色,然后呢把everyone加入到这个角色中。没错!你看到的就是everyone!这就意味着所有人都可以访问到Cube里数据了。

    这下问题又来了,怎么可能?所有人都看到Cube数据,老板还不杀了我?机密数据都被人看见了。。。

    呵呵,那么这个有着everyone成员的角色DataSecurity究竟是靠怎样的魔力来控制数据级别的权限呢?

    我们再仔细想一想,好像漏掉了什么?对了,就是我们上一节开发成功的DLL,到目前为止,我们还没有用上这个DLL,他就是控制数据级别权限的关键所在。

    如何在DataSecurity角色中用上这个DLL来控制数据级别的权限呢?让我们先打开DataSecurity角色的维度数据。


    在角色的维度数据里,提供了一个Allowed member set的设置,这可是个高级货哦。
    比如我们要控制Account维度的Accounts的数据级别权限,我们在界面上选择好Account这个维度,然后选择Accounts这个属性,再接着点"Advanced",在下面的Allowed member set对话框就是我说的这个高级货!

    这个地方,就是我们调用上一节写好的DLL的地方。也是我们控制数据级权限的地方。所有人都能访问到Cube不要紧,没有权限的人通过这个高级货一转,就啥也看不到了。。。

    让我们看看,怎么来设置这个高级货:我们放一个如下的字符串:
    StrtoSet(BI.DataSecurity.GetDimensionSet(USERNAME, "[Accounts]", "[Account].[Accounts].AllMembers"))

    StrToSet是把字符串转换为Member Set。BI.DataSecurity.GetDimensionSet是调用我们上一节写的函数。这个调用规则是:[DLL Name].[Namespace].[Class].[Function],参数呢:USERNAME就是访问者的域账号,就是这个参数控制住了everyone能看到哪些东西。其他的参数都是自己写的,根据自己的需要来写。我们这里的第二个参数,就是说,这个函数会返回访问者在"Accounts"这个属性下能够访问的维度数据;第三个参数是一个默认设置,表示如果数据库中没有查到任何结果,就默认表示他能够看所有的数据,这个默认设置可以根据你自己的需要来改,你也可以说,默认就看不到任何数据。

    另外一个要注意的地方就是:我们要钩选上那个"Enable Visual Total",这个会只在数据权限范围内做数据的统计和汇总。

    到了这一步,我们就完成了后台的所有设置,但是还少了很重要的一块,用户能够访问哪些数据怎么记录下来?这个我们将在后面继续说明。

    我们弄个图示,简单说明下这2步的工作原理:


    从图示中也可以看出,还有很重要的一步需要我们继续努力,就是如何去设置用户的授权数据。这个部分,请听下回分解哈。
  • 相关阅读:
    代理模式
    工厂模式
    Mysql索引数据结构为什么是B+树?
    mxgraph中mxStencil使用经验
    !dbobji.cpp@8615
    ForkJoinPool线程池
    保障线程安全的设计技术
    Java利用线程工厂监控线程池
    使用Arthas分析线上问题
    使用规则执行器代替 if else 判断
  • 原文地址:https://www.cnblogs.com/lsysunbow/p/9156425.html
Copyright © 2020-2023  润新知