第十五章:第6节论坛系统(BBS)后台管理权限验证

更新于:2018-02-13 23:10:15

对于一家有一定规模的网站平台,是不可能只有一个管理员的,会有很多人来管理,那后台需要有添加管理员的功能。在写这个功能前,我们还要思考些问题。那就是管理员与管理员之间有没有级别之分,答案是:肯定有!


这就好比一家公司,老总在公司的权利最大,可以招员工,开除员工,吩咐不同的员工做不同的事。假如这家公司的所有员工都去管理一个网站。老总在管理后台的权限应该是最大的,拥有“超级管理员”的身份,只有“超级管理员”才可以添加新管理员进来。老总这位“超级管理员”给客服人员添加(分配)管理员账号,肯定会对客服人员的管理员账号做权限设置,他们只能在后台操作与客服有关的功能(有权限的功能)。老总给财务人员添加管理员账号,也要对其做限制,他们只能操作与财务有关的功能。不可能说,一个小小的客服人员在后台能把公司的钱给转走了(前提假设网站有转账的功能),那岂不是乱套了。


一套程序,只要有会员体系,总免不了会有各种权限制约的功能。对于安全要求比较高的系统程序,安全不仅仅指的程序漏洞,还有功能的权限做的是否安全,是否起到了相互制约、相互隔离的作用。比方说在公司运作中,财务要打钱给其他公司,财务人员计算好以后,必须得经过领导的签字才可以打钱。如果网站系统中也有这样的转账功能,在权限方面也要做到操作与监督分离,同时需要两个管理员去操作转账,这样就会安全的多。


了解了这些,我们的后台操作一个功能,不仅要验证管理员登录状态,还要验证管理员的身份,以及管理员的操作权限。


接下来楠神开始写后台管理员权限分配的功能。思路:


假如公司员工很多,领导不可能一个一个给员工分配工作,肯定会说,“客服”该干什么,“运营”该干什么……员工自己对号入座,自己是客服身份就去做客服该做的工作,是运营就去做运营该做的工作。


结论:每个管理员需要有一管理组归属,每个管理组有一个权限列表。


所以,需要先创建一个管理组表


1)管理组表


1.png


创建管理组表后,对应在common模块model目录下创建管理组表的模型类。


1.png


先添加一个管理组,名称为“超级管理员”。


1.png


获取到这个管理组的ID为1,然后在admin配置文件中,加一个参数“super_group_id”,赋值为1。


1.png


这个参数在后面会用到。作用:id为1的管理组为超级管理组,该组下的管理员即为超级管理员。目前“楠神”这个管理员属于超级管理组。


2)创建权限配置文件


管理组有了,怎么给管理组赋予相应的权限呢?


首先说下,什么是权限?其实就是功能URL。后台的每一个功能都是URL,我们给每一个URL做好编号,一个管理组有哪些权限就把对应的URL编号放入“rules”字段。类似于这样:


1.png


楠神写了一个URL编号的配置文件(当然也可以写到数据库中)


1.png


权限检验的原理:


当管理员要访问URL为“test/action1”,先找到此URL所对应的编号,然后再去此管理员所在组的“rules”字段查看有没有此编号,如果有证明此用户组有这个URL权限,没有就表示此用户组没有权限。


3)权限扩展类


权限的验证后面还有很多,为了规范些,楠神定义了一个权限扩展类,各种权限验证的方法都定义在此类中。


1.png


定义了第一个验证方法“allowRequestAdminUrl”。


介绍:


这个方法主要验证了当前管理员是否有访问某个后台URL的权限。

参数URL为 “控制器/方法名”字符串,没有默认自动获取。


37行代码,楠神为什么对“index控制器”不做权限验证呢?

那是因为每个后台管理员都需要有修改自己资料、查看自己登陆日志的功能。每个管理员都应该有的功能,全部写到“index控制器”中,所以就对“index控制器”的方法不做权限验证了。


有了这个方法,我们就可以对写过的代码做下修改了


①对当前访问的URL做验证

1.png


②对菜单URL做验证

1.png


这样权限的功能就写完了。


4)演示下


1.png

使用“楠神2”登陆后


1.png



“栏目二”的“action6”、“action7”、“action8”菜单都没有显示出来,说明菜单URL验证是成功的。


1.png

直接输入URL请求,“test/action5”楠神2是没有权限访问的,验证也成功了。


1.png

“test/action4”楠神2有权限访问


这节内容到此结束,权限验证功能楠神已写出来了,下节开始讲怎么在程序中分配权限。


本节学习代码》》》