Thinkphp权限控制类中_initialize()的调用原理

发布时间:2020-06-10 03:09:32 作者:七彩极
来源:网络 阅读:2773

在使用权限认证的时候,我们会这样编写权限类:


namespace Common\Common\Controller;
use Think\Controller;
use Think\Auth;

class AuthController extends Controller{
                protected function _initialize(){
                        //获取登陆信息
                        $uid = session('uid');
                        
                        if(empty($uid)){
                                $this->error('请先登陆!',U('Login/index'),1);
                        }
                        
                        //如果是管理员,则不用验证权限了
                         if(session('gids') == '1'){
                                return true;
                        } 
                        
                        //验证权限
                         $auth = new Auth();
                        if(!$auth->check(MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME,$uid)){
                                $this->error('没有权限','',1);
                        } 
                }
}


当我们初始化权限类的时候,就会自动调用_initialize()函数。。。

但是,_initialize()并不是php原生的初始化自动调用的函数名,而__construct()才是。

我们再打开权限类继承的Controller类,就有如下代码:
public function __construct() {
        Hook::listen('action_begin',$this->config);
        //实例化视图类
        $this->view     = Think::instance('Think\View');
        //控制器初始化
        if(method_exists($this,'_initialize'))
            $this->_initialize();
    }

仔细理解:Controller类中也没有_initialize函数,而是在权限类中自定义的这样一个函数。

当我们初始化权限类的时候,同时也就初始化了Controller类,于是触发了__construct,在__construct中就判断是否存在_initialize函数,如果存在,则调用,不存在,则忽略。。。
所以才会有初始化权限类的时候,自动调用_initialize函数!


原创文章:http://bbs.51cto.com/thread-1501917-1.html 欢迎前来讨论!

推荐阅读:
  1. Django认证系统user对象实现过程解析
  2. 使用vue-router beforEach实现判断用户登录跳转路由筛选功能

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php thinkphp thinkph

上一篇:商业化IM 客户端设计---Message模型

下一篇:WIN 2012文件服务器迁移(基于WSMT的FSRM)

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》