带着上一次笔记的疑问和些许欢喜来到了混混沌沌的下午,程序员的脑子一直在不停的思索着,而多思考总是没错的,盼望着盼望着事情就有了转机,现在我们就来说一说基于角色级别的中间表机制实现行级数据安全.

由于本文大概思路和基于用户级别的中间表机制实现行级数据安全类似,所以在这里就说一说有区别的地方,如果实在有不明白的地方,我想在几十个字前面的链接处给出的文章会给你提供很大的帮助.

1:定义权限标准

和基于用户级别的保持一致.

2:设计基于角色的中间表角色部门表

表(access_role)结构如下图所示

字段解释:roleid来自CJP权限认证的角色表,deptid来自数据仓库中的部门维度表

3:在FM中创建关联关系

--3.1创建事实表和权限标准直接的多对一关系(pdept  1:n  product)

由于和基于用户的操作一样,这里不过多描述

--3.2创建事实表和用户部门表之间的多对一关系(access_role  1:n  product)

由于和基于用户的操作一样,这里不过多描述

--3.3给角色部门表添加过滤器,此步骤很重要

代码解析:#sq(CAMIDList())# contains [physical layer].[ACCESS_ROLE].[ROLEID]

#sq(CAMIDList())#表示利用宏函数获取当前登录用户的所有角色信息并返回,实际内容如下所示

'CAMID("Intrust:u:1"), CAMID("Intrust:r:10000"), CAMID("Intrust:r:10001"), CAMID("::Everyone"), CAMID("::System Administrators"), CAMID("::All Authenticated Users"), CAMID(":Authors"), CAMID(":Query Users"), CAMID(":Consumers"), CAMID(":Metrics Authors"), CAMID(":Metrics Users"), CAMID(":Planning Contributor Users"), CAMID(":Controller Users"), CAMID(":Analysis Users"), CAMID(":PowerPlay Users"), CAMID(":Data Manager Authors"), CAMID(":Readers"), CAMID(":Express Authors"), CAMID(":Adaptive Analytics Users"), CAMID(":Statistics Authors"), CAMID(":Mobile Users"), CAMID(":Cognos Insight Users"), CAMID(":"), CAMID("Intrust")'

返回的是一个字符串,然后我们看再去和access_role中的角色ID比较如果包含则取改行roleid对应的deptid.

经过以上操作,保存模型,发布到cognos connection。

4:在设计报表的查询中添加明细过滤器

[产品认购分析].[部门].[部门].[部门].[部门键]=[physical layer].[ACCESS_ROLE].[DEPTID]

该步骤主要是让角色部门中间表和分析中的部门维度关联起来,实现角色级别的部门ID过滤,然后和部门维度进行关联,这就起到了

只显示和角色相关部门的数据的作用.在以后的管理中我们只要管理好access_role角色和部门之间的关系,给该报表添加数据访问新

用户的时候,在页面维护CJP中的用户角色表,给新用户加上有访问该报表权限的角色即可.如果需要让新角色具有访问该数据的权限,

则需要维护access_role表,结合起来,保证访问权限和数据权限的相对完美实现.

5:查看效果

--5.1可以实现具有不同角色的用户可以访问报表中不同部门的数据

--5.2可以实现修改CJP权限认证中用户角色表来实现给用户增加或者减少访问数据的权限

--5.3可以实现修改access_role来给新角色赋权

PS:需要注意的是,如果用户a具有角色1、角色2, 角色1可以访问部门1的数据,角色2可以访问部门2的数据,则用户a的

访问权限是其所拥有角色权限的并集,即:用户a可以访问部门1和部门2的数据.

6:优缺点分析

--6.1优点

此方法可以保证在以后给该报表增加访问用户或者角色的时候不再修改FM模型即可,增加用户的访问权限维护CJP权限认证中的用户角色表即可,增加角色的访问权限维护

access_role表即可,而且把这种关系扩展到角色和用户的维护符合用户分配权限的习惯.

--6.2缺点

唯一的缺点我想应该是每次设计报表都需要在查询的明细过滤器中加上一个access_role和权限标准表的关联关系,而且从需求完整度上来说,需要维护CJP中的用户角色中间表和access_role两张表,可以这么说比起CJP权限管理来说,我们增加了一个配置表access_role,此表的作用就是建立权限指标表和角色表之间的关系.

--6.3扩展

当然,随着业务的扩展,权限指标可能会多起来,不仅仅局限于部门,也可能是产品类型、所属区域等等,这样的话我们可以考虑在access_role增加一个字段比如下面的结构

当然,这个时候我们可以给表换个名字如下图所示,只是在设计报表的时候多增加一个过滤条件即可 where accesstype=''

