基于操作+角色的授权方案(设计思路篇)

微软的forms授权是基于角色和用户的,这样可以很容易的限定那些用户,角色可以访问某个页面目录的权限。但是正如需求工程讨论的,有时候客户很不容易满足,现在我的客户要求系统允许他们自己可以定义角色可以做那些操作,也就是说角色可以做什么是可定义的用户随时可以修改的,这样如果使用微软的forms认证就实现不了了,我们不可能在用户每次自定义了角色的操作权限之后,都去修改一次web.config中的定义,怎么办?

客户有提出需求的权利,我们有满足客户需求的智慧,前提是客户愿意为自己的需求付出银子,呵呵。角色可以做的操作是可定义的,所以我们需要在数据库中存储角色,和角色可以做的操作,以及用户属于那个资源上的那个角色。前一句话中引出了一个新的概念“资源”,它可以是CMS内容管理系统中的频道,也可以是论坛中的版面,就是用户是“A频道”的“管理员”,但是不是“B频道”的管理员中的“A频道”,“B频道”。我们可以据以上描述设计概念模型如下:
 

(由于我现在正在做一个论坛的项目,所以上面的表都有Forum的前缀,_tab是我们规范中的后缀)
以上模型中定义了角色,操作,角色操作定义关系,以及版面用户角色对应关系,通过上面的模型我们就可以实现用户要求的自定义角色可以做那些操作的需求了。

有了数据库的概念模型,还是不够的,我们还需要设计一下,让我们这套授权方案的使用和微软的forms认证一样方便。Forms认证可以通过web.config的定义角色页面的访问权限,我们这套授权方案,肯定是不能这样做的,因为我们的角色可以做什么是可定义的。但是我们的权限方案中也有不变的元素,那就是Action---操作,而每一个页面中有那些操作,这一点也是一定的,所以我们可以给页面指定其操作,在用户访问时再根据用户属于的角色来得到角色可以执行的操作来判断当前用户是否可以进入页面,如果可以进入再在实际操作中判断用户是否有在某个资源上执行的权限。

以上内容说了操作+角色授权方案的实现思路,由于时间关系,下一随笔再和大家讨论这套方案如何具体实现。

基于操作+角色的授权方案实现篇

原文地址:https://www.cnblogs.com/yukaizhao/p/user_role_action_permission_2008.html