关于权限的思考


这是一个我一直在思考的问题。

关于权限设计

权限设计要考虑的对象类有:

用户:用户不可以隶属于某一个用户,而只可以隶属于某一角色,角色可以隶属于某一角色。

角色:可以看作是对用户的分组,这里可能会遇到一个很现实的问题,就是如果不同角色的用户是不同的属性怎么办呀,也就是在数据库中表现为拥有不周的字段,这时我们应该如何设计数据库的问题。这个难点我还没有很好的解决。

应用模块:通俗地说就是某一页面或某一窗体。权限控制说白了也就是用户对应用模块的某一操作动作的权限。
            在界面层进行控制的地方有两个地方
            1.是在应用模块加载显示时,此时可以进行对数据显示的过滤,增加删除操作按钮的显示控制等。
            2.是在执行动作时,此时主要是再验证一下用户权限的问题 ,不过我在突然感觉是不是还有必要进行这步验证,大家可以讨论。

操作动作:查看(可以分两级,至于为什么可以看下面的分析),修改,增加,删除,审核,反审核等操作。红色的操作的前提是有查看操作的权限。这此操作都是应用模块中的动作。

关于授权:主要是三个方面,授予、拒绝、继承。授权操作的对象可以是关于应用模块的授权,也可以是关于应用模块中操作动作的授权。
    
    其实授权还有另一个意思,就是某用户将其权限赋于另一个用户,这是一个特殊的内容,既有应用模块的特点,也有操作动作的特点。我在这篇文章中叫做另类授权。另类授权可以拆分为两部分分别放到应用模块和操作动作模块,这样操作动作中又增加了一个另类授权操作,而应用模块中也增加了一个另类授权模块。


关于权限数据库设计

1.数据库设计
    用户表:ID,用户名,用户密码,用户角色。(登陆时间等等其也数据)
    角色表:ID,角色名,父角色编号
    应用模块:ID,模块名,模块代码(英文代码,用于在代码中标识模块),模块地址(对于Winform的程序,这里可以是窗体类名),模块参数(起动模块的时要传递的参数,或打开网页时的目标地址等内容),模块分类(区分是不是菜单,前台,还是后台显示等),父模块编号(可以是表示菜单中的树型,也可以是某一页面的子页面)。
    
    关于上面那个不同属性的用户,我们可以设计用户扩展表,用来用户扩展属性,有点复杂。

下面是各关对象类之间的关系表:
    角色与应用模块表:ID,角色编号,模块编号,对模块的授权情况,对各种操作的授权情况(多列)。
    用户与应用模块表:用户默认是继承角色的权限,设计此表可以使系统支持另类授权。ID,应用模块,对模块的授权,对各种操作的授权
    临时授权表(用户于操作对象表):此表是临时授权时的表,主要用于两种情况。
        1.用于某用户对某对象有某些权限,且该用户有另类授权的权限,该用户授权给另一用户代为处理。
        2.有很多操作对象,但该用户只能查看一部分。对于此种情况,设计到这里有点浪费,尤其是对于有大量数据的情况,此时的替代方案是在操作对象中增加一列添加者,将查看操作动作分为两级,一是查看自己增加的,另一级是查看所有的。
    如果去掉临时授权表的设计,也可以对用户与应用模块表中增加一列,对操作对象的参数,也可以达到临时授权的作用。
    
关于权限控制    

    权限的另一个重要方面就是对权限的控制。权限的控制对于应用模块来说主要是作两个方面的工作。
    1.看一下是否有权限,包括对模块的操作,对各种操作动作的判断等。
    2.还有就是对于查看操作动作要求能够构造查询条件(可以是sql语句,也可以是其他的可以转换成sql的语名)。

        

posted on 2007-12-01 11:41  墙外行人  阅读(284)  评论(0编辑  收藏  举报

导航