防止特定角色的用户访问路由
Prevent role-specific users from accessing route
我有两个角色,admin
和 user
。现在登录时,管理员转到 dashboard
路由,而用户转到 home
。当用户登录并将 url 更改为 http://127.0.0.1:8000/dashboard
时,它可以访问管理员面板,但我不希望这样。我怎样才能做到这一点?
PS。我是 Laravel
的新手
使用中间件管理路由或控制器内部
像这样:
Route::put('post/{id}', function ($id) {
//
})->middleware('role:editor');
或
Route::middleware(['auth', 'admin'])->group(function (){
Route::get('dashboard', 'HomeController@index')->name('home.index');
});
或者像这样在控制器内部:
public function __construct()
{
$this->middleware(['auth', 'admin'])->except(['index']);
}
或者您可以使用 this 作为中间件角色。
最好的做法是使用中间件。
为管理员和用户创建中间件(我只为管理员做,你可以为用户做同样的事情):
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class AdminMiddleware
{
public function handle($request, Closure $next)
{
if(Auth::check()){
// check auth user role (I don't know how you can implement this for yourself, this is just for me)
if(Auth::user()->role->name == 'admin'){
return $next($request);
} else {
return redirect()->route('admin.dashboard'); // for admins
}
}
return redirect()->route('main'); // for users
}
}
在 $routeMiddleware 数组的 "app/Http/Kernel.php" 中注册(添加到该数组的末尾)。
'Admin' => \App\Http\Middleware\AdminMiddleware::class,
现在,如果您正在使用 "routes/web.php" 中的所有请求(实际上我认为是这样),那么您可以为管理员使用这样的路由:
// USER ROUTES
Route::get('/', 'FrontController@main')->name('main');
// ADMIN ROUTES
Route::group([
'as' => 'admin.',
'middleware' => [ 'Admin' ],
], function () {
Route::get('dashboard', 'AdminController@dashboard');
});
通过 "php artisan config:cache" 刷新缓存。
试试吧!
我有两个角色,admin
和 user
。现在登录时,管理员转到 dashboard
路由,而用户转到 home
。当用户登录并将 url 更改为 http://127.0.0.1:8000/dashboard
时,它可以访问管理员面板,但我不希望这样。我怎样才能做到这一点?
PS。我是 Laravel
的新手使用中间件管理路由或控制器内部 像这样:
Route::put('post/{id}', function ($id) {
//
})->middleware('role:editor');
或
Route::middleware(['auth', 'admin'])->group(function (){
Route::get('dashboard', 'HomeController@index')->name('home.index');
});
或者像这样在控制器内部:
public function __construct()
{
$this->middleware(['auth', 'admin'])->except(['index']);
}
或者您可以使用 this 作为中间件角色。
最好的做法是使用中间件。 为管理员和用户创建中间件(我只为管理员做,你可以为用户做同样的事情):
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class AdminMiddleware
{
public function handle($request, Closure $next)
{
if(Auth::check()){
// check auth user role (I don't know how you can implement this for yourself, this is just for me)
if(Auth::user()->role->name == 'admin'){
return $next($request);
} else {
return redirect()->route('admin.dashboard'); // for admins
}
}
return redirect()->route('main'); // for users
}
}
在 $routeMiddleware 数组的 "app/Http/Kernel.php" 中注册(添加到该数组的末尾)。
'Admin' => \App\Http\Middleware\AdminMiddleware::class,
现在,如果您正在使用 "routes/web.php" 中的所有请求(实际上我认为是这样),那么您可以为管理员使用这样的路由:
// USER ROUTES
Route::get('/', 'FrontController@main')->name('main');
// ADMIN ROUTES
Route::group([
'as' => 'admin.',
'middleware' => [ 'Admin' ],
], function () {
Route::get('dashboard', 'AdminController@dashboard');
});
通过 "php artisan config:cache" 刷新缓存。 试试吧!