PHP/Kohana -避免重复代码来检查用户是否登录


PHP/Kohana - avoiding repeating code to check if a user is logged in

我是一个PHP/Kohana应用程序开发的新手。

在我正在开发的web应用程序中,每当一个新的请求来到控制器时,我都需要检查用户是否已登录,或者他是否有足够的权限来提交他所请求的操作。由于我的应用程序具有不同类别的成员(具有不同的权限程度),因此每个控制器方法最终都具有大量if/else分支。该代码在其他控制器方法中也会重复。

是否有任何建议的方法来集中这些调用并避免代码重复?我的意思是唯一的方法来实现这一点,通过编写一个方法来包含所有的用户会话代码?还是我遗漏了任何已经处理这种情况的PHP/Kohana的功能?

如:-

if (Auth::instance()->logged_in('commentator')) {
// do something here.
}
else if (Auth:instance()->logged_in('admin')){
// do something here.
}
else if (Auth:instance()->logged_in('reviewer')){
// do something here.
} 

创建一个名为Controller_Authenticated的控制器,代码如下:

protected $login_level;
public function before()
{
    parent::before();
    if (Auth::instance()->logged_in('commentator')) {
        $this->login_level = 'commentator';
    }
    elseif (Auth:instance()->logged_in('admin')){
        $this->login_level = 'admin';
    }
    elseif (Auth:instance()->logged_in('reviewer')){
        $this->login_level = 'reviewer';
    }
    else {
        // Redirect to login page here, or display a "you are not logged in" message
    }
}

然后,让您的其他控制器扩展Controller_Authenticated而不仅仅是Controller。然后您可以检查parent::$login_level的值,看看这是哪种用户。

这样,所有的登录检查代码都在一个地方,并且在控制器加载时(在动作被调用之前)自动完成对用户类型的检查。

Kohana文档几乎完全有这个使用before方法处理登录内容的示例。