目前权限管理系统不少,但通用、灵活、符合现代企事业单位实际工作需要的不多。现有的权限系统绝大多数都是以模块为核心,而本权限模型将摒弃此类普遍的做法,将以组织机构为核心来进行权限系统的设计,因为这更符合实际的业务需求,也具有很多无法比拟的优点。首先来看以组织机构为核心的权限模型的逻辑结构图:

通过上图你可轻松的设计出相应的数据库结构,而此权限模型体系所具有的优点如下:

1、以组织机构为核心进行权限的管理和分配等,更加符合现代企事业的实际需要,包括多机构、组织、部门、岗位、人员等。

2、实现一人对应多个组织实体、岗位的同时,还能对帐号进行统一的登录、验证和授权。

3、支持功能权限、动作权限、数据权限、管理权限等。

4、权限继承,某个组织的所有下属组织均能继承本组织的权限。

5、实现分级授权,某个组织可对下属组织实现权限范围内的分级权限管理,对于组织机构层次很多的企业或政府机构来说特别适用,这可通过上图中的权限继承来实现。

6、通常情况下通过角色对组织进行权限分配,在这里,组织本身其实也同时充当了“用户组”的职责,而且在操作上还更加方便;当然,还可直接对某个特定组织绕开角色单独进行权限的分配,例如可对某个组织追加或禁用具有的角色权限范围之外的一些特定权限。

7、实现组织回收站功能,必要时可进行物理删除和恢复,做到系统中有后悔药可用。

8、美观的界面,出色的性能与多系统、多数据库的支持。

上述的权限模型体系,还应有如下考量:

1、组织机构按特定的规则创建,例如组织下可包含组织、机构、 部门、岗位、人员,但部门下只能包含子部门、岗位和人员,而岗位下只能是人员等等;同时需对数据库表进行优化并适当冗余,保证每个组织可快速查询所包含的下属组织及类型。

2、通过人员成员和用户相关联,人员成员可分配至组织下的任意节点,这在实现了一人多岗的同时,也实现了统一的用户基本资料管理和权限分配。每个用户有且只能有一个主要岗位,其他岗位均为从属岗位,对人员成员的信息管理将自动更新到人员成员管理的用户上。

3、在组织下进行角色的关联, 通过路径就可快速查询到某个组织所属的角色及继承的角色,管理权限和数据权限的实现思想和此类似。

4、通过人员成员和权限的管理,可在角色范围外对用户的权限进行分配和管理,这有助于大大增加系统在权限控制上的灵活性,也有助于实现真正意义上的分级授权。

5、管理权限,本质上是一种数据权限,指的是某个组织下的人员成员可以管理的组织的业务数据,管理权限的目标是实现跨部门协作,管理权限可脱离本组织所对应的组织机构树节点。通过在业务系统中增加人员成员的完整路径字段,这样每个用户登录后均能通过自身管理的组织完整路径查询到所管理的下属组织的业务数据。同时完整路径字段应由一系列唯一的ID值组合而成,需要保证这个完整路径的唯一性并尽量做到不变性;同时提供相应的事件机制,保证即使完整路径有修改时,也能通知业务系统进行相应的处理,有效保证业务数据和权限模型数据之间的一致性。

6、至于数据权限,可通过指定自定义的查询过滤条件等,为每个角色和人员指定特殊的数据权限;动作权限和数据权限只能对应到具体的功能权限而不能独立存在。

7、本权限模型实现了多个业务系统共用一个数据库数据,并保证管理上互不交叉;同时可配置表的个性化名称;支持扩展字段等个性化功能,为二次开发用户提供必要的灵活性和个性化支持接口。

8、在性能上,首先需要考虑的是数据库设计的适当冗余,例如对组织机构增加了路径字段,这个字段的值需要根据组织所在的上下级关系生成,业务系统中可通过存储该字段的值实现高性能的数据权限和管理权限功能;其次在界面上对树形结构、网格数据等尽量使用服务器端的延迟查询和分页处理,在大数据量下可大大提高系统的响应速度;最后还要对不经常变化的数据进行适当的缓存处理。

9、本权限模型的实现难点主要在业务规则的标准化和冗余字段数据进行一致性的维护上。例如前面提到的路径数据,以及状态字段等(如当禁用了某个组织后,毫无疑问也需要禁用所有下属的组织)。对于多数据库支持,还需考虑不同数据库之间SQL语法和特性上的差异。

10、本权限模型应能提供必要的权限控制表达式解析组件,这有助于提供终端用户使用本系统时的灵活性和易用性。例如可在界面配置只能查询自身数据、或父组织数据、或指定完整路径的业务数据过滤表达式等,而后台能自动把这些表达式解析成 SQL 表达式或 LINQ 表达式,对特定的业务数据进行过滤查询。

11、本权限模型还应提供功能完备、简单易用的 API 接口和必要的界面组件,例如可显示指定ID的所有下属组织机构树等界面组件,这样只需简单配置下ID就能显示所有下属组织,开发人员无需关心底层的数据结构,可大大提高业务系统的开发速度。

近期将提供本权限模型的预览版 Demo。

    附 - 权限模型+流程专家:http://pjdemo.yellbuy.com/

附 - 代码工厂 MVC 插件 Demo 地址:http://mvcdemo.yellbuy.com/

附 - 代码工厂 WPF 插件 介绍:http://www.cnblogs.com/gyche/archive/2012/06/02/2531121.html

附件下载一 - 代码工厂:YbSoftwareFactory V2 下载,运行环境-.NET 4.0。

