中间件不符合条件-Laravel 5.7



我正试图在Laravel 5.7中实现一个用户注册系统,但我遇到了一个问题。

我有两个Users-Admin表(通过复制默认的Laravel-auth创建),新的路由,新的管理中间件。使用防护装置时,一切都很好。

我试图通过添加批准/不批准功能来限制用户登录。

我在Users表中添加了一个额外的列-admin(布尔值)。

在登录控制器-LoginController.php页面中,我添加了

protected function authenticated($request, $user)
{
if ( $request->user()->admin != 1)
// if($user->admin != 1)
{
return redirect()->route('approval');
}
else
{
return redirect('/engineer');
}
}

因此,当管理员为1时,我被引导到"/工程师",在其他情况下,我被指示到"批准"。

它按要求工作!。

我现在面临的问题是,如果我试图访问"工程师"使用未经批准的用户,我可以访问该页面。我不知道该如何限制它。该页面仍然对公众开放

由于控制器将由用户和管理员访问,我在控制器中使用了__construct

web.php

Route::resource('engineer', 'engineerController');

engineerController.php

public function __construct()
{
$this->middleware('auth:web,admin');
}

我的理解是,只有当用户登录并在其退出后才检查该条件。

我需要创建一个新的中间件来保持授权页面的完整性吗?

我是一个自学成才的人,对拉拉威尔是个新手。我确信我没有遵循正确的做法。我开始做了一些事情,并一直努力做到最后。请引导我通过它。

同时,请告诉我我怎么能做得更好。

您需要定义一个中间件来检查工程师是否获得批准。显然,您还需要将其保存在例如is_approved列中。

<?php
namespace AppHttpMiddleware;
use Closure;
class CheckEngineerApproval
{
/**
* Handle an incoming request.
*
* @param  IlluminateHttpRequest  $request
* @param  Closure  $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (! auth()->user->is_approved) {
return redirect('user.approve');
}
return $next($request);
}
}

然后,将其添加到内核中的$routeMiddleware数组中。

protected $routeMiddleware = [
// 
//
'engineer.approved' => AppHttpMiddlewareCheckEngineerApproval::class,
];

最后,您也可以在Controller的构造函数中添加中间件。

public function __construct()
{
$this->middleware(['auth:web','admin','engineer.approved']);
}

最新更新