2013-08-05 3 views
0

Я создал фильтр и композитор вида. Прежде всего здесь коды:Фильтры Laravel 4 и композиции для просмотра

мой админ фильтр:

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, роль столбца в базе данных). Я сделал группу на своих маршрутах, но когда я пытаюсь получить доступ к странице, она перенаправляет меня на мою страницу новостей/индексов.

Как я могу установить его для создания любой страницы, для которой требуется роль администратора?

Я также использовал генератор Джеффри Пути, чтобы сделать эшафот, если это поможет.

ответ

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' => '[email protected]'));}); 
} 

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

С помощью этой установки, добавьте страницы, которые вы хотите только ваш администратор, чтобы получить доступ к последней группе маршрутизации с 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); 

}); 

композитор используется для передачи того же набора данных или выполнять тот же набор задач для набора представлений.

Я уверен, что это вас разобрает;)

Смежные вопросы