FrameWork数据权限浅析3之基于角色的配置表实现行级数据安全的更多相关文章

  1. FrameWork数据权限浅析4之基于多维度配置表实现行级数据安全

    日子过得好苦逼,我过的很好,只是缺少¥.时间在变,而问题始终未变,你解不解决它都在那里一动不动.不知不觉已经发现手机的中央,电脑的右下角已经出现了201411的字样,突然从桌子上爬起来,差点忘记了自己 ...

  2. FrameWork数据权限浅析2之基于用户的配置表实现行级数据安全

    在上一篇笔记中我已经说了如何利用FM自带的机制配合我们已经通过验证的用户空间的组来实现行级数据安全的控制,但是由于上一个方法存在的缺点是以后如果对该对象增加基于用户或者角色的访问权限就需要开发人员去F ...

  3. FrameWork数据权限浅析1之基于手工修改模型实现行级数据安全

    1:环境 Cognos10.2.0,Oracle 2:实现过程 在设置Framework数据级别权限的时候,通常用到的就是在FM的设置数据安全的地方添加安全过滤器,如下图 step1:选中部门维度表→ ...

  4. Transform数据权限浅析2之利用Java完成权限设置

    一:项目背景 1.1:cognos的两种建模工具 为了更好的满足客户的需求,提升报表展现的效率,一种建模工具已经不能满足报表开发和展现的需要.Cognos除了给我们提供了一种基于关系型数据库的建模工具 ...

  5. Transform数据权限浅析1之mdl语句批量加载权限

    Cognos建模工具除了Framework之外,还有一个Transform,两者的最大区别就是在于Framework是通过结构直连关系数据库的,数据根据数据仓库的变化而变化,而Transform是生产 ...

  6. ASP.NET MVC 基于角色的权限控制系统的示例教程

    上一次在 .NET MVC 用户权限管理示例教程中讲解了ASP.NET MVC 通过AuthorizeAttribute类的OnAuthorization方法讲解了粗粒度控制权限的方法,接下来讲解基于 ...

  7. ASP.net MVC 基于角色的权限控制系统的实现

    一.引言 我们都知道ASP.net mvc权限控制都是实现AuthorizeAttribute类的OnAuthorization方法. 下面是最常见的实现方式: public class Custom ...

  8. SpringCloud微服务实战——搭建企业级开发框架(二十八):扩展MybatisPlus插件DataPermissionInterceptor实现数据权限控制

    一套完整的系统权限需要支持功能权限和数据权限,前面介绍了系统通过RBAC的权限模型来实现功能的权限控制,这里我们来介绍,通过扩展Mybatis-Plus的插件DataPermissionInterce ...

  9. YIi 权限管理和基于角色的访问控制

    验证和授权(Authentication and Authorization) 定义身份类 (Defining Identity Class) 登录和注销(Login and Logout) 访问控制 ...

随机推荐

  1. Windows 消息循环(2) - WPF中的消息循环

    接上文: Windows 消息循环(1) - 概览 win32/MFC/WinForm/WPF 都依靠消息循环驱动,让程序跑起来. 本文介绍 WPF 中是如何使用消息循环来驱动程序的. 4 消息循环在 ...

  2. express中间件的理解

    参考 :https://blog.csdn.net/huang100qi/article/details/80220012 Express中间件分为三种内置中间件.自定义中间件.第三方中间件 可以与n ...

  3. Mat矩阵(图像容器)创建及CV_8UC1、CV_8UC2等参数详解

    CV_<bit_depth>(S|U|F)C<number_of_channels> 1--bit_depth---比特数---代表8bite,16bites,32bites, ...

  4. springMVC接受对象集合,name数组

    这两天开发遇到一个很常见的问题,即使自己一直没遇见过,不过之前看过是实现接受对象集合的代码,只不过没注意罢了 推荐一篇文章 直接贴代码吧 public class Person { private S ...

  5. hihocoder #1580 : Matrix (DP)

    #1580 : Matrix 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Once upon a time, there was a little dog YK. On ...

  6. 51nod1380 夹克老爷的逢三抽一

    问题等价于选出$n / 3$个不相邻元素是权值和最大 这是一个经典贪心问题,同种树,拿堆维护即可,复杂度$O(n \log n)$ #include <queue> #include &l ...

  7. KMP的小结

    http://www.cnblogs.com/kuangbin/archive/2012/08/14/2638803.html 如果有哪一天不记得模板了就去看看大神的 .  非常清晰易懂.

  8. Nginx 常见问题与错误处理

    常见问题与错误处理1. 400 bad request 错误的原因和解决办法配置 nginx.conf 相关设置如下.client_header_buffer_size 16k;large_clien ...

  9. bzoj1393 旅游航道

    Description SGOI旅游局在SG-III星团开设了旅游业务,每天有数以万计的地球人来这里观光,包括联合国秘书长,各国总统和SGOI总局局长等.旅游线路四通八达,每天都有总躲得载客太空飞船在 ...

  10. 今天测试了一下 sqlalchemy 性能

    self.db.query(Users).filter(Users.Id==1).first() < self.db.execute('SELECT *  FROM `users` WHERE ...