3种权限管理方案

张映 发表于 2010-08-24

分类目录: php

标签:, ,

浏览网站时,有的时候,会告诉你,无权进入一些页面。例如:一些技术性的论坛,刚进去的时候,只能看看贴子,并且只能在一定的区域看,不能发贴等。做电子商务时,电子商务的后台是一个比较大的系统,不同的人进去会看到不同的页面,如果能看到同一个页面,也许允许的操作也不一样,这些机制是怎么实现的呢。下面就个人愚见分析几种情况

一,简单session控制

实现原理和方法:

用户登录后台,输入用户名和密码,对用户的用户名和密码进行验证,验证通过后,可以把用户的一些基本信息放到session里面当用户访问后台的其他页面时,去判断一下session是否存在,并且没有过期。不过,后台管理员权限一样,没有区分

1,后台页面共用的基本类,我们可以在基本类的里加以判断,或者在基本类外面在extends一层,加以判断,去check一下session。

2,直接重写一个check_login.php每个后台页面都包涵这个页面,通过这个页面加以判断,check一下session。

二,菜单控制

实现原理和方法:

菜单控制比简单session控制要高级一点,不光判断用户是否登录,还对用户的权限进行了控制,不同的人看到不同的东西。

1,在显示菜单的地方加以判断,不同的用户显示不同的菜单。这种方法用户虽然看不到菜单,但是可以通过输入url,进入没有显示的菜单页面,前提是用户用户知道url才行。

2,建立一个用户和菜单内容的关系表,把用户所能看到的内容,放到数据库内,当要显示菜单的地方,用数据库进行读取,如果用户是通过输入url进入的话,我们也可以根据用户和url,到关系表中进行查找,如果没有找到的话,就不准许进入,这种方法可以避免上面一种方法的弊端了。

三,页面元素控制

上面说的菜单控制,可以设置权限到页面的级别,但是如果我有这样的需求又怎么办呢,所有的人都可以访问一个页面,一部分可以进行添加操作,一部分人可以进行删除操作,一部分可以进行审核工作。这样的需求,菜单控制很难实现的。现在的权限管理中好多都用的这种方式。例如:一些开源的论坛,cms系统。个人想了一个方法,觉得可以实现页面元素控制。看一下下面的图片。

元素权限控制

元素权限控制

解释一下:

A表,成员组表。这个表里面存的是一个一个组,财务组,开发组,发货组,定单审核组,退货组等。
B表,成员表。这个表里面存的是一个一个成员,张三,财务组。李四,开发组,王五,发货组,王五定单审核组。
C表,元素权限表。这个表里面存的是一个一个虚拟的权限。比如浏览权限,财务查看权限,发货权限,定单审核权限等。
D表,类别和元素权限的关系表,或者是页面和元素权限的关系表。也就是说,一个类别拥有什么权限,或者某个页面拥有什么权限。
E表,是成员组表和D表的关系表。表示这个成员组拥有那些权限,成员组拥有什么权限,表成成员也拥有什么权限。

为了表达清楚我的意思,我把这一套,分成了5张表,可以精减一下,去掉一到二张表。

实现原理和方法:

页面元素控制可以说是菜单控制的更进一步,更细一点了。对页面里面的具体操作也进行了控制。实现原理和菜单控制差不多。

1,和菜单管理一样,在显示菜单的地方,根据用户所在组进行显示。例如:张三,财务组,他进去看能看到财务的菜单,这个菜单下面也许会有很多页面,每个页面会有很多操作,查看一下E表,表找一下这个组能操作的类或者页面。我把这个方法叫做提前做法,就是有就显示,没有不显示。

2,还有一种办法就是加载页面时把页面中的操作都显示出来,在经过统一的接口来把不能操作的选项去掉。这样的话,可以把页面代码和权限代码分开。这样我觉得不至于把代码搞得太复杂。我把这个方法叫做马后炮做法。

上面的三种方法,纯属个人看法,也是开发中的做过的。方法有很多欢迎探讨。



转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/php/983.html

1 条评论

  1. Tiger 留言

    权限管理,我最近从acegi转向ralasafe了。都是开源的,后者学习难度非常低,功能强大。要什么数据就什么数据,完全图形化的配置。