Я следую этому руководству: https://www.youtube.com/watch?v=kmJYVhG6UzM В настоящее время я могу проверить свой клинок, если пользователь является администратором или нет:
{{ Auth::user()->roles->toArray()[0]['role'] }} HI ADMIN @endif
Как я могу сделать свой маршрут доступным только для пользователей admin?
Вам необходимо создать промежуточное ПО для вашего маршрута.
Использование: 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'); }]);