也谈权限管理 - 引子

 权限,但凡做应用软件几乎没有不用到的,却迟至今日才来仔细整理这方面的思路,惭愧得紧哪。

昨天做了点功课:
 1、搜了一下网上相关的文档
 2、瞄了一眼JAAS资料
 3、瞄了一样Acegi Security的文档

总体感觉,都是偏技术方面的东西,与应用的结合不算很紧密。

尝试梳理一下这方面的思路,很乱,一时理不清楚。做了个思维图,先放在这里: https://p-blog.youkuaiyun.com/images/p_blog_youkuaiyun.com/oldcrane/EntryImages/20080717/privilege-2008-07-16.gif

总的来说,我是想从应用的角度、实施的角度来看权限这个问题:

 1、权限这个概念的定义是什么,它的范畴、边界是什么
    权限与业务逻辑的关系是什么?两者是否会重叠?
    应用开发中经常会用到工作流,工作流和权限之间,又会发生什么样的关系?

 2、权限数据管理
    权限的描述,可以抽象为 who, what, how,即 谁,对什么对象,能进行什么操作
    对此,在数据描述上,有不同的方式。但不管如何处理,我们一定可以将涉及的数据分为两大类。
    第一类,可称之为“定义数据”,主要包括:系统中有哪些对象,对每个对象有哪些操作。这类数据一般由开发人员或者部署人员来管理。在需求不发生变动的情况下,不会变化。
    第二类,可称之为“授权数据”,可以包括:权限的拥用者或主体,其所拥有的权限。这类数据数据,在系统运行过程中经常会发生变动,其变动不需要开发人员和部署人员的参与,一般由用户方的系统管理员完成。
    由于两类数据变动的频率、数据管理的负责人不同,数据管理的需求不同。
    对于“定义数据”,重点保障权限管理的灵活性、可配置性,保障用户的权限管理需求可以得到满足,并考虑可预见的权限管理变更需求,提供合理的数据接口。
    对于“授权数据”,重点则是逻辑清晰,操作简捷。需要从业务的角度来描述权限,权限判断逻辑清晰易懂,常见的人员调整、权限设置不会导致大量的数据操作(人工操作)。
    这两类数据,分别如何描述,分别会产生多大的数据量?
    这两类数据的边界如和确定?

    程序=数据结构+算法
    就权限管理而言,哪些信息应当放在数据中,哪些信息可以固化在程序中,是否有一定的规律可循?

    发散一下。
    考虑一下EJB的概念,把开发和部署,明确地分成了两个阶段。部署阶段的工作,不只限于配配服务器端口、数据库连接池而已。前端通过面向接口的方式调用后台服务,而后台服务的具体实现,是通过部署环境来完成配置的。也就是说,在部署的时候,才将各个模块组装成为一个完成的系统。Spring等轻量级的框架,在这一点上与EJB是一致的。
    这对于开发过程、开发模式是有影响的,我们需要去考虑,把哪些交给开发人员来决定,哪些又交给部署人员来决定。(当然,不考虑也是一种选择)

 3、领域模型和最佳实践
    对于权限管理这一点,一方面是个系统都需要考虑,另一方面,每个系统权限管理方面的需求又各不相同。
    这样的话,是否可以找到某些常见的领域,对各个领域提供不同的最佳实践呢?
    从设计的角度,则是在不同的层面上,提供不同的复用水平。


    继续做功课。
    要向马未都先生学习,要坚持。
ps:
    昨天简单看了一下Acegi Security的文档,提供两种方式截取请求,进行权限校验。一是filter,一是method level的AOP拦截。感觉合理,适于不同颗粒度的权限控制需求选择不同的拦截方式。不过,在具体项目中,把哪些逻辑作为权限,这个问题依然存在,属于最佳实践的问题。继续做功课,看文档。
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值