【问题标题】:Route restriction in Laravel for selected roleLaravel 中选定角色的路由限制
【发布时间】:2018-10-31 19:43:16
【问题描述】:

我有一个包含两种用户类型的用户表:供应商和客户。如果供应商角色是 1 重定向到供应商仪表板并且客户角色是 2 重定向到客户仪表板,那么登录一切都很好,但是登录后如何防止路由到客户仪表板,如果以供应商身份登录,反之亦然 登录控制器取决于角色:

class CustomerLoginController extends Controller
{
    public function __construct()
    {
        $this->middleware('guest:web');
    }

    public function showLoginForm()
    {
        return view('Customer.login');
    }

    public function login(Request $request)
    {
        $this->validate($request,[
            'email'=>'required|email',
            'password'=>'required|min:6',
        ]);

        if (Auth::guard('web')->attempt(['email'=>$request->email,'password'=>$request->password,'active'=>1,'role_id'=>2], $request->remember)) {

            return redirect()->intended(route('customer.dashboard'));

        } elseif (Auth::guard('web')->attempt(['email'=>$request->email,'password'=>$request->password,'active'=>1,'role_id'=>1],$request->remember)) {
            return redirect()->intended(route('vendor.dashboard'));

        }
        return redirect()->back()->withInput($request->only('email','remember'));
    }

}

登录路由控制器后:

public function __construct()
{
    $this->middleware('auth');
}
public function index()
{
    return view('index.customer.customerdashboard');
}

public function vendor()
{
    return view('index.vendor.vendordashboard');
}

【问题讨论】:

  • 你可以使用这个包获得角色权限here
  • 这可以通过使用中间件来完成。
  • 请提供任何代码

标签: php laravel


【解决方案1】:

你需要创建一个中间件

php artisan make:middleware PortectedVendorRoutesMiddleware

然后,在该文件的handle 方法中,添加检查用户角色的逻辑

public function handle($request, Closure $next)
{
    if (auth()->user()->role_id == 1) {
       return $next($request);
    }


    abort(404);
}

现在你需要保护你的路线

Route::group(['middleware' => App\Http\Middleware\ProtectVendorRoutesMiddleware::class], function () {

    // Your protected vendor routes here
});

或者从 Laravel 5.5 开始

Route::middleware([App\Http\Middleware\ProtectVendorRoutesMiddleware::class])->group(function () {

    // Your protected vendor routes here
});

对客户路线重复该过程。

【讨论】:

  • 在我保护路由之后: Route::group(['middleware' => App\Http\Middleware\ProtectVendorRoutesMiddleware::class].function () { Route::get('/vendor/dashboard ', 'HomeController@vendor')->name('vendor.dashboard'); });我得到错误数组到字符串的转换
  • 对不起,我用正确的语法更新了答案。
  • 没用,我知道它的 .并且之前更改但仍然出现错误 Class App\Http\Middleware\ProtectVendorRoutesMiddleware does not exist 即使我将它添加到内核但仍然出现错误
  • 谢谢@Liople 在添加到内核'authen'=>\App\Http\Middleware\Authen::class 后解决,并且在Authen中间件中添加了你的代码和路由:Route::group([ 'middleware'=>['authen']], function () { #route }
猜你喜欢
  • 1970-01-01
  • 2023-02-03
  • 2019-09-21
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 2018-09-25
  • 2014-04-27
相关资源
最近更新 更多