问题
我正在寻找一种方法来保护用户免受不属于他们的访问路由,例如管理员无法访问用户区域,简单用户无法访问管理区域
嗨,我有一个laravel 5.3应用程序,它有两种类型的用户
我试图阻止admin
访问simple user
路由,反之亦然,我搜索了很多,找到了一个创建中间件的解决方案
我做了什么
<?php
namespace App\Http\Middleware;
use Auth;
use Closure;
class UserRole
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ( Auth::check()) // user logged
{
$request_url = $request->getRequestUri();
if( Auth::user()->user_type == 1 ) // simple user
{
// checking if simple user is visiting routes // starts with /user in the url
if (strpos($request_url, "/user") === 0)
{
return $next($request);
}
else
{
return redirect('/');
}
}
// checking if admin is visiting routes // starts with /admin in the url
else if( Auth::user()->user_type == 2 ) // admin
{
if (strpos($request_url, "/admin") === 0)
{
return $next($request);
}
else
{
return redirect('/');
}
}
else
{
return redirect('/');
}
}
return redirect('/');
}
}
不幸的是,两人都能够访问彼此禁区。我无法找到更好的方法来保护用户免于访问他们也无法访问的路由。
答案 0 :(得分:0)
如果您想使用中间件实现这一目标,则需要执行以下操作 -
创建两个中间件,一个用于管理员,一个用于简单用户。
然后在路线文件中创建两个路线组,即
routes/web.php
- 醇>
使用 admin 中间件保护一个路由组,并将所有与管理员相关的路由放入该组。保护另一个路线组 同 简单用户中间件,并将所有与管理员相关的路由放入该组中。
Route::group(['middleware' => ['auth', 'admin']], function() {
// put all your admin routes here
});
Route::group(['middleware' => ['auth', 'simple-user']], function() {
// put all your simple user routes here
});
您还可以使用角色和权限来完成此操作。这是一个可以满足您需求的包。