D.R.Y授权与Gate,laravel 5.2

时间:2017-06-12 22:09:48

标签: authentication laravel-5 middleware dry

这就是问题..我在不同的方法和不同的控制器中重复了下一个代码。

if (Gate::denies('admin-role')) {
   return redirect()->action('HomeController@index')->with('warning','No');
}

如果有一天我决定更改动作路线或消息,我不想通过所有方法并更改它。有没有办法可以将这些代码放在某个部分并指定将要应用的方法?

我尝试使用这样的中间件:

$this->middleware('can:admin-role', ['only' => 'index', 'create']);

但我不知道如何自定义重定向。

使用自定义中间件我不知道这是不是一个好主意,因为我必须为每个角色(用户,管理员,超级运营商,混合用户等)创建一个中间件。

1 个答案:

答案 0 :(得分:0)

创建一个中间件类并将其应用于您的路由/路由组中,这样您就不必将其应用于单个控制器或其方法中。

<?php

namespace App\Http\Middleware;

use Closure;

class CheckRole
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (Gate::denies('admin-role')) {
            return redirect()->action('HomeController@index')->with('warning','No');
        }

        return $next($request);
    }

}