没有合适的资源?快使用搜索试试~ 我知道了~
开发数据权限
3星 · 超过75%的资源 需积分: 11 12 下载量 70 浏览量
2013-09-16
10:23:14
上传
评论
收藏 248KB DOC 举报
温馨提示
试读
12页
这是一个有关于开发的文档,内容是怎么设计数据权限的。
资源推荐
资源详情
资源评论
前一篇文章《通用权限管理设计 之 数据库设计方案 》介绍了【主体】【领域】 【权限】
、、 问题原型 的设计思想
本文将对这种设计思想作进一步的扩展,介绍数据权限的设计方案。
权限控制可以理解,分为这几种 :
【功能权限】:能做什么的问题,如增加产品。
【数据权限】:能看到哪些数据的问题,如查看本人的所有订单。
【字段权限】:能看到哪些信息的问题,如供应商账户,看不到角色、 部门等信息。
上面提到的那种设计就是【功能权限】,这种设计有一定的局限性,对于主体,只能明确地指
定。对于不明确的,在这里可能就没办法处理。比如下面这几种情况:
数据仅当前部门及上级可见
数据仅当前用户本人可见
类似这样的就需要用到上面提的数据权限。
上一篇文章我用一个表五个字段完成了【功能权限】的设计思路
本文我将介绍如何利用一个表两个字段完成这个【数据权限】的设计思路
初步分析
【数据权限】是在【功能权限】的基础上面进一步的扩展,比如可以查看订单属于【功能权
限】的范围,但是可以查看哪些订单就是【数据权限】的工作了。
在设计中,我们规定好如果没有设置了数据权限规则,那么视为允许查看全部的数据。
几个概念
【资源】:数据权限的控制对象,业务系统中的各种资源。比如订单单据、销售单等。属于上
面提到的【领域】中的一种
【主体】:用户、部门、角色等。
【条件规则】:用于检索数据的条件定义
【数据规则】:用于【数据权限】的条件规则
应用场景
,订单,可以由本人查看
,销售单,可以由本人或上级领导查看
,销售单,销售人员可以查看自己的,销售经理只查看 销售金额大于 的。
我们能想到直接的方法,在访问数据的入口加入 条件来实现,组织 语句:
1,where UserID = {CurrentUserID}
2,where UserID = {CurrentUserID} or {CurrentUserID} in (领导)
3,where UserID = {CurrentUserID} or ({CurrentUserID} in (销售经理) and 销售
金额 > 100000)
这些一个一个的条件,本文简单理解为一个【数据规则】,通常会与原来我们前台的业务过
滤条件合并再检索出数据。
这是一种最直接的实现方式,在【资源】上面加一个【数据规则】(比如上面的三点)。这样
设计就是
【资源】 【数据规则】
我又觉得不同的人应该对应不同的规则,那么也可以理解为,一个用户对应不同的角色,每一
个角色有不一样的【数据规则】,那么设计就变成
【资源】 【主体】 【数据规则】
根据提供者的不同,准备不同的权限应对策略。
这里可以简单地介绍一下,这个方案至少需要 张表,一个是 【资源,主体,规则关系表】、
一个是【数据规则表】
关系表不能直接保存角色,因为你不确定什么时候业务需要按照【部门】或者【分公司】来定义数据规则
于是可以用 、类似这样的两个字段来确定一个【主体】
用 方式的话是这样配置的放在数据库也类似:
<?xml version="1.0" encoding="utf-8"?>
<settings>
<rule view="订单" role="销售人员">
销售员 = {CurrentUserID}
</rule>
<rule view="订单" role="总销售经理">
销售金额 > 100000
</rule>
<rule view="订单" role="区域销售经理">
销售金额 > 100000 and 区域 = {当前用户所属区域}
</rule>
</settings>
对于这种方式有兴趣的朋友也可以试一下,两种方式的【数据规则】是一样的,但是本文没有
采用第二种设计方式,因为它多了一层处理逻辑,我以为应该设计越简单越好,就采用第一种
方式:
【资源】 【数据规则】
当然,上面是用 的方式来确定条件规则的,我们当然不会这么做。 虽然灵活,但是
我们很难去维护,也不知道 在我们的界面 上面如何体现。难不成直接用一个文本框来
显示。这样对应一个开发人员来说不是问题,可是对应系统管理员,很容易出问题。所以我们
需要有另一方式来确定这一规则,并最终可以转换成我们的 语句。
我们的设计关键在于如何规范好这些【数据规则】 ,这个规则必须是对前端友好的,而且是对
后台友好的, !" 显然是很好的方式。
规则说明:
,数据权限规则总是:{属性 条件 允许值}
,数据权限规则可以合并。比如 ( #当前用户 属于 销售人员$%&#订单销售员 等于 当前用户$
!#当前用户 属于 销售经理$
,最终我们会用 !" 格式
在检索数据时会先判断有没有注册了某某【资源】的【条件规则】,如果有,那么加载这个
【条件规则】并合并到我们前台的【搜索条件】(你的业务界面应该有一个搜索框吧)
如下图定义了客户信息的搜索框,我们搜索客户 ' 包括 (",我们组织成的规则将会是:
#)*+#,&*-).'/*012)*("/*0%3$4/*%&$
为了更好地理解【数据规则】,这里介绍一下【通用查询机制】
【通用查询机制】
权限控制总离不开一些条件的限制比如查看当前部门的单据,如果没有完善的通用查询规则
机制,那么在做权限条件过滤的时候你会觉得很别扭。这里介绍一个通用查询方案,然后再介
绍如何实现【数据规则】。
早些时候我写过一篇关于 0350& 结合6% 设计通用处理类的文章《 7)03)0
0350& 打造通用的分页排序查询表格 提供下载 》。里面提到的过滤信息是直接的 语
句。这是不可靠,而且不安全的。
在前端传输给后台的过滤信息不应该是直接的 ,而应该是一组过滤规则。在 03)0
剩余11页未读,继续阅读
资源评论
- Weixinzuan2014-12-29有点参考意义
java_javase
- 粉丝: 1
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功