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

上一篇文章说了如何写一个控制数据级权限的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步的工作原理:


从图示中也可以看出,还有很重要的一步需要我们继续努力,就是如何去设置用户的授权数据。这个部分,请听下回分解哈。
原文地址:https://www.cnblogs.com/jasper/p/1532821.html