深入讨论通用权限组件的理论和设计实现。
权限
作者:johnnylzb
发表时间:2008年02月03日 15:49
回复
原贴网址:
http://www.jdon.com/jivejdon/thread/33471.html
本人最近正在为公司的多个项目(包括未来项目)做通用的权限组件,在本论坛上看到”dunel”大侠的一个帖子 http://www.jdon.com/jivejdon/thread/13450.html,然后才注册并发表此 话题,欢迎大家耐心阅读并指正。
目前已经发布了一个版本并供几个项目使用,先简单介绍一下组件的情况:
1.模式:建立在RBAC理论技术上的权限模式
2.技术:是以Java编写的一个组件(计划在下一个版本做成一个框架)
3.结构:包括两部分: (A)权限配置管理平台,一个Web应用(即一个war包),用于注册受控资源,管理角色,和授权(把角色指派给宿主系统的用户),本平台是可选的 (B)权限服务组件,一个嵌入式组件(即一个jar包),提供访问控制服务和权限配置服务(后者供宿主系统通过接口调用实现权限配置管理,可以代替权限配置管理平台) 4.实现机制:权限相关数据与宿主系统的数据逻辑上式独立的,宿主系统通过嵌入权限组件,本地调用组件提供的相关服务接口实现权限配置管理和访问控制,组件提供四种服务: (A)授权服务:用户访问宿主系统的受控资源时,宿主系统把用户ID和被访问资源ID传递到授权服务接口,授权服务接口返回是否可以访问的结果信息,宿主系统可以一次加载用户的所有权限信息,也可以在每次用户访问时才调用授权服务接口。 (B)实体管理服务:提供受控资源(实体)的增、删、改、查等管理服务。 (C)角色管理服务:提供角色的增、删改、查管理服务和为角色配置受控资源的服务 (D)授权管理服务:提供为宿主系统用户指派、移除角色的服务。 宿主系统可以把UI相关的实体名以URI来注册,权限组件提供默认的Filter进行拦截,对API的实体名以API对应的方法名的全限定名进行注册,权限组件提供默认的Interceptor以AOP的方式进行拦截,这样,宿主系统就不需要在业务层和页面层编写与权限控制相关的代码,权限这个功能编程了一个可以切入和移除的Aspect。 5.功能范围:目前只能控制功能权限,数据权限控制还没实现。
|