权限系统是否要独立于应用系统进行设计一直存在争论,通用的权限成指数的提升了系统的复杂程度,同时执行也影响了系统的执行效率。可是一旦设计完成一个通用的权限系统,能够用于多个项目,大大节省了成本。总结就是一句,为一个项目设计一个权限控制系统是正确的,通用只是为了方便后面项目的重用,节省后续项目的成本,固然前期须要投入了。设计
权限系统通常分为功能权限、数据权限、字段权限三种,最简单也是最容易设计成通用的就是功能权限。权限系统的设计说简单也简单,就是能知足当主体(用户)要操做(访问)某个资源(数据)时,去检查下用户是否登记过容许访问这个数据了,最简单地可能只须要一张表格就能完成。对象
功能权限blog
RBAC(Role-Based Access Control)一般应用于功能权限,数据权限和字段权限一般直接与User关联。功能权限的常规设计思路就是用户<->角色<->模块(功能)两两关联,当模块特别多时每每就不给角色直接赋予可访问哪些模块,而是给几个可访问模块的列表,这些列表中包含了一些模块,一些系统称之为许可权列表(Permission List)。后面设计功能权限时将会加入许可权列表的概念,以适应复杂的项目。ip
数据权限资源
数据权限一般要依据规则设置,其核心就是如何设计合理的规则,规则主要包含与、或、非、异或、包含于等逻辑关系,然而关系谓词左边的对象和右边的筛选条件根据目标系统的不一样也不一样,看下图权限控制
若是不怕麻烦能够用数据字典对“员工ID”、“ShipAddress”再进行管理,这样这套数据权限管理就能够通用了。我的以为这样作的意义不大,这些要判断的对象在系统上线前基本上就定义好了,用一个XML配置这些项就能够了。io
字段权限效率
字段权限是对功能权限另外一个维度的扩展,通常只管控到哪些字段能不能看,也有系统存在某些用户对某个字段能改,某些不能够,主要看管控的粒度。字段权限的控制采用反向受权(默认都容许,被记录的是不容许访问的)比较好。字段权限和功能权限的设计相似,只要用表记录下来就好,系统有哪些字段能够经过反射方式得到。扩展
后续将对三个权限分别进行设计,最终作成一个完整的权限系统。sed