UAC , 也谈权限设计
UAC(用户帐户控制,这里非指Vista/win7中的UAC,不过意义也差不多)的简要设计包括用户身份认证和权限系统设计。
身份认证:即为确定使用者的身份,如访客、注册用户、管理员、机器人抑或打酱油的黑客。通常使用用户名、密码口令来确认,确认后保存其身份,如SESSION,该步骤是权限认证的前提,如果未能认证身份,通常会给予一个低级模拟身份,如访客。身份认证是系统访问的基本策略,在没有通过身份认证的行为操作是不应让权限来控制流程的。例如:一个未登录用户试图去访问会员中心,我们通常会提醒他未登录,然后跳转到登录页面,这个流程与权限无关。
权限设计:权限设计的目的在于控制用户的行为和可支配资源。通常的做法是基于角色的权限设计。角色即为拥有若干权限细节的集合。基本的设计例如:
这种设计过于简单, 如果编辑A临时有事,需要编辑B帮A发表一篇新闻,但B没有这个权限,怎么办?为B赋一个A的角色?新建一个包含该权限的角色赋给B?如果类似事情经常发生呢?这些方法都不太合适。(不要给我说把A的帐号先借给B用,虽然确有这么做的)那么就有了下面的设计:
除了角色和用户、行为互相关联外,新增用户和行为的直接关联,该关联之记录角色中没有需要添加的对应关系或者角色中拥有却需要去除的对应关系。该设计方法可满足大多数系统对行为控制的需要。可是到此我们还没有对操作者的可支配资源进行管理,例如A和B同为新闻编辑,但A只能编辑北京的咨询,而B只能编辑上海的咨询,怎么办?如此对资源的管理是必不可少的。其实到此我们可以根据行为权限的设计方法来类比:
问题:资源不像行为可以遍历索取,资源作为实体一般数量都会非常庞大,分类众多,只资源库的建立就让人望而生畏,那么如何做呢?如:
因为行为操作的对象资源单一而且有针对性,规则建立也相对容易,这样就会轻便许多。当然有些复杂的业务流程和需求会要求许多繁杂的控制规则和设计方法,这里就不赘述了。
权限设计还是以适度为宜,避免过于简单或复杂。
大体的设计思路成型了,那么具体实施步骤如何呢?
身份认证:那就是认证和身份销毁了,常见的创建SESSION和销毁SESSION。
权限设计:授权过程 和 认证过程,授权分为角色授权、用户授权,用户角色分配,认证则分为角色权限集认证、用户角色集认证、组合认证、资源访问规则认证确认过程。
备注:“基于角色”的说法大多是在使用者的立场上来提,具体到数据设计、编码还是基于具体行为操作,角色反而成了一种行为集合的组织方式





浙公网安备 33010602011771号