Роли с laravel 5, как разрешить доступ администратора только к некоторому корню

Я следую этому руководству: https://www.youtube.com/watch?v=kmJYVhG6UzM В настоящее время я могу проверить свой клинок, если пользователь является администратором или нет:

{{ Auth::user()->roles->toArray()[0]['role'] }} HI ADMIN @endif 

Как я могу сделать свой маршрут доступным только для пользователей admin?

Solutions Collecting From Web of "Роли с laravel 5, как разрешить доступ администратора только к некоторому корню"

Вам необходимо создать промежуточное ПО для вашего маршрута.

Использование: php artisan make:middleware AdminMiddleware .

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

Поместите свою логику в ваше промежуточное ПО, например

 public function handle($request, Closure $next) { if(Auth::check()) { return $next($request); } else { return view('auth.login')->withErrors('You are not logged in'); } } 

После того, как вы выполнили свою логику в своем промежуточном программном обеспечении, вы можете либо вызвать ее на маршруте, либо применить промежуточное ПО ко всем маршрутам.

Если вы хотите добавить его ко всем маршрутам, перейдите в Kernel.php и добавьте его в массив $middleware , например

 protected $middleware = [ 'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode', 'Illuminate\Cookie\Middleware\EncryptCookies', 'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse', 'Illuminate\Session\Middleware\StartSession', 'Illuminate\View\Middleware\ShareErrorsFromSession', 'App\Http\Middleware\VerifyCsrfToken', 'App\Http\Middleware\AdminMiddleware', ]; 

Если вы хотите добавить его только к определенным маршрутам, добавьте его в переменную $routeMiddleware и добавьте псевдоним к маршруту. Например

 protected $routeMiddleware = [ 'auth' => 'App\Http\Middleware\Authenticate', 'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth', 'guest' => 'App\Http\Middleware\RedirectIfAuthenticated', 'admin' => 'App\Http\Middleware\AdminMiddleware', ]; 

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

 Route::get('admin/profile', ['middleware' => 'admin', function() { }]); 

Для получения дополнительной информации посетите документы:

http://laravel.com/docs/master/middleware

РЕДАКТИРОВАТЬ

Улучшением этого будет использование вариационных функций, которые были введены в PHP 5.6

http://php.net/manual/en/migration56.new-features.php

Вместо того, чтобы создавать промежуточное ПО для каждого набора разрешений, вы можете сделать следующее

PermissionMiddleware

 namespace App\Http\Middleware; use Closure; use \App\Models\Role; class PermissionMiddleware { // Pass parameters to this middleware public function handle($request, Closure $next, ...$permitted_roles) { //Get a users role $role = new Role; $role_name = $role->getUserRoleByName(); foreach($permitted_roles as $permitted_role) { if($permitted_role == $role_name) { return $next($request); } } return redirect()->back()->withErrors('You do not have the required permission'); } } 

Обратите внимание … $ allowed_roles

 Route::get('admin/profile', ['middleware' => 'PermissionMiddleware:Admin,Marketing', function() { }]); 

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

Документы https://laravel.com/docs/5.3/middleware#middleware-parameters

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

 Route::get('admin', ['middleware' => 'checkadmin', function() { }]); 

теперь создавайте промежуточное ПО и проверяйте пользователя admin.

Предположим, у вас есть столбец в вашей таблице пользователей с именем isAdmin которое имеет значение по умолчанию 0 (false)

Вы можете предоставить специальный доступ с использованием промежуточного программного обеспечения в laravel, так как вы предоставляете доступ к зарегистрированным пользователям с использованием промежуточного ПО auth в laravel. Теперь вам нужно создать промежуточное программное обеспечение с помощью команды:

 php artisan make:middleware AdminMiddleware 

В вашем Kernel.php вам нужно добавить эту строку в protected $routeMiddleware

 'admin' => \App\Http\Middleware\AdminMiddleware::class, 

В папке промежуточного программного обеспечения есть файл AdminMiddleware . В этом вам нужно поставить свою логику. В этом случае это так, как это может выглядеть в зависимости от вас

 <?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class RoleMiddleware { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if(Auth::user()->isAdmin == '1') // is an admin { return $next($request); // pass the admin } return redirect('/'); // not admin. redirect whereever you like } } 

Теперь на вашем маршруте вам нужно передать URL-адрес, используя это промежуточное ПО. Вот как это может выглядеть

 Route::get('/iamanadmin', ['middleware' => 'admin', function() { return view('iamanadmin'); }]);