保护管理员和用户路由 laravel 5
protecting admin and user routes laravel 5
我有一个管理员和用户的通用登录名。但是我在我的 table 中创建了一个角色,它看起来像:
user_id role_id
1 2
2 1
3 2
其中 role_id 1
指管理员,role_id 2
指用户。我也可以将角色附加到不同的用户。现在我想要的是,我想保护所有的管理路由和用户路由。
例如,我不希望用户获得任何管理员权限。现在,我可以检查用户是管理员还是像 if (Auth::user()->hasRole('admin'))
或 if (Auth::user()->hasRole('user'))
这样的用户。
在这种情况下,我应该如何将我的用户路由与管理路由分开?我应该制作自己的中间件并实施吗?如果可以,如何正确实现?
创建两个中间件,管理员可以这样做:
<?php namespace App\Http\Middleware;
use Auth;
use Illuminate\Contracts\Routing\Middleware;
class CheckAdmin implements Middleware {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::user()->hasRole('admin'))
{
return $next($request);
}
throw new \Exception("Unauthorized");
}
}
然后在App\Http\Kernel
中启用这个中间件
protected $routeMiddleware = [
'auth' = 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'checkAdmin' => 'App\Http\Middleware\CheckAdmin',
];
您可以在 routes.php 文件或控制器的构造函数中使用您的 CheckAdmin 中间件
在 routes.php
你可以做:
Route::group(['middleware' => 'checkAdmin'], function () {
Route::get('admin/profile', function () {
// Uses CheckAdmin Middleware
});
});
我有一个管理员和用户的通用登录名。但是我在我的 table 中创建了一个角色,它看起来像:
user_id role_id
1 2
2 1
3 2
其中 role_id 1
指管理员,role_id 2
指用户。我也可以将角色附加到不同的用户。现在我想要的是,我想保护所有的管理路由和用户路由。
例如,我不希望用户获得任何管理员权限。现在,我可以检查用户是管理员还是像 if (Auth::user()->hasRole('admin'))
或 if (Auth::user()->hasRole('user'))
这样的用户。
在这种情况下,我应该如何将我的用户路由与管理路由分开?我应该制作自己的中间件并实施吗?如果可以,如何正确实现?
创建两个中间件,管理员可以这样做:
<?php namespace App\Http\Middleware;
use Auth;
use Illuminate\Contracts\Routing\Middleware;
class CheckAdmin implements Middleware {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::user()->hasRole('admin'))
{
return $next($request);
}
throw new \Exception("Unauthorized");
}
}
然后在App\Http\Kernel
protected $routeMiddleware = [
'auth' = 'App\Http\Middleware\Authenticate',
'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
'checkAdmin' => 'App\Http\Middleware\CheckAdmin',
];
您可以在 routes.php 文件或控制器的构造函数中使用您的 CheckAdmin 中间件
在 routes.php
你可以做:
Route::group(['middleware' => 'checkAdmin'], function () {
Route::get('admin/profile', function () {
// Uses CheckAdmin Middleware
});
});