这就是问题..我在不同的方法和不同的控制器中重复了下一个代码。
if (Gate::denies('admin-role')) {
return redirect()->action('HomeController@index')->with('warning','No');
}
如果有一天我决定更改动作路线或消息,我不想通过所有方法并更改它。有没有办法可以将这些代码放在某个部分并指定将要应用的方法?
我尝试使用这样的中间件:
$this->middleware('can:admin-role', ['only' => 'index', 'create']);
但我不知道如何自定义重定向。
使用自定义中间件我不知道这是不是一个好主意,因为我必须为每个角色(用户,管理员,超级运营商,混合用户等)创建一个中间件。
答案 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);
}
}