Yes, most likely you want RBAC with roles in the database
Specify the component in the config
'components' => [ 'authManager' => [ 'class' => 'yii\rbac\DbManager', ],
Apply migration to create structure in the database
./yii migrate --migrationPath=@yii/rbac/migrations/
Example
//Cоздание роли $role = Yii::$app->authManager->createRole('admin'); $role->description = 'Админ'; Yii::$app->authManager->add($role); //Создать пермишн $permission = Yii::$app->authManager->createPermission('editUser'); $permission->description = 'Право редактировать пользователя'; Yii::$app->authManager->add($permission); //Связать пермишн с ролью $role = Yii::$app->authManager->getRole('admin'); $permission = Yii::$app->authManager->getPermission('editUser'); Yii::$app->authManager->addChild($role, $permission); //Назначить роль 'admin' пользователю 123 $userRole = Yii::$app->authManager->getRole('admin'); Yii::$app->authManager->assign($userRole, 123);
UPDATED:
Or any functionality to your taste
/** * @inheritdoc */ public function behaviors() { return [ 'access' => [ 'class' => MyAccessControl::className(), ], ]; } class MyAccessControl extends ActionFilter { public function beforeAction($action) { /**@var Controller $controller */ $controller = $this->owner; $controllerName = $controller->id; $userID = Yii::$app->user->isGuest ? null : Yii::$app->user->id; /** * CREATE TABLE `access` ( * `controller_name` VARCHAR(50) NOT NULL COLLATE 'utf8_unicode_ci', * `action_name` VARCHAR(50) NOT NULL COLLATE 'utf8_unicode_ci', * `user_id` INT(11) NOT NULL, * UNIQUE INDEX `controller_name_action_name_user_id` (`controller_name`, `action_name`, `user_id`) * ) */ $result = AccessModel::findOne([ 'controller_name' => $controllerName, 'action_name' => $action, 'user' => $userID, ]); //Если нет, то кидаем Exception if (!$result) { throw new ForbiddenHttpException(Yii::t('yii', 'You are not allowed to perform this action.')); } return parent::beforeAction($action); } }