2

トーナメントの所有権をチェックするミドルウェアを作成しています。

したがって、URLには次のものがあります:

http://laravel.dev:8000/tournaments/1/edit

$tournamentId で「1」を取得する必要があります

ミドルウェアには $request と $closure のパラメータしかないので試してみました

$tournamentId = $request->get("tournaments");

そして@Amir Barが言うように:

$tournamentId = $request->tournaments;

ルートを確認しました

php artisan route:list

そして、私は得る

GET|HEAD | tournaments/{tournaments}        | tournaments.show         | App\Http\Controllers\TournamentController@show      | auth,roles,ownTournament |
DELETE   | tournaments/{tournaments}        | tournaments.destroy      | App\Http\Controllers\TournamentController@destroy   | auth,roles,ownTournament |
PATCH    | tournaments/{tournaments}        |                          | App\Http\Controllers\TournamentController@update    | auth,roles,ownTournament |
PUT      | tournaments/{tournaments}        | tournaments.update       | App\Http\Controllers\TournamentController@update    | auth,roles,ownTournament |
GET|HEAD | tournaments/{tournaments}/edit   | tournaments.edit         | App\Http\Controllers\TournamentController@edit      | auth,roles,ownTournament |          | auth,roles,ownTournament |

しかし、何も機能しません...

私のミドルウェア:

class OwnTournament
{
    /**
     * Check the ownership of tournaments
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        dd($request->route());
        return $next($request);
    }
}

どうすればいいですか?

4

2 に答える 2

0

これが私の解決策です。

public function handle($request, Closure $next)
{
    if (Auth::check()) {
        $user = Auth::user();
        $tournaments = $user->tournaments;
        $tournament = null;
        if ($request->tournaments != null || $request->tournamentId != null) {
            $tournament = $request->tournaments;
            if ($tournament != null) {
                if (!$tournaments->contains($tournament)) {
                    return "You don't have privileges to access this resource";
                }
            }
        }
    }


    return $next($request);
}

ミドルウェアは 2 回呼び出され、1 回目は何もアクセスできません。理由はよくわかりません...

基本的には解決しましたが、なぜそれが起こるのか理解していないので、半分解決しました:(

私を助けてくれてありがとう@Amir Bar!

于 2015-12-26T20:24:06.803 に答える