日子过得好苦逼,我过的很好,只是缺少¥.时间在变,而问题始终未变,你解不解决它都在那里一动不动.不知不觉已经发现手机的中央,电脑的右下角已经出现了201411的字样,突然从桌子上爬起来,差点忘记了自己还是一个上进的人,吹了几分钟牛逼了,接下来我们还是开始说一说这次的问题吧,往下看你会很快看到解决问题的方法的哦........

在本系列文章的第3篇文章中我们已经在6.3的扩展中写下了这么一段话,接下来我们先熟悉一下

--6.3扩展--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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

只是在设计报表的时候多增加一个过滤条件即可 where accesstype=''

--6.3扩展----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

熟悉了上篇文章的思路,那么接下来我们进入正题吧.

[1]:问题分析

在本系列的文章2、3中我们实现了基于用户、角色配置表的行级数据安全,可以通过在FM之外控制访问数据的权限,但是配置表的结构都只是针对一个权限标准的,那就是部门,而在实际的场景中这个就显得很单薄。

实际的工作中我们可能遇到这样的情况:

1:分析数据中存在产品表product、部门表pdept、产品类型表ptype

2:有三个用户分别是king、zhangsan、test

3:king可以访问‘信托一部’和‘信托二部’的数据,并且产品类型只能为‘单一’的数据

4:zhangsan只可以访问‘信托二部’的数据,并且产品类型只能为‘集合’的数据

5:test没有权限访问此数据

[2]:解决问题

毫无疑问,在文章3中的办法是可以解决这个问题的,接下来我们就说一下具体的步骤

--2.1创建拥有多个权限指标的数据安全配置表,如下图

字段解释:

roleid:来自CJP认证中的角色id

accessid:来自分析数据中的维度表的id

accesstype:判断accessid的类型,是来自部门维度还是来自产品类型维度,即我们所说的权限指标类型

--2.2在FM物理层中改写已导入的维度表

a:改写部门表查询主题定义处的sql脚本

b:改写产品类型表查询主题定义处的sql脚本

c:主要代码解析

(1):ACCESS_TABLE.ACCESSTYPE='产品类型' --过滤为产品类型的id

(2):#sq(CAMIDList())# like '%'||ACCESS_TABLE.ROLEID||'%'--从配置表中过滤出所有当前登录用户所拥有角色的所有维度id

(3):#sq(CAMIDList())#--利用宏函数取出当前登录用户所拥有的所有权限的id

d:保证所有维度表和事实表已经建立了正常的1:n关系

本文中不在多说,所指为

pdept 1:n product

ptype 1:n product

--2.3在cognos connection门户中设计报表

a:设计报表界面,随意拖拉出一个交叉表的层次即可

b:设计无数据提示界面,红圈的地方是设置无数据时页面提醒的,具体配置如下

解析:1处选中3的地方就显示高级了,2的地方选择为空时显示页面4的地方下面可以放一个提示图片或者自定义一些提示文字都可以.

c:设计查询,如下图

解释:与此系列的第2、3篇文章不同的是,查询这里就是拖拉之后的查询效果,没有添加任何任何维度和access_table之间的关系,因为关系已经在维度表

的sql中指定好了,详情请看2.a

[3]:查看效果

--3.1权限关系分析

执行下列语句,来了解一下每一个角色的权限

  1. select r1.role_id,r1.role_name,r1.deptname,r2.typename from
  2. (
  3. select r.role_id,r.role_name,d.deptname from access_table a
  4. inner join cognos.org_role r on a.roleid=r.role_id
  5. inner join wxj.pdept d on a.accessid=d.deptkey and a.accesstype='部门'
  6. group by r.role_id,r.role_name,d.deptname
  7. ) r1
  8. inner join
  9. (
  10. select r.role_id,r.role_name,t.typename from access_table a
  11. inner join cognos.org_role r on a.roleid=r.role_id
  12. inner join wxj.ptype t on a.accessid=t.typekey and a.accesstype='产品类型'
  13. group by r.role_id,r.role_name,t.typename
  14. ) r2 on r1.role_name=r2.role_name and r1.role_id=r2.role_id
  15. order by r1.role_id

结果为:

又因在CJP认证中:

用户king对应的角色id为10000,

用户zhangsan对应的角色id为10001,

用户test对应的角色id为10004

所以king可以访问信托一、信托二部且产品类型为单一的数据

所以zhangsan可以访问信托二部且产品类型为集合的数据.

所以test无权访问此数据,因为test所对应的角色id-1004为在access_table中做任何配置

ps:如果一个报表中同时存在多个权限指标,要想让一个角色拥有看到此报表数据的权限,则

需要在access_table中同时给出这多个权限指标的全部或者部分关联关系,比如报表有部门、

又有类型,则需要至少给此角色一个部门对关系一个类型对应关系.才有可能让用户看到数据,

当然这一切都是根据报表的结构而言的.

--3.2登录测试

a:用户king(国王)登录,查看数据,ok

