0

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

我的管理员过滤器:

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 的生成器制作了脚手架。

4

1 回答 1

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'));
});

auth使用此设置,使用和将您希望只有管理员访问的页面添加到后一个路由组auth.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 );

});

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

我相信这会解决你的问题;)

于 2013-09-09T08:46:23.913 回答