4

ユーザーがアクションを実行する権限があるかどうかを確認するミドルウェアを作成し、このミドルウェアを保護したいルートに次のように追加しました。

// VerifyPermission middleware

class VerifyPermission {

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

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

        return redirect('/');
    }
}

// Routes

Route::patch('company/{id}', ['as' => 'updateCompany',
                              'uses' => 'SettingsController@updateCompany',
                              'middleware' => 'permission:manage_company']
);

私の質問は、別のチェックを行う必要がありますか、updateCompanyそれともミドルウェアのチェックで十分ですか?

public function updateCompany()
{
    if(Auth::user()->hasPermission('manage_company'))
    {
        // Updates Company
    }   

    return abort(403, "Unauthorized");
}
4

1 に答える 1

5

いいえ、別のチェックを行うべきではありません。ミドルウェアが行います。

実際、認証とパーミッションの処理は、ミドルウェアの最も頻繁な用途の 1 つです。

これを指定すると:

Route::patch('company/{id}', ['as' => 'updateCompany',
                          'uses' => 'SettingsController@updateCompany',
                          'middleware' => 'permission:manage_company']

company/{id}ルートが見つかったらhandleリクエストpermission:manage_companySettingsController

したがって、リクエストがコントローラーに到達すると、通過したすべてのミドルウェアが満たされていると確信できます。

于 2015-10-30T15:20:07.510 に答える