【问题标题】:Laravel base controller method to call a filterLaravel 基本控制器方法来调用过滤器
【发布时间】:2016-05-11 15:24:12
【问题描述】:

A 在使用 Laravel 3 时遇到问题,我需要使用这个 laravel 版本,因为这是我公司的 laravel 认证版本。

所以,我想在 base_controller 中实现一个受保护的方法,以便在我的所有控制器中使用此方法。

然后我实现了下面的代码:

protected function verifyLoggedUser( $module, $action ) {
        $result = false;
        //logical to validate user permissions
        if( !$result )
            return $this->filter('before', 'profileValidate');
        else
            return $result;
}

在我的控制器中,我调用此方法来验证登录的用户权限,然后我需要当权限为 false 时,基本控制器调用过滤器 profileValidate,该过滤器会将用户重定向到某个路由。

我这样实现log的结果是:

    Laravel\Routing\Filter_Collection Object ( 
[filters] => Array ( [0] => profileValidate ) [parameters] => [only] => Array ( ) 
[except] => Array ( ) [methods] => Array ( ) )

在我的过滤器中,我有一个重定向到某些路由,但没有工作并且没有显示任何错误!

在我的实现开始时,我尝试将用户重定向到基本控制器内的某个页面,但它不起作用,因为要工作我也需要在我的父控制器中返回,那么这是一个问题,因为这个验证必须在我的方法实现开始时进行,并且返回必须在方法结束时。

你能帮我吗?谢谢!

【问题讨论】:

  • 如何获取登录用户的个人资料?
  • 记录的用户数据在会话中,我在会话中查看用户必须访问的模块和操作并返回 $result 变量中设置的 true 或 false。
  • 如果我理解得很好,您需要应用该功能是使用 $result 来检查用户配置文件,然后转到预期的页面,对吧?
  • 是的,注释 //logical .. 是订阅我的逻辑,逻辑设置 $result 变量为真或假...如果为假,我需要重定向到 /login 路由,如果为真, 只返回一个布尔值或 void(0);了解我吗?
  • 好的,知道了,$module 和 $action 变量我猜是通过 URL 来的,对吧?

标签: php laravel


【解决方案1】:

您可以直接在传递参数的路由上使用过滤器进行过滤,设置角色或角色可以访问该部分,如下所示:

Route::group(array('before' => 'verifyLoggedUser:admin,action'), function()
{
    Route::get('panel', 'someController@action');    
    Route::get('dashboard','someController@otherAction');
});

过滤器可以通过这种方式获取此参数:

Route::filter('filter', function($route, $request, $module, $action)
{
    $result = false;
    //logical to validate user permissions
    if( !$result )
        return $this->filter('before', 'profileValidate');
    else
        return $result;
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 2014-09-23
    相关资源
    最近更新 更多