初学ThinkPHP,根据网上的教程折腾了auth类权限控制,使用起来非常方便,不得不说ThinkPHP的编程思想很好,值得仔细的去学习。这里我就将我跟着教程学的Auth类使用方法分享一下。
这里项目里有个Member控制器,用来显示后台所有会员信息,这个页面显然只有管理员才有权限浏览,因此我们的目的是在访问Member控制器的Index方法时,进行权限判断。
建立AuthController.class.php权限控制器继承类
考虑到权限控制是覆盖整个项目,因此新建立的AuthController.class.php放置在Common模块目录下的Controller目录里,即路径为Common/Controller/AuthController.class.php。写入以下代码:
1 |
|
改写member控制器MemberController.class.php
因为需要应用到权限控制器,因此我们需要将导入的别名从Think\Controller换成我们的Common\Controller\AuthController,并且将继承的Controller父类换成我们自己的AuthController类。
1 |
|
建立Login控制器LoginController.class.php
这里我们建立登录控制器,首先判断是否POST提交数据,如果不是,显示登录表单。如果有POST提交的数据,那么将提交的输入作为查询条件,从MySQL的admin表中查询相关用户信息,返回给$userinfo数组。判断$userinfo数组是否为空,如果为空则提示“用户名密码错误”。如果不是,将用户信息写入session,提示“登录成功”并跳转到Member控制器的Index方法页进行权限认证。代码如下
1 |
|
修改刚刚建立的AuthController权限控制器并写入权限控制代码
这里由于权限控制类无需对外访问,因此使用protected申明,建立_initialize方法,该方法会在该类实例化时自动运行,相当于构造函数。
在_initialize方法中写入权限控制代码,首先获取session中的用户信息,判断如果是超级管理员,则返回true,这时会中止执行函数,略过下面的代码。如果不是超级管理员,则需要进行权限判断。
首先new一个新的Auth()对象,使用该对象的check方法,check方法参中,第一个参数是规则(这里是url模式规则,格式为模块/控制器/方法,如Home/Index/index),第二个是uid,这里调用的是之前从数据库里读取的AdminID。然后根据Auth类自带的三张表进行权限控制
这里解释一下三张表的含义:
- think_auth_rule:规则表,这里存放的是每一条规则,如Home/Index/index对应某个用户组ID的可访问权限
- think_auth_group:用户组表, 这里存放的是每个用户组对应的规则ID
- think_auth_group_access:用户组明细表,这里存放的是我们自己的admin表里的管理员id对应的用户组
最终代码如下:
1 |
|
这样我们就完成了一个简单的Auth类使用。