加快laravel中间件代码中的重定向

时间:2019-02-05 03:17:53

标签: php laravel

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Auth\Guard;

class isAdmin
{


    public function __construct(Guard $auth) {
        $this->auth = $auth;
    }


    /**
    * Handle an incoming request.
    *
    * @param  \Illuminate\Http\Request  $request
    * @param  \Closure  $next
    * @return mixed
    */
    public function handle($request, Closure $next)
    {
        $user = auth()->user();

        if (auth()->check() && $user->isAdmin()){
            return $next($request);
        }

        abort(403, 'You do not have permission to perform this action.');

    }

这是在我的user.php模型中

protected function roleId(){ 
    return auth()->user()->role_id;
}


public function isAdmin()
{
    if (  $this->roleId() === 4 || $this->roleId() === 6 ) { 
        return true ;
    }
    else {
        return false ; 
    }
}

这是在我的route / web.php文件中

Route::group([
    'namespace' => 'Admin',
    'middleware' => 'isAdmin',
    'prefix' => 'admin'
], function () {

    Route::get('/', 'DashboardController@index')->name('admin.dashboard');


});

但是它的速度很慢,我可以提高它的速度吗?我绝对可以重定向,但是它的速度很慢,我想提高它的速度,也许可以做一些优化。你们的任何提示。.

<?php 
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;

ini_set('max_execution_time', 180);
class DashboardController extends Controller { 


    public function index()
    {
        return view('app.admin.dashboard');
    }
}

编辑代码以查看仪表板视图中的内容

1 个答案:

答案 0 :(得分:0)

我想说您当前的代码也有一些改进的地方。

您的用户模型似乎具有嵌套功能。例如中间件先调用isAdmin(),然后再调用roleId(),然后调用auth()->user()->role_id,而不是$this->role_id

例如使用policy代替使用中间件。 DashboardPolicy

您的政策可以采用以下方法:

public function index(User $user)
{
   return in_array($user->role_id, [4, 6]);
}

然后将其注册到app/Providers/AuthServiceProvider.php中:

protected $policies = [
.
.
.
Document::class => DocumentPolicy::class,
]

然后在您的控制器中执行

public function index(){

    $this->authorize('index', Dashboard::class);
    return view('app.admin.dashboard');

}

这将更清洁。

现在要调试时间问题,您可以注释所有自定义中间件,并使其保持简单的返回视图。如果速度很快,则可能是您的自定义中间件之一引起的。如果实施策略方法,则可以直接删除isAdmin中间件。