2016-10-23 9 views
1

У меня есть этот путь:Как создать динамические маршруты?

http://localhost:8000/home 

Я хочу, когда обычный пользователь открывает путь выше, то я называю этот контроллер:

[email protected] 

Но когда администратор открывает этот путь, то я называю этот контроллер :

[email protected] 

Итак, как вы видите, я ищу «динамических маршрутов» своего рода .. реализует это возможно? Другими словами, могу ли я назвать два разных контроллера для администратора и обычного члена?

+0

Да, это возможно. Вы можете создавать группы промежуточного программного обеспечения. Вы используете авторизацию Laravel? Вы уже создали нечто вроде AdminMiddleware? –

+0

@JanWillem Я понимаю, что текущий пользователь либо администратор, либо обычный член вроде этого: '@if (Auth :: user() -> admin) {// admin} else {// regular member}' – stack

ответ

1

Для лучшей практики вы можете использовать Middleware для сортировки и классификации ваших маршрутов и контроллеров.

В этом - относительно простой - случай, вы можете также использовать что-то вроде этого (в файле маршрутов):

if(!is_null(Auth::user())) { 
    // first check if user is logged in, else Auth::user() will return null 
    $uses = '[email protected]'; 
    if(Auth::user()->admin) { 
    $uses = '[email protected]'; 
    } 
    Route::get('/', $uses); 
} 

Update

Или вы можете обернуть все в этом, если заявление в аутентификации промежуточного слоя группы, например:

Route::group(['middleware' => ['auth']], function(){ 
    $uses = '[email protected]'; 
    if(Auth::user()->admin) { 
    $uses = '[email protected]'; 
    } 
    Route::get('/', $uses); 
}); 

Также убедитесь, что ваша таблица пользователей имеет столбец с именем «админ ».

+0

ваш код вызывает эту ошибку: 'ErrorException в route.php line 18: Попытка получить свойство не-объекта' – stack

+0

Попробуйте мой обновленный ответ. –

+0

Отличный ответ! :) –

2

Это хороший случай использования Middlewares для фильтрации HTTP-запросов.

Вы также могли бы сделать что-то условную в файле маршрутов, например:

if (Auth::user()->isAdmin()){ 
    Route::get('/', '[email protected]'); 
} 
else { 
    Route::get('/', '[email protected]'); 
} 

В зависимости от того, что ваше приложение выглядит, вы можете определить IsAdmin() в модели пользователя. Это очень простой пример, когда у вас есть столбец с именем role_id, а id nr 1 - admin. Если проверка подлинности пользователя администратором, то отображается верно, в противном случае неверно:

public function isAdmin() 
    { 
     return Auth::user()->role_id == 1; 
    } 

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

Если вы хотите, чтобы он сделал еще один шаг, вы можете создать таблицу разрешений и связать роль с разрешениями с помощью сводной таблицы разрешений. Затем вы можете в своем приложении определить, что требуется разрешение, чтобы иметь возможность выполнить действие и добавить все разрешения, предоставляемые данной ролью пользователя в этой сводной таблице. Затем вы просто проверяете, имеет ли пользователь (с определенной ролью) данные разрешения.

+0

Он выдает эту ошибку: ' Вызов функции-члена isAdmin() на null' – stack

+0

isAdmin - это всего лишь образец в этом случае, вам нужно определить, что такое «isAdmin()». Как вы определяете, это зависит от того, как вы разработали приложение. Если у вас есть «role_id» в таблице users, вы можете создать метод с именем isAdmin(), который проверяет, соответствует ли соответствующий role_id администратору.Поэтому, когда вы вызываете isAdmin(), вы проверяете, имеет ли пользователь прав role_id. Я отвечу на пример. –

+0

ответ обновлен :) –

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