Как добавить запись в таблицу rbac

94
02 марта 2021, 05:40

есть в yii2 такая вещь как rbac, в ней есть таблица auth_item_child, в ней поля parent и child, в эти поля можно вставить только значения из таблицы auth_item, поля name. Не знаю как это описать, приложу картинку.

Так вот, вопрос состоит в следующем, как добавить запись в таблицу auth_item_child через миграции? пробовал так:

    $this->insert('auth_item_child', [
        'parent'        => 'item_1',
        'child'         => 'item_2'
    ]);

но при выполнении миграции происходит ошибка:

    insert into auth_item_child ...Exception: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`tag_api_client`.`auth_item_child`, CONSTRAINT `auth_item_child_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE)
The SQL being executed was: INSERT INTO `auth_item_child` (`parent`, `child`) VALUES ('auth_item.browsingSummerCeremony', 'auth_item.allowedToSummerCeremony') (/var/www/html/www/vendor/yiisoft/yii2/db/Schema.php:664)
Answer 1

В таблицы RBAC в Yii 2 записи добавляются только через классы самого RBAC.

В Вашем случае нужно для начала создать роли.

$role1 = Yii::$app->authManager->createRole('role1');
$role1->description = 'Роль1';
Yii::$app->authManager->add($role1);
$role2 = Yii::$app->authManager->createRole('role2');
$role2->description = 'Роль2';
Yii::$app->authManager->add($role2);

Подробнее можете посмотреть здесь.

А, потом для соответствующей роли добавить дочернюю посредством метода addChild.

Yii::$app->authManager->addChild($role1,$role2);
READ ALSO
Laravel API - в директорию домена

Laravel API - в директорию домена

Есть корпоративные сайты, к которым нужно прикрутить форум

122
Mikrotik php_api через safe mode

Mikrotik php_api через safe mode

Необходимо включение режима "Safe Mode" путем передачи запроса посредством php(api) на Mikrotik!

95
перехват ошибки SOAP-ERROR: Parsing WSDL: Couldn't load from

перехват ошибки SOAP-ERROR: Parsing WSDL: Couldn't load from

Не удается заблокировать ошибку после вызова функции SoapClientОшибка пишется в лог, даже если обернуть функцию в try catch

121