3.2auth权限控制之url参数认证功能

浏览:4819 发布日期:2014/01/24 分类:技术分享
这个功能应该是3.2之后才有的吧,3.1的auth类并没有,简而言之说明一下这个特性:
假设我们有如下权限验证代码:$auth = new \Think\Auth();
$check = $auth->check("home", 1);
看上去很简单不是吗,检测id为1的用户权限中是否有名为 home 的授权。

但是我们再看看数据库中规则name是什么样子的:

name明明是"home?uid=1"嘛,这是啥意思呢?

意思是,当你检测 name 授权时,必须通过post或者get传入uid=1的参数,才能通过验证。

举个栗子:<?php
// 本类由系统自动生成,仅供测试用途
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
    public function indexAction(){
        $auth = new \Think\Auth();
        $check = $auth->check("home", 1);
        dump($check);
    }
}
这是Home模块下的Index/index方法,那么我们直接这样访问
http://localhost/Home/Index/index 能通过验证吗?答案是不能。

但是通过
http://localhost/Home/Index/index?uid=1 或者
http://localhost/Home/Index/index/uid/1
就通过了。

另外3.2的auth类有两个问题:
1.用户表主键字段名必须是uid,觉得不方便的可以参考3.1的auth类中的getUserInfo()方法,覆盖3.2的方法,个人觉得3.2这种设定很蛋疼,估计是迎合ot才写死的。
2.给auth_rule表增加一个type字段吧,否则权限验证会失败,这又涉及到一个Model类的bug,很纠结,反正我是将auth类修改了,type完全不知道有什么用。
最佳答案
评论( 相关
后面还有条评论,点击查看>>