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) 访问控制 ...
随机推荐
- Django+Nginx+uwsgi搭建自己的博客(二)
在上一篇博客中,为大家介绍了Django的一些基本概念以及建立了第一个App——Users,并且在数据库中建立了对应的表. 在这篇博客中,将为大家继续介绍数据库模型的定义和相关操作,以及Users A ...
- Python画一朵花
from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import Line ...
- FutureTask简单实战
FutureTask是什么? 线程池的实现核心之一是FutureTask.在提交任务时,用户实现的Callable实例task会被包装为FutureTask实例ftask:提交后任务异步执行,无需用户 ...
- crontab定时运行python脚本访问MySQL遇到问题
最近写了一个python脚本来定时备份MySQL数据库.具体实现如下: 1)python脚本中使用os.system("mysqldump -h127.0.0.1 -uroot -ppass ...
- JZYZOJ1622 [usaco2009]工作安排 贪心
和p1123智力大冲浪一样,可以用优先队列写... 每一秒可以做一个工作....因为n个任务只要在限制之前完成就行,所以时间不冲突的话肯定越早做完越好..所以最多的时间是n,当然限定的完成时间中最 ...
- 【20181030T1】排列树【树形结构+组合数】
题面 [正解] 一眼找规律 --**这东西有啥规律啊 哎好像根节点是最小的 好像可以组合数分配子树大小,子树内部-- 可以递归啊! 乱搞一顿就好啦 过了大样例 复杂度\(O(N)\) 切完T2后T3水 ...
- 【20181026T2】**图【最小瓶颈路+非旋Treap+启发式合并】
题面 [错解] 最大最小?最小生成树嘛 蛤?还要求和? 点分治? 不可做啊 写了个MST+暴力LCA,30pts,140多行 事后发现30分是给dijkstra的 woc [正解] 树上计数问题:①并 ...
- [CODE FESTIVAL 2016]Problem on Tree
题意:给一棵树,对于一个满足以下要求的序列$v_{1\cdots m}$,求最大的$m$ 对$\forall1\leq i\lt m$,路径$(v_i,v_{i+1})$不包含$v$中除了$v_i,v ...
- 【四边形不等式】noi95- 合并石子
[题目大意] 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分.试设计出1个算法,计算出将N堆石子合并成 ...
- WordPress插件会员简化1.58 -任意文件下载漏洞(附poc)
今天我们将讨论在WordPress插件WordPress插件与重点会员简化v1.58作为这个剧本的创作时间不打补丁的扶贫开发实践.脆弱脚本如下: CVE-ID:cve-2017-1002008 当然, ...