Как создать 2 типа пользователей в YIi2?

В Yii2 можно создавать различные типы пользователей с помощью концепции ролей и разрешений (roles and permissions).

Сначала необходимо создать две таблицы в базе данных: "user" и "auth_item". В таблице "user" нужно добавить поле, которое будет указывать на тип пользователя. Например, это может быть поле "type".

CREATE TABLE `user` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `username` VARCHAR(255) NOT NULL,
    `password_hash` VARCHAR(255) NOT NULL,
    `email` VARCHAR(255) NOT NULL,
    `status` SMALLINT(6) NOT NULL,
    `type` SMALLINT(6) NOT NULL, // поле для указания типа пользователя
    PRIMARY KEY (`id`)
)

В таблице "auth_item" нужно добавить две роли соответствующие типам пользователей. Например, можно создать роли "User" и "Admin".

INSERT INTO `auth_item` (`name`, `type`, `description`, `created_at`, `updated_at`) VALUES
('User', 1, 'Regular User', NULL, NULL),
('Admin', 1, 'Administrator', NULL, NULL);

После создания таблиц, нужно настроить доступы и разрешения для каждой роли. Например, для пользователя роли "User" можно разрешить только чтение и изменение своих данных, а для пользователя роли "Admin" можно разрешить полный доступ ко всем данным.

Для реализации этой логики можно использовать расширение Yii2 - "yii2rbac". Подключите его через Composer.

"require": {
    "yiisoft/yii2": "~2.0.14",
    "dektrium/yii2-rbac": "1.0.0"
},

После установки расширения, нужно настроить его. Создайте файл "rbac.php" в папке "config", и добавьте в него следующий код:

return [
    'components' => [
        'authManager' => [
            'class' => 'dektriumrbaccomponentsDbManager',
        ],
    ],
];

Теперь нужно применить миграцию для создания таблицы для хранения разрешений:

php yii migrate/up --migrationPath=@yii/rbac/migrations

Затем, создайте новый контроллер, например, "SiteController", и добавьте в него следующий код:

namespace appcontrollers;

use Yii;
use yiiwebController;
use yiifiltersAccessControl;

class SiteController extends Controller
{
    // ...

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => true,
                        'actions' => ['index'],
                        'roles' => ['@'], // Требуем авторизацию для доступа
                    ],
                    [
                        'allow' => true,
                        'actions' => ['admin'],
                        'roles' => ['Admin'], // Только для пользователя с ролью "Admin"
                    ],
                ],
            ],
        ];
    }

    // ...
}

Теперь, если вы зайдете на страницу "site/index", вам потребуется авторизоваться. А если вы зайдете на страницу "site/admin", вам потребуется авторизоваться, а также иметь роль "Admin".

На этом этапе вы создали две роли и добавили их к различным действиям и контроллерам. Вы также можете настроить более точные разрешения для каждой роли, добавив записи в таблицу "auth_item_child" и используя методы, предоставленные расширением yii2rbac.

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