在上一篇笔记中我已经说了如何利用FM自带的机制配合我们已经通过验证的用户空间的组来实现行级数据安全的控制,但是由于上一个方法存在的缺点是以后如果对该对象增加基于用户或者角色的访问权限就需要开发人员去FM模型添加操作,这样就大大的增加了我们系统的维护成本,下面我们就来说一下另外一种方法:基于用户级别的中间表机制实现行级数据安全

ps:这种方法命名只是笔者的一种定义说法,属个人想法而已,各位千万不要拿来铭记,重要的是过程,至于名字,就让他随风飘吧.

下面我们就走入正题,如何利用基于用户级别的中间表机制来实现行级数据安全管理呢?

1:定义权限标准

也就是说在定义行级数据安全的时候,我们是根据部门还是根据产品类型来定义数据安全的。比如我们让属于不同部门的用户访问属于自己部门的数据,总经理可以访问所有部门的数据,再比如我们让不同产品类型的经销商访问自己销售产品类型的数据,让区域经理访问所属区域销售的所有产品类型的数据等等。而在实际的操作中,上面所提的部门、产品类型、区域划分等等在报表设计的过程中就体现为一张维度表。在本文中,我们把部门作为一个权限标准。

--1.1下面给出部门表(pdept)的结构

字段解析:部门key、部门名称 根据需要自定义即可

2:设计基于用户的中间表用户部门表

表(access_table)结构如下图所示

字段解析:username来自CJP认证中的用户表中的username、departid来自pdept

3:在FM中创建关联关系

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

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

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

代码解析:[physical layer].[ACCESS_TABLE].[USERNAME]  =#sq($account.personalInfo.userName)#

#sq($account.personalInfo.userName)#表示利用会话参数取到当前用户的username

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

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

如下图所示

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

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

用户的时候,在页面维护access_table表即可.

5:查看效果

--5.1:使用用户名为zhangsan的用户登录,可以看到张三信托一、二、三部门的数据都可以访问

--5.2:使用用户名为lisi的用户登录,可以看到李四只可以看到信托一部的数据

--5.3:使用用户名为test切具有管理员权限的用户登录,可以看到测试用户没有访问此报表的权限(因为test没有在access_table中分配任何权限)

测试用户:

查看结果:

ps:从5.3可以看出此种设置数据权限的方法只依赖于用户部门表access_table,和用户是否是管理员无关,当然我们如果想给管理员所有权限的话,增加管理员的所有权限到access_table即可,比如在access_table中增加下面的三条记录,测试用户就可以访问这个报表的所有数据了.

test   1
test   2
test   3

6:优缺点分析

--6.1优点

此方法可以保证在以后给该报表增加访问用户的时候不在修改FM模型即可,提供一个简单的界面维护access_table用户部门中间表即可

--6.2缺点

个人认为这种基于用户级别的操作比较繁琐,每次增加一个用户都要维护access_table,用户过多就会有些麻烦

--6.3期待

可以根据本文的思路,去设计一个基于角色的,让具体的每一个角色可以访问那些部门的数据,然后用户只要维护用户和角色之间的关系即可,本质上也是功能分配给角色,然后角色分配给用户,这样只要角色还在,就可以基于该角色添加多个用户。

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

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

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

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

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

  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. JAVA 数据权限设计

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

  7. JeeSite | 数据权限应用

    中午吃饭时看了一下陆毅版的<三国>,刚好看的是蜀军缺粮,诸葛亮让王平去劫司马懿的粮.司马懿看蜀军用木牛流马运量很方便,就抢了蜀军的木牛流马仿制了一批,结果司马懿用它运粮时,被王平冒充司马懿 ...

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

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

  9. vsftp虚拟用户登录配置详解

    一.安装:1.安装Vsftpd服务:# yum install vsftpd 2.安装DB4部件包:这里要特别安装一个db4的包,用来支持文件数据库.# yum install db4-utils 二 ...

随机推荐

  1. Python并发编程-协程

    利用Greenlet模块在多线程之间切换 from greenlet import greenlet def eat(): print('eating start') g2.switch() prin ...

  2. quartz定时任务,已过期的内容自动下线

    概念: Quartz是一个开源的作业调度框架,可以让计划的程序任务一个预定义的日期和时间运行.Quartz可以用来创建简单或复杂的日程安排执行几十,几百,甚至是十万的作业数. 框架架构: 简单实例: ...

  3. SpringBoot学习(二)

    MyBatis是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架,避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.spring Boot 是能支持快速创建 Spring 应用的 ...

  4. ubuntu16.04.2安装完后重启报错[sda] Assuming drive cache: write through

    原因:检测主机的物理连接线,发生问题时"已连接"未勾选,重启的时候找不到iso文件 解决办法:勾选"已连接",重启机器成功

  5. Week One

    2018.11.21: 1.[BZOJ 4868][SHOI 2017] 从后往前枚举最后位置即可,如果$A<B$,用尽可能多的$A$替换$B$操作 Tip:很大的$C$可能爆$longlong ...

  6. 【四边形不等式】HDU3506-Monkey Party

    [题目大意] 香蕉森林里一群猴子(n<=1000)围成一圈开会,会长给他们互相介绍,每个猴子需要时间a[i].每次只能介绍相邻的两只猴子x和y认识,同时x所有认识的猴子和y所有认识的猴子也就相互 ...

  7. DEDECMS最新友情链接getshell漏洞分析

    先上exp: <?php //print_r($_SERVER); $referer = $_SERVER['HTTP_REFERER']; $dede_login = str_replace( ...

  8. NOIP 解题有感

    算法方面: 在搜索问题上,包括贪心等没有固定算法的题目,还有输出格式(包括输入格式)特别容易出错.这也是解题选手的弱点. 1.做搜索题把步骤先用文字写下来,再转换成代码,以避免敲代码时疏漏某个条件. ...

  9. Google图片和NASA 网站图片的爬虫

    1.根据关键字爬取NASA网站上的图片 首先针对需要爬取的网站进行分析,输入关键字查找需要的内容 通过关键字请求,网页每次会加载20张的缩略图,分析网页源码能够很容易的找到缩略图的url: 然后再点开 ...

  10. python开发_calendar

    如果你用过linux,你可能知道在linux下面的有一个强大的calendar功能,即日历 在python中,同样也有这样的一个强大的calendar 下面是我做的demo: #python中的cal ...