laravel

Создание консольной команды, для задания роли пользователя в Laravel 9

Возможность создавать свои собственные консольные команды может быть очень полезной в определенных ситуациях.

В этом разборе мы собираемся развернуть приложение с новыми пользователями. Установим роль для пользователя, которая является либо ‘user‘ или ‘admin‘. По умолчанию роль установлена как ‘user‘. (Когда пользователь создается, то он автоматически становится обычным пользователем).

Когда вы развертываете приложение рабочей среде, можно столкнуться с проблемой, что ни один пользователь не является администратором, и ваша серверная система может быть недоступна.

Простым решением для этого было бы создать консольную команду, где вы можете просто ввести адрес электронной почты пользователя, которого хотите сделать администратором.

Добавление роли

Давайте начнем с самого начала и добавим роль в нашу пользовательскую модель.

Запустите эту команду в свой терминал:

php artisan make:migration AddRoleToUsers

Эта команда сгенерирует нашу миграцию, нам просто нужно изменить некоторые куски кода. В основном, чтобы убедиться, что роль по умолчанию установлена ​​на ‘user‘.

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('institutions', function (Blueprint $table) {
            $table->string('status')->default('active'); 
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('institutions', function (Blueprint $table) {
            $table->dropColumn('status');
        });
    }
};

Не забудьте применить миграцию с помощью

php artisan migrate

Создание консольной команды

Далее создадим консольную команду. Введите следующую команду в вашем терминале:

php artisan make:command MakeAdmin

Это создаст файл с именем MakeAdmin.php в каталоге app/console/command.

В этом файле есть несколько интересных моментов:

protected $signature

Вы выбираете команду, которую хотите использовать в консоли, и можете передать ей аргумент. В этом случае мы собираемся передать адрес электронной почты пользователя (вы можете использовать другое поле). Это будет выглядеть так:

protected $signature = 'make:admin {UserEmail}';

Cледующая интересная строка protected $description. Это задаст описание вашей командной строке и будет доступно при использовании php artisan list.

Используйте что-то простое, например:

protected $description = 'Make A User Admin';

Реализация обработчика

Находясь в MakeAdmin.php вы увидите метод handle(). Здесь вы можете реализовать поведение команды.

Найдем пользователя, который соответствует электронной почте, и изменить его роль на ‘admin‘.

public function handle()
  {
      $user_email = $this->argument('UserEmail');
      User::where('email', $user_email)
      ->update([
          'role' => 'admin'
      ]);
      echo "Finished"; 
  }

Теперь зайдите в консоль и введите:

php artisan admin:make user@example.com

Консоль выдаст Finished!

To top