Пользователь должен иметь возможность оплатить только зарегистрированную им регистрацию. - PullRequest
0 голосов
/ 05 июня 2018

У меня есть этот маршрут:

Route::get('/conference/{id}/{slug?}/payment/registration/{registrationID}', [
    'uses' => 'PaymentController@payment',
    'as'   =>'conferences.payment'
]);

Когда пользователь обращается к этому маршруту через «http://proj.test/conference/2/conference-title/payment/registration/1», появляется многоэтапная форма, поэтому пользователь может ввести некоторые данные для оплаты регистрации, которую он сделал вконференция.

Работает нормально, когда пользователь обращается к "http://proj.test/conference/2/conference-title/payment/registration/1", появляется многошаговая форма.

Проблема заключается в том, что, например, если другой пользователь с другим идентификатором в таблице пользователей, он также может получить доступ к «http://proj.test/conference/2/title/payment/registration/1» и оплатить ту же регистрацию с идентификатором «1», которая принадлежит другому пользователю.

Таким образом, любой пользователь может оплатить любую регистрацию, но пользователь должен иметь возможность оплатить только регистрацию, которую он сделал.

Знаете ли вы, как решить эту проблему?

PaymentController:

class PaymentController extends Controller
{

    public function payment($id, $slug, $regID)
    {

        $registrationTypeDetails = Registration::with(['participants.registration_type',
            'participants' => function ($query) use ($regID) {
                $query->select('id', 'registration_type_id', 'registration_id')->where('registration_id', $regID);
            }
        ])->find($regID);

        $registrationTypes = [];


        return view('conferences.payment', compact('registrationTypeDetails', 'id', 'slug'));
    }
}   

$ registrationTypeDetails показывает:

Registration {#259 ▼
...
  #relations: array:1 [▼
    "participants" => Collection {#263 ▼
      #items: array:2 [▼
        0 => Participant {#270 ▼
         ...
          #relations: array:1 [▼
            "registration_type" => RegistrationType {#276 ▼
              ....
              #attributes: array:12 [▼
                "id" => 2
                "name" => "free"
                "price" => 0
                "conference_id" => 2
              ]
              ...
            }
          ]
         ...
        }
        1 => Participant {#272 ▼
          ...
          #relations: array:1 [▼
            "registration_type" => RegistrationType {#278 ▼
            ...
              #attributes: array:12 [▼
                "id" => 3
                "name" => "paid"
                "price" => 1
                "conference_id," => 2
              ]
             ...
            }
          ]
        }
      ]
    }
  ]
...
}

1 Ответ

0 голосов
/ 12 июня 2018

Используя систему аутентификации Laravel, вы можете получить текущего аутентифицированного пользователя и проверить, соответствует ли его идентификатор user_id при регистрации.Я предполагаю, что есть связь между пользователем и созданной им регистрацией, если нет, то должна быть.

Это будет примерно так:

use Auth;
// ...all your other imports

class PaymentController extends Controller
{

    public function payment($id, $slug, $regID)
    {
        // get the current user
        $user_id = Auth::id();

        $registrationTypeDetails = Registration::with(['participants.registration_type',
            'participants' => function ($query) use ($regID) {
                $query->select('id', 'registration_type_id', 'registration_id')->where('registration_id', $regID);
            }
        ])->find($regID);

        // check if the user id matches
        if ($registrationTypeDetails->main_participant_id != $user_id) {
            // user didn't create this registration
            // ...do whatever you need to
        }
        else {
            $registrationTypes = [];

            return view('conferences.payment', compact('registrationTypeDetails', 'id', 'slug'));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...