FrameWork数据权限浅析2之基于用户的配置表实现行级数据安全

时间:2022-10-24 20:30:11

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

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

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

1:定义权限标准

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

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

FrameWork数据权限浅析2之基于用户的配置表实现行级数据安全

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

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

表(access_table)结构如下图所示

FrameWork数据权限浅析2之基于用户的配置表实现行级数据安全

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

3:在FM中创建关联关系

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

FrameWork数据权限浅析2之基于用户的配置表实现行级数据安全

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

FrameWork数据权限浅析2之基于用户的配置表实现行级数据安全

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

FrameWork数据权限浅析2之基于用户的配置表实现行级数据安全

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

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

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

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

如下图所示

FrameWork数据权限浅析2之基于用户的配置表实现行级数据安全

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

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

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

5:查看效果

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

FrameWork数据权限浅析2之基于用户的配置表实现行级数据安全

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

FrameWork数据权限浅析2之基于用户的配置表实现行级数据安全

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

测试用户:

FrameWork数据权限浅析2之基于用户的配置表实现行级数据安全

查看结果:

FrameWork数据权限浅析2之基于用户的配置表实现行级数据安全

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. HTML5&plus;Activex&plus;Singr&plus;ABP&plus;MongoDB

    最近在.net DDD开发领域有个炒的很火的框架叫ASP.NET Boilerplate看上去很牛逼的样子,为什么我会觉得很牛逼呢?  第一:我看不懂.  第二:关注的人多,我选框架就像进饭馆,哪家人 ...

  2. ERROR 2002 &lpar;HY000&rpar;&colon; Can&&num;39&semi;t connect to local MySQL server through socket &&num;39&semi;&sol;tmp&sol;mysql&period;sock&&num;39&semi; &lpar;2&rpar;

    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 背景: mys ...

  3. &lbrack;转&rsqb;Responsive Tables Demo

    本文转自:http://elvery.net/demo/responsive-tables/ A quick and dirty look at some techniques for designi ...

  4. 1&period;7&period;4&period;3 Parsers

    Parsers 除了主查询解析器外,还有一些其他的查询解析器可以使用或者和主查询解析器连合使用.这部分描述了其他查询解析器的细节,并且给出了一些例子: 大多数的解析器都可以使用局部查询参数的方式来表达 ...

  5. Google搜索技术

    命令 双引号 把搜索词放在双引号中,代表完全匹配搜索,也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配.bd和Google都支持这个指令. 减号 减号代表搜索不包含减号后面的 ...

  6. flash与字符串&colon;字符串与属性

    有时候,我们想通过设置一个DisplayObject 类是属性值,只是需要通过点来引用即可.有时候,通过字符串也可以引用显示对象里面的属性值.     下面举个例子 .                 ...

  7. Spring开发环境搭建教程

    Spring开发环境搭建 JDK7以上版本 eclispe for j2ee 4.0以上版本 Spring frameWorks 3.0以上版本 至于前两个我们就不介绍,直接百度就可以了,对于Spri ...

  8. SpringBoot&plus;thymeleaf&plus;security&plus;vue搭建后台框架 基础篇(一)

    刚刚接触SpringBoot,说说踩过的坑,主要的还是要记录下来,供以后反省反省! 今天主要讲讲 thymeleaf+security 的搭建,SpringBoot的项目搭建应该比较简单,这里就不多说 ...

  9. 关于freemarker 空变量的接收以及类型转换 笔记

    通常接收一个变量是${siOrganid},如果并没有这个变量,是这么处理${siOrganid!},如果这个变量是某个类属性,是这么处理${interfsrv.siOrganid!},如果这个类也是 ...

  10. SAX解析器

    1.继承类DefaultHandler package com.SSLSocket.test; import org.xml.sax.Attributes; import org.xml.sax.SA ...