在上一篇笔记中我已经说了如何利用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. Spring框架 AOP面向切面编程(转)

    一.前言 在以前的项目中,很少去关注spring aop的具体实现与理论,只是简单了解了一下什么是aop具体怎么用,看到了一篇博文写得还不错,就转载来学习一下,博文地址:http://www.cnbl ...

  2. BZOJ1087【状压DP】

    题目链接[http://www.lydsy.com/JudgeOnline/problem.php?id=1087] 题意:在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击 ...

  3. [ZOJ3254] MON 9.2009Secret Code

    A^x = D (mod P) 0 <= x <= M, here M is a given integer. 1 <= A, P < 2^31, 0 <= D < ...

  4. Codeforces 622 F. The Sum of the k-th Powers

    \(>Codeforces \space 622\ F. The\ Sum\ of\ the\ k-th\ Powers<\) 题目大意 : 给出 \(n, k\),求 \(\sum_{i ...

  5. (VIJOS) VOJ 1067 Warcraft III 守望者的烦恼 矩阵快速幂

    https://vijos.org/p/1067   就..挺普通的一道题..自己学一下怎么推式子就可以...细节不多但是我还是日常爆细节..比如说循环写成从负数开始...   只求ac不求美观的丑陋 ...

  6. Java 基础总结--反射的基本操作

    一.反射的概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为 ...

  7. noip2011初赛提高组 试题详解

    转载自:https://blog.csdn.net/Eirlys_North/article/details/52889993 一.单项选择题(共20题,每题1.5分,共计30分,每题有且仅有一个正确 ...

  8. VMware中网络设置之host-only

    有了前面一篇的NAT的网络设置,本文就显得非常简单了.同样图文结合的步骤: 1.设置host-only模式. 2.设置linux虚拟机的静态IP.进入linux系统,点击主菜单---系统设置---网络 ...

  9. MC34063组成DC-DC电路

    +VO的输出电压峰值可达2倍V_IN,-VO的输出电压可达-V_IN. 需要注意的是,3路的峰值电路不能超过1.5A,同时两路附加电源的输出功率和必须小于V_IN·I·(1-D), 其中I为主输出的电 ...

  10. TF卡翻盖式卡座