FrameWork数据权限浅析2之基于用户的配置表实现行级数据安全
在上一篇笔记中我已经说了如何利用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之基于用户的配置表实现行级数据安全的更多相关文章
- FrameWork数据权限浅析4之基于多维度配置表实现行级数据安全
日子过得好苦逼,我过的很好,只是缺少¥.时间在变,而问题始终未变,你解不解决它都在那里一动不动.不知不觉已经发现手机的中央,电脑的右下角已经出现了201411的字样,突然从桌子上爬起来,差点忘记了自己 ...
- FrameWork数据权限浅析3之基于角色的配置表实现行级数据安全
带着上一次笔记的疑问和些许欢喜来到了混混沌沌的下午,程序员的脑子一直在不停的思索着,而多思考总是没错的,盼望着盼望着事情就有了转机,现在我们就来说一说基于角色级别的中间表机制实现行级数据安全. 由于本 ...
- 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是生产 ...
- JAVA 数据权限设计
数据权限设计 前言 在各种系统中.要保证数据对象的安全性以及易操作性,使企业的各业务部门.职能部门可以方便并且高效的协同工作,那么一个好的数据权限管理设计就成为一个关键的问题.尽管企业中各个单元的工作 ...
- JeeSite | 数据权限应用
中午吃饭时看了一下陆毅版的<三国>,刚好看的是蜀军缺粮,诸葛亮让王平去劫司马懿的粮.司马懿看蜀军用木牛流马运量很方便,就抢了蜀军的木牛流马仿制了一批,结果司马懿用它运粮时,被王平冒充司马懿 ...
- SpringCloud微服务实战——搭建企业级开发框架(二十八):扩展MybatisPlus插件DataPermissionInterceptor实现数据权限控制
一套完整的系统权限需要支持功能权限和数据权限,前面介绍了系统通过RBAC的权限模型来实现功能的权限控制,这里我们来介绍,通过扩展Mybatis-Plus的插件DataPermissionInterce ...
- vsftp虚拟用户登录配置详解
一.安装:1.安装Vsftpd服务:# yum install vsftpd 2.安装DB4部件包:这里要特别安装一个db4的包,用来支持文件数据库.# yum install db4-utils 二 ...
随机推荐
- hihocoder 1490 Tree Restoration
构造. 从最后一层开始往上构造.最后一层肯定都是叶子结点,距离为2的肯定是同一个父亲,确定好了父亲之后,可以确定上一层每个节点之间的距离,以及上一层每个节点到还未确定的叶子节点之间的距离. #incl ...
- XV6操作系统代码阅读心得(三):锁
锁是操作系统中实现进程同步的重要机制. 基本概念 临界区(Critical Section)是指对共享数据进行访问与操作的代码区域.所谓共享数据,就是可能有多个代码执行流并发地执行,并在执行中可能会同 ...
- java学习助手
感谢大家使用Java学习助手! 打一开始,这应用就是全开源,希望大家自觉遵循开源协议,还Android开发一片净土(国内的情况你懂的) 接下来都不会更频繁更新文章,大家更应该把注意力放在基础的模块那里 ...
- 范浩强treap 普通平衡树
增加Split(分裂),Merge(合并)操作,非常好写,时间也不比普通treap慢什么. #include<bits/stdc++.h> using namespace std; str ...
- 51nod1376 最长上升子序列的数量
机房的人问我树状数组怎么做这题...... 树状数组维护$len, num$表示$LIS$的长度和数量即可 复杂度$O(n \log n)$ 注:$O(n \log n)$二分+单调栈才是真神仙 具体 ...
- 【DLX算法】hdu3498 whosyourdaddy
题意:给你一个01矩阵,让你选择尽可能少的行数,使得这些行的并集能够覆盖到所有列. DLX算法求解重复覆盖问题模板,使用估价函数进行剪枝. #include<cstdio> #includ ...
- CROC 2016 - Qualification C. Hostname Aliases map
C. Hostname Aliases 题目连接: http://www.codeforces.com/contest/644/problem/C Description There are some ...
- Java之多线程 Semaphore(信号量)
一个计数信号量.从概念上讲,信号量维护了一个许可集.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可.每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者. ...
- 树莓派(Debian)系统开启iptables的raw表实现日志输出
说明:可能Debian默认不开启iptables的raw表,所以无法通过其实现日志跟踪. 日志跟踪:http://www.cnblogs.com/EasonJim/p/8413563.html 解决方 ...
- Java代码优化方案 J2ME内存优化
Java代码优化方案 J2ME内存优化 从几本书上,N个网站上整理的一些JAVA代码优化方案,最近的项目只有1M内存可用,必须很抠门了~J2ME项目更要注意的 避免内存溢出 l 不用的对象释放(置空) ...