附件下载二 - 代码工厂 WinForm 插件 Demo:YbRapidSolution for WinForm Demo下载:运行环境-.NET 4.0。服务层部署在 Internet 上,,可直接运行;如需在本地部署,除了安装数据库外,就是修改配置文件,这里不再详述。

YbSoftwareFactory 代码生成插件【十七】:先进的权限模型体系设计的更多相关文章

  1. YbSoftwareFactory 代码生成插件【十四】:通过 DynamicLinq 简单实现 N-Tier 部署下的服务端数据库通用分页

    YbSoftwareFactory 的 YbRapidSolution for WinForm 插件使用CSLA.NET作为业务层,CSLA.NET的一个强大的特性是支持 N-Tiers 部署.只需非 ...

  2. YbSoftwareFactory 代码生成插件【二十一】:Web Api及MVC性能提升的几个小技巧

    最近在进行 YbSoftwareFactory 的流程功能升级,目前已经基本完成,现将用到的一些关于 Web Api 及 MVC 性能提升的一些小技巧进行了总结,这些技巧在使用.配置上也相当的简单,但 ...

  3. YbSoftwareFactory 代码生成插件【二十】:DynamicObject的序列化

    DynamicObject 是 .NET 4.0以来才支持的一个类,但该类在.NET 4.0下未被标记为[Serializable] Attribute,而在.NET 4.5下则被标记了[Serial ...

  4. YbSoftwareFactory 代码生成插件【十九】:实体类配合数据库表字段进行属性扩展的小技巧

    实体类通常需要和数据库表进行了ORM映射,当你需要添加新的属性时,往往同时也需要在数据库中添加相应的字段并配置好映射关系,同时可能还需对数据访问组件进行重新编译和部署才能有效.而当你开始设计一个通用数 ...

  5. YbSoftwareFactory 代码生成插件【二十三】:集成强大的公文流转系统

    今天有空更新博客才发现快一年没有写博客了,不得不感叹时间过得真快.过去的一年确实也挺忙的,在此祝各位博友们新的一年工作顺利.权限模型在过去一年进行了不少的升级,主要集成了公文流转系统.多家手机短信接口 ...

  6. YbSoftwareFactory 代码生成插件【十八】:树形结构下的查询排序的数据库设计

    树形结构的排序在中国特色下十分普遍也非常重要,例如常说的五大班子,党委>人大>政府>政协>纪委,每个班子下还有部门,岗位,人员,最终排列的顺序通常需要按权力大小.重要性等进行排 ...

  7. YbSoftwareFactory 代码生成插件【十五】:Show 一下最新的动态属性扩展功能与键值生成器功能

    YbSoftwareFactory 各种插件的基础类库中又新增了两个方便易用的功能:动态属性扩展与键值生成器,本章将分别介绍这两个非常方便的组件. 一.动态属性扩展 在实际的开发过程中,你肯定会遇到数 ...

  8. YbSoftwareFactory 代码生成插件【十三】:Web API 的安全性

    ASP.NET Web API 可非常方便地创建基于 HTTP 的 Services,这些服务可以非常方便地被几乎任何形式的平台和客户端(如浏览器.Windows客户端.Android设备.IOS等) ...

  9. YbSoftwareFactory 代码生成插件【二十五】:Razor视图中以全局方式调用后台方法输出页面代码的三种方法

    上一篇介绍了 MVC中实现动态自定义路由 的实现,本篇将介绍Razor视图中以全局方式调用后台方法输出页面代码的三种方法. 框架最新的升级实现了一个页面部件功能,其实就是通过后台方法查询数据库内容,把 ...

随机推荐

  1. 【emWin】例程三:显示方向的切换

    实验指导书及代码包下载: http://pan.baidu.com/s/1pK9o0xP

  2. ASM FailGroup验证

    ASM-FailGroup验证 一.FailGroup有效性验证 创建DiskGroup,在Redundancy选项 High:至少3块disk,至少3个failgroup,每一个extent存在1主 ...

  3. php变量和数组大小限制

    前言:shopnc在默认拼接sql的时候会带上limit 1000 那么问题就来了,如果在使用系统的封装的方法,但是如果你没有带上->limit(false)就完蛋了 那么问题来了,在判断时候, ...

  4. Python 随机数生成总结

    random.uniform(a, b),返回[a,b]之间的浮点数 random.randint(a, b),返回[a,b]之间的整数 random.randrange([start], stop[ ...

  5. 使用Java开发高性能网站需要关注的那些事儿

    无论大型门户网站还是中小型垂直类型网站都会对稳定性.性能和可伸缩性有所追求.大型网站的技术经验分享值得我们去学习和借用,但落实到更具体的实践上并不是对所有网站可以适用,其他语言开发的网站我还不敢多说, ...

  6. Enum

    1.定义时使用enum关键字定义. 2.隐式继承了java.lang.Enum类,所以不能再继承其他类了. 3.隐式的final修饰符,所以不能被其他类继承. package enumTest; pu ...

  7. CodeForces 676D代码 哪里有问题呢?

    题目: http://codeforces.com/problemset/problem/676/D code: #include <stdio.h> #define MAXN 1001 ...

  8. 源码网站(msdn.itellyou.cn) good

    verysource 100万源码http://www.verysource.com/category/delphi-vcl/ MSDN DOWNLOADhttp://msdn.itellyou.cn ...

  9. 微信小程序-WXSS

    WXSS(WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式. WXSS 用来决定 WXML 的组件应该怎么显示. 为了适应广大的前端开发者,我们的 WXSS 具有 ...

  10. Method Swizzling

    学习博客: http://www.cocoachina.com/ios/20160121/15076.html (这个作者太牛了,写了我一直想知道的类簇的swizz方法) 一. 一般的swizz 先给 ...