Универсальная миграция прав RBAC на Yii2

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

Я использую БД для хранения ролей, поэтому в миграции делается проверка на данный факт.

Данный код создает новые права, если они не существуют и присваивает их указанным ролям, если они еще не были присвоены ранее. Все, что нам нужно при данном подходе — заполнить переменную $permissions.

Ключом выступает название прав, а значение — массив из ролей пользователей, которым необходимо присвоить указанные права.

При миграции «вниз» — все указанные права и присвоенные им роли удаляются.

Возможно, возникнет проблема, в случае, если права были уже созданы и присовены к ролям ранее, но это легко обойти сделав проверку перед удалением на наличие присвоения прав к иным ролям: