【问题标题】:D.R.Y authorization with Gate, laravel 5.2Gate,laravel 5.2 的 D.R.Y 授权
【发布时间】:2017-06-12 22:09:48
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 在中间件中,可以不返回$next()响应,而是返回redirect()->route('my.route')

标签: authentication laravel-5 middleware dry


【解决方案1】:

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

<?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);
    }

}

【讨论】:

    猜你喜欢
    • 2017-06-25
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 2012-12-04
    • 2019-10-23
    相关资源
    最近更新 更多