FrameWork数据权限浅析3之基于角色的配置表实现行级数据安全
带着上一次笔记的疑问和些许欢喜来到了混混沌沌的下午,程序员的脑子一直在不停的思索着,而多思考总是没错的,盼望着盼望着事情就有了转机,现在我们就来说一说基于角色级别的中间表机制实现行级数据安全.
由于本文大概思路和基于用户级别的中间表机制实现行级数据安全类似,所以在这里就说一说有区别的地方,如果实在有不明白的地方,我想在几十个字前面的链接处给出的文章会给你提供很大的帮助.
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之基于角色的配置表实现行级数据安全的更多相关文章
- FrameWork数据权限浅析4之基于多维度配置表实现行级数据安全
日子过得好苦逼,我过的很好,只是缺少¥.时间在变,而问题始终未变,你解不解决它都在那里一动不动.不知不觉已经发现手机的中央,电脑的右下角已经出现了201411的字样,突然从桌子上爬起来,差点忘记了自己 ...
- FrameWork数据权限浅析2之基于用户的配置表实现行级数据安全
在上一篇笔记中我已经说了如何利用FM自带的机制配合我们已经通过验证的用户空间的组来实现行级数据安全的控制,但是由于上一个方法存在的缺点是以后如果对该对象增加基于用户或者角色的访问权限就需要开发人员去F ...
- FrameWork数据权限浅析1之基于手工修改模型实现行级数据安全
1:环境 Cognos10.2.0,Oracle 2:实现过程 在设置Framework数据级别权限的时候,通常用到的就是在FM的设置数据安全的地方添加安全过滤器,如下图 step1:选中部门维度表→ ...
- Transform数据权限浅析2之利用Java完成权限设置
一:项目背景 1.1:cognos的两种建模工具 为了更好的满足客户的需求,提升报表展现的效率,一种建模工具已经不能满足报表开发和展现的需要.Cognos除了给我们提供了一种基于关系型数据库的建模工具 ...
- Transform数据权限浅析1之mdl语句批量加载权限
Cognos建模工具除了Framework之外,还有一个Transform,两者的最大区别就是在于Framework是通过结构直连关系数据库的,数据根据数据仓库的变化而变化,而Transform是生产 ...
- ASP.NET MVC 基于角色的权限控制系统的示例教程
上一次在 .NET MVC 用户权限管理示例教程中讲解了ASP.NET MVC 通过AuthorizeAttribute类的OnAuthorization方法讲解了粗粒度控制权限的方法,接下来讲解基于 ...
- ASP.net MVC 基于角色的权限控制系统的实现
一.引言 我们都知道ASP.net mvc权限控制都是实现AuthorizeAttribute类的OnAuthorization方法. 下面是最常见的实现方式: public class Custom ...
- SpringCloud微服务实战——搭建企业级开发框架(二十八):扩展MybatisPlus插件DataPermissionInterceptor实现数据权限控制
一套完整的系统权限需要支持功能权限和数据权限,前面介绍了系统通过RBAC的权限模型来实现功能的权限控制,这里我们来介绍,通过扩展Mybatis-Plus的插件DataPermissionInterce ...
- YIi 权限管理和基于角色的访问控制
验证和授权(Authentication and Authorization) 定义身份类 (Defining Identity Class) 登录和注销(Login and Logout) 访问控制 ...
随机推荐
- Servlet技术——常用的类和接口
Servlet是运行在服务器端的Java应用程序,由Servlet容器对其进行管理. 当用户对容器发送HTTP请求时,容器将通知相应的Servlet对象进行处理,完成用户和程序之间的交互. 在Serv ...
- margin padding 图
- Redis_NoSql分布式数据库CAP原理
前文简单介绍了NoSql数据库的四大分类以及常用的数据库技术,本文简单介绍分布式数据库CAP原理. 一.传统的CAID是什么 1. A(Atomicity)原子性:事务里的所有操作要么全部做完,要么都 ...
- POJ 1741 树分治
题目链接[http://poj.org/problem?id=1741] 题意: 给出一颗树,然后寻找点对(u,v)&&dis[u][v] < k的对数. 题解: 这是一个很经典 ...
- MODI出现ORC RUNNING ERROR的解决方法
stackflow都没个靠谱的说法,最后还是csdn上看到的.转一个备用.http://bbs.csdn.net/topics/390135443 由于直接执行Mircosoft Office Doc ...
- nginx部署ssl证书
确保nginx有ssl模块,修改nginx.conf文件 在server中添加 listen 443 ssl; #crt文件路径 证书的公钥 ssl_certificate xxx.crt; #key ...
- jdk1.6,jdk1.7和jdk1.8多版本切换
目录 一.配置jdk1.7(win7系统) 二.jdk1.8切换回jdk1.7 三.最后强调可能出现不成功的原因 首先要明确jdk一般都是默认安装在C:\Program Files\Java下的,在配 ...
- 【原创】Eclipse中Android项目引用
1.选择名为SMSSDK的项目,右键--->Properties--->Android--->将Is Library勾上--->OK. 2.选中另一个名为FragmentDem ...
- redis配置参数简介
redis配置查看方式: 1.redis的安装目录查看redis.conf 2.登陆redis客户端,使用 config get xx命令. 比如:查看所有的配置: config get * [roo ...
- LINUX 高可用群集之 ~Corosync~
Corosync:它属于OpenAIS(开放式应用接口规范)中的一个项目corosync一版本中本身不具 备投票功能,到了corosync 2.0之后引入了votequorum子系统也具备了投票功能了 ...