BI数据级权限解决方案
2008-08-28 09:57:12 来源:WEB开发网这个类库的作用很简单,抛开BI不谈,其实他就调用了一个存储过程,把返回结果做了一个字符串拼接,然后返回这个字符串。一般的返回结果会是大致如下:{[Location].[City].&[Seattle]},这表示用户在Location维度下只能够看到Seattle的数据,其他的城市数据都看不到。当然如果是多个城市,那就是用逗号分隔的列表,比如:{[Location].[City].&[Seattle],[Location].[City].&[Washington]}。
如上所示,字符串拼接很简单,但是这些用户能够访问的具体数据记录在哪呢?这就是用户在网页上设置好数据权限,记录在数据库中的字符串了。
在这里你要更清楚地话,就需要进一步了解MDX,这不在这篇文章的讨论范围之内。
我们首先完成了第一步,结下来就是在角色设置里调用这个DataSecurity.dll类库了。这个比较简单,但是繁琐,对于Cube中的每一个维度都需要手动设置。这个步骤根据如下的示意图走就是了,没有什么代码工作。
打开SecruityRole角色的属性,进入“维度数据”中就可以设置数据权限了。每一个需要控制数据权限的维度和属性都需要设置下,基本上设置为一条语句:
StrtoSet(BI.DataSecurity.GetDimensionSet(USERNAME, "City"))
对这个语句解释下:StrtoSet是将字符串转换为MDX里的数据集。USERNAME是访问者的域帐号,City则为我们自定义的参数,表示要获取City属性维度的授权数据。
到了这里,我们已经完成了很重要的一步,数据权限的主体已经实现了。但是对于用户来说,他需要有一个前端界面来设置这些数据权限。下面的内容就是为了解决这个问题,不过这里,我只挑出最重要的部分,读取Cube结构来讲,其他的部分你完全可以自己设计。在CS这个项目中,我们是做了如下工作:
更多精彩
赞助商链接