Как сохранить данные о другой сущности при выполнении процедуры авторизации?

Как можно сохранить модель "Doctors" как авторизованного пользователя при использовании метода "Auth::login()" после проверки кода, который был отправлен через СМС?
  • 17 сентября 2023 г. 12:07
Ответы на вопрос 2
В Laravel для сохранения данных о другой сущности при выполнении процедуры авторизации можно воспользоваться множеством подходов. Вот один из них:

1. Создайте миграцию для добавления необходимых полей в таблицу "users" (если еще этого не было сделано). Например, поле "doctor_id" для записи идентификатора авторизованного доктора:

```php
php artisan make:migration add_doctor_id_to_users --table=users
```

2. В файле миграции добавьте новое поле в таблицу "users":

```php
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->unsignedBigInteger('doctor_id')->nullable();
        $table->foreign('doctor_id')->references('id')->on('doctors');
    });
}
```

3. Выполните миграцию:

```php
php artisan migrate
```

4. В контроллере, где происходит проверка и авторизация после успешного кода СМС, сохраните модель "Doctors" в поле "doctor_id" пользователя:

```php
use Illuminate\Support\Facades\Auth;

public function verify(Request $request)
{
    // Проверка кода СМС и другие действия...

    // Получение модели "Doctors" по идентификатору
    $doctor = Doctors::find($doctorId);
    
    // Авторизация пользователя
    Auth::login($user);

    // Сохранение id доктора в поле пользователя
    Auth::user()->doctor_id = $doctor->id;
    Auth::user()->save();

    // Дополнительные действия...

    // Перенаправление пользователя на нужную страницу
    return redirect('/dashboard');
}
```

Теперь вы можете получить доступ к модели "Doctors" авторизованного пользователя, обратившись к полю "doctor_id" его модели.
Модель Doctor связана с таблицей doctors, а модель User связана с таблицей users.

Доктор или пациент - это не пользователь, это либо роль или авторизированная сущность. Если они имеют различные свойства и права, нужно использовать RBAC. Если они просто разные сущности с разными правами, их можно связать с пользователем через один-к-одному отношение. Пользователь же служит для авторизации и идентификации.
Похожие вопросы