Задать вопрос
azuron
@azuron
Laravel разработчик

Laravel 4: Как защитить маршруты админов и пользователей?

Добрый день! Подскажите пожалуйста как правильно разделить маршруты пользователй и администраторов? Чтобы при авторизации пользователь попадал на свою начальную страницу и мог переходить только по нужным роутам а админ попадал на свою страницу и мог видеть только свои роуты.
Мой файл routes.php

Route::get('/', array(
	'as' => 'home',
	'uses' => 'HomeController@home'
));




Route::group(array('before' => 'auth'), function(){
	
	//защита от подделки межсайтовых запросов
	Route::group(array('before' => 'csrf'), function(){

		//Изменить пароль(POST)
		Route::post('/account/change-password', array(
			'as' => 'account-change-password-post',
			'uses' => 'AccountController@postChangePassword'
		));
	});


	//Изменить пароль(GET)
	Route::get('/account/change-password', array(
		'as' => 'account-change-password',
		'uses' => 'AccountController@getChangePassword'
	));

	//просмотр профиля пользователя
	Route::get('/user/{username}', array(
		'as' => 'profile-user',
		'uses' => 'ProfileController@user'
	)); 


	//Выход пользователя(GET)
	Route::get('/account/sign-out', array(
		'as' => 'account-sign-out',
		'uses' => 'AccountController@getSignOut'
	));
	
});



// Группа админов
 Route::group(array('before' => 'admin'), function(){

//вывод главной страницы админа
	Route::get('/dashboard', array(
		'as' => 'dashboard',
		'uses' => 'TiketsController@dashboard'
	));


	//вывод новых заявок
	Route::get('/tiket-new', array(
		'as' => 'tiket-new',
		'uses' => 'TiketsController@tiketNew'
	));

	//вывод заявок в работе
	Route::get('/tiket-work', array(
		'as' => 'tiket-work',
		'uses' => 'TiketsController@tiketWork'
	));

	//вывод завершенных заявок 
	Route::get('/tiket-complete', array(
		'as' => 'tiket-complete',
		'uses' => 'TiketsController@tiketComplete'
	));

	//вывод заявок в архиве
	Route::get('/tiket-arhive', array(
		'as' => 'tiket-arhive',
		'uses' => 'TiketsController@tiketArhive'
	));
});



// Группа юзеров
 Route::group(array('before' => 'user'), function(){

//вывод главной страницы админа
	Route::get('/user-dashboard', array(
		'as' => 'user-dashboard',
		'uses' => 'TiketsController@userDashboard'
	));
});


К сожалению при таких роутах админы и пользователи могут видеть страницы друг друга. Подскажите пожалуйста как можно подробнее, как разграничить различные группы пользователей?
  • Вопрос задан
  • 2968 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
array('before'=>'auth')
laravel.com/docs/security

в контроллере отвечающем за админку
<?php



class DashboardController extends BaseController {





	public function __construct() {

		$this->beforeFilter('auth');

	}
       .....
       .....
       .....
}
Ответ написан
Комментировать
azuron
@azuron Автор вопроса
Laravel разработчик
Написал как Вы показали и у меня вообще не входит юзер на сайт.
Вот мой код авторизации юзера.
//Вход на сайт
	public function postSignIn(){
		//принимаем все поля из формы и валидируем
		$validator = Validator::make(Input::all(), 
			array(
				'email' 		 => 'required|email',
				'password' 		 => 'required'
		));

		if($validator->fails()){
			//если есть ошибки то редиректим на форму входа пользователя и показываем ошибки
			return Redirect::route('account-sign-in')
					->withErrors($validator)
					->withInput();
		} else {
			//проверяем состояние чекбокса о запоминании пользователя
			$remember = (Input::has('remember')) ? true : false;


			//получаем все поля из формы авторизации и проверяем нажата ли галочка запомнить меня
			$auth = Auth::attempt(array(
				'email' => Input::get('email'),
				'password' => Input::get('password'),
				'active' => 1
			), $remember);

			



			if($auth){
				if (Auth::user()->role==5) {
					//редирект на нужную нам страницу после авторизации
					return Redirect::intended('/dashboard');
				}
				if (Auth::user()->role==1) {
					//редирект на нужную нам страницу после авторизации
					return Redirect::intended('/user-dashboard');
				}

				
			} else {
				return Redirect::route('account-sign-in')
					->with('global', 'Email или пароль не верны или аккаунт не активирован.');
			}
		}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы