Laravel 4过滤和查看作曲家

时间:2013-08-05 23:08:36

标签: php laravel laravel-4

我自己创建了一个过滤器和一个View作曲家。首先,这里是代码:

我的管理员过滤器:

Route::filter('admin', function()
{
    if (Auth::check()) 
    {
        $roles = Auth::user()->role;

        if ($roles == '5') 
        {
            return Redirect::to('news/index')->with('roles', $roles);
        } 
    } 
    else 
    {
        return View::make('errors.401');
    }
});

和我的视图作曲家(它在global.php中):

// View composer
View::composer(array('common.menu_addition','common.base_errors'), function($view)
{
    if (Auth::check()) 
    {
        $roles = Auth::user()->type;
        if ($roles == '5') 
        {
            $view->with('roles', $roles);
        } 
        else 
        {
            $view;
        }
    } 
    else 
    {
        return Redirect::to('news/index');
    }
});

所以它不起作用。我想使用我的管理员帐户访问某些页面(其角色等于5,数据库中的列'角色')。我在我的路线中创建了一个小组,但是当我尝试访问某个页面时,它会将我重定向到我的新闻/索引页面。

如何设置它以使任何需要管理员角色的页面可见?

如果有帮助,我还使用Jeffrey Way的发电机来制作脚手架。

1 个答案:

答案 0 :(得分:2)

我在我的应用程序中做了一些非常相似的事情,但经过一些试验和错误后,我认为验证用户和管理员的最佳方法是使用两个单独的过滤器。所以,这就是我的工作:

我有一个auth过滤器,只需将用户记录在 -

Route::filter('auth', function() {
    if (Auth::guest()) return Redirect::to('login');
});

除此之外,我还有一个auth.admin过滤器,用于检查登录的用户角色:

Route::filter('auth.admin', function() {
    if(Auth::user()->userprofile->security_level < 4) {
        return Redirect::route('projects.home');
    }
});

要记住的一个警告是,不要在路线中使用独立的auth.admin过滤器。当用户未登录时将抛出错误。您可以执行以下操作:

Route::group(array('before' => 'auth'), function() {
    Route::get('user', array('as' => 'user.home', 'uses' => 'UsersController@index'));});
}

Route::group(array('before' => 'auth|auth.admin'), function() {
    Route::get('user/create', array('as' => 'user.create', 'uses' => 'UsersController@create'));
});

使用此设置,添加您只希望管理员使用authauth.admin访问后一个路由组的页面。

现在,通过此设置,您无需在作曲家中检查逻辑。理想情况下,您的路由(或您的控制器,基于您的参数)应该处理您的路由逻辑。

你可以像这样重写你的作曲家:

View::composer( array( 'common.menu_addition','common.base_errors' ), function( $view ) {

    // get all categories using the category model
    $categories = Category::all();
    $view->with( 'categories', $categories );

});

作曲家用于传递同一组数据或为一组视图执行相同的任务集。

我相信这会让你感到厌烦;)