b:用户zhangsan(张三)登录,查看数据,ok

c:用户test(测试)登录,查看数据,ok

[4]:优缺点比较

--4.1优点

a:考虑的比较周全,可以在一张配置表设计多种权限指标多层级的、更详细的、针对每一个维度的数据权限控制

b:无需为每一个权限指标都创建一张类似access_table的表

c:无需在每一个报表设计界面的明显过滤器中添加维度id和accessid的对应关系

d:无需对access_table本身设置过滤器

e:无需对access_table和事实表创建关联关系,在维度层实现权限控制.

access_table只是在重写维度sql时用到了,本身和FM模型没有什么关系,模型只要保持维度和事实表的1:n关系就好了

--4.2缺点

a:需要对一个配置表维护多个字段设置多个行,比如:给一个角色新增访问权限,就需要考虑多个权限指标是否都要配置关系

而且还需要指定该accessid的所属维度类型.

-----------------至此为止------------------

Framework数据安全系列文章我想可以告一段落了,感谢Cognos中国论坛上面所有同学给的思路,感谢Intelnet,至此敬礼

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

  1. FrameWork数据权限浅析3之基于角色的配置表实现行级数据安全

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

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

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

  7. 数据权限设计——基于EntityFramework的数据权限设计方案:一种设计思路

    前言:“我们有一个订单列表,希望能够根据当前登陆的不同用户看到不同类型的订单数据”.“我们希望不同的用户能看到不同时间段的扫描报表数据”.“我们系统需要不同用户查看不同的生产报表列”.诸如此类,最近经 ...

  8. 数据权限管理中心 - 基于mybatis拦截器实现

    数据权限管理中心 由于公司大部分项目都是使用mybatis,也是使用mybatis的拦截器进行分页处理,所以技术上也直接选择从拦截器入手 需求场景 第一种场景:行级数据处理 原sql: select ...

  9. JAVA 数据权限设计

    数据权限设计 前言 在各种系统中.要保证数据对象的安全性以及易操作性,使企业的各业务部门.职能部门可以方便并且高效的协同工作,那么一个好的数据权限管理设计就成为一个关键的问题.尽管企业中各个单元的工作 ...

随机推荐

  1. openwrt 控制gpio口的方法

    利用i2c来控制gpio口 1.编译驱动或者安装驱动 # opkg update # opkg install kmod-i2c-gpio-custom kmod-i2c-core# 加载驱动 # i ...

  2. 趴一趴京东的Ajax动态价格页面

    AJAX,异步加载技术!!! 之前在网上看过很多朋友有一种疑问,为什么在看京东网页的源代码里面看不到价格或则折扣一类的数据,而在网页上正常显示却能看到?...之前我也没有想到是AJAX,因为我写写爬虫 ...

  3. jQuery before 和 after

    A.after(B) ==== B.insertAfter(A) B 放在 A 的后面A.before(B) ==== B.insertBefore(A) B 放在 A 的前面 A.append(B) ...

  4. Python基础篇:从0开始学python

    目录 数据类型 基本数据类型 整形Int的内置方法 字符串Str的内置方法 列表(待补充) 流程控制 分支结构if...else... for循环 循环控制 while循环 函数 函数的名称与格式 参 ...

  5. 我的OI生涯 第五章

    我的OI生涯 第五章 千古诗才,蓬莱文章建安骨 一身傲骨,青莲居士谪仙人 李白追月逆江河 包黑斩龙顺民心 豪气压群雄,能使力士脱靴,贵妃捧砚; 仙才媲众美,不让参军俊逸,开府清新 我辈此中惟饮酒 先生 ...

  6. 【最小生成树】BZOJ1682[Usaco2005 Mar]-Out of Hay 干草危机

    ...最小生成树裸题,9月最后一天刷水刷水. #include<iostream> #include<cstdio> #include<algorithm> usi ...

  7. 【动态规划/多重背包问题】POJ1014-Dividing

    多重背包问题的优化版来做,详见之前的动态规划读书笔记. dp[i][j]表示前i中数加得到j时第i种数最多剩余几个(不能加和得到i的情况下为-1)递推式为: dp[i][j]=mi(dp[i-1][j ...

  8. bzoj4144 [AMPPZ2014]Petrol

    link 题意: 给一个n个点m条边的带权无向图,其中k个点是加油站,每个加油站可以加满油,但不能超过车的油量上限.有q个询问,每次给出x,y,b,保证x,y都是加油站,问一辆油量上限为b的车从x出发 ...

  9. request.getScheme() 取到https正确的协议(转载)

    最近在做一个项目, 架构上使用了 Nginx +tomcat 集群, 且nginx下配置了SSL,tomcat no SSL,项目使用https协议 但是,明明是https url请求,发现 log里 ...

  10. SCOJ 4427: Miss Zhao's Graph dp

    4427: Miss Zhao's Graph 题目连接: http://acm.scu.edu.cn/soj/problem.action?id=4427 Description Mr Jiang ...