多组织机构怎样保证数据独立,不会错查到其他组织机构

penweizgx 14-11-28

一个系统中容纳了多个组织机构的业务,现在全部的数据共用一套数据库和一套表,表里面的数据加组织机构标识,但是这样会担心程序中不小心bug导致查到了其他组织下得数据;怎么彻底避免在程序开发过程中的Bug导致查数据的时候查到了别的组织机构下得数据 现在有几种方案1、动态数据库,每个组织机构创建一套数据库 2 动态表,跟动态数据库差不多,
系统目前是用SpringMVC+Spring+hibernate3的,如果采用后两种实现方案实现实现起来相对麻烦,多个数据库和多表也不太便于后期维护,大家有什么好的解决方案!

[该贴被penweizgx于2014-11-28 12:42修改过]

liangshan
2014-11-28 13:37

用户登录成功时将当前用户所能操作的资源的组织结构列表加载进用户的Session中,组织结构限制了用户所能面向的资源的范围,用户后续的每一个操作都会判断组织结构。组织结构的编码是具有偏移量的,判断是否越权了组织结构就是
foreach(var organization in UserSession.Current.Organizations){
if(resourceInstance.OrganizationCode.StartWith(organization.Code)){
return true;
}
return false;
}

整个系统中的权限能分前后100层,前100层主要关注功能权限,后100层主要关注数据权限。前后100层中间是40层的组织结构级权限,组织结构级权限是前后100层权限的过度地带。
所谓功能级权限就是:面向某一种类型的资源的整个记录集的操作权限。
比如有一种ResourceType为Contact的资源,所有的Contact资源记录组成一个集合。功能级权限所面向的是整个集合。每一种资源类型的功能列表都是绑定在对应的ResourceType上的。
前100层是功能级权限,后100层是数据级权限,前后100层之间不是真空,前100层中也有基于资源的组织结构的数据级权限。组织结构是什么?组织结构是对整个资源记录集进行单元划分,每一个单元都是整个资源记录集的一个子集,并且这种划分具有严格的层级、不交叉。每一个资源记录至多属于一种组织结构的一个节点。一个组织结构节点下组织的是一个子集合的资源,这已经属于数据级权限了。
不同组织结构的用户所能面向的资源集在用户的身份被识别后就已经分开了,但是到底怎么分依赖于资源的存储结构,依赖于不同组织结构的资源在存储层是怎么区分的,是存储在不同的物理地址还是存储在同一个地址并通过附加在资源记录上的组织结构属性来分出逻辑子集。
[该贴被anycmd于2014-11-28 13:49修改过]