protected function getChirlrenOfRole($role = null) { if ($role) { // Get Children $children = AuthItemChild::findAll(['parent' => $role]); $result = []; foreach ($children as $child) { $result[] = $child->child; } return $result; } else { return null; } }
/** * Hàm xóa role dựa vào name của role. * Lấy ra các role con của role xóa, update các role con vào role parent của role bị xóa. * Khi xóa role xóa các item child của role trong bảng child. */ public function actionDeleterole() { $name = Yii::$app->request->post('name', NULL); // Lấy ra parent của role bị xóa. $role = AuthItemChild::findOne(['child' => $name]); /** * Nếu role bị xóa có parent thì update các role con theo role parent bị xóa và xóa role child là role bị xóa. * Ngược lại thì xóa toàn bộ child của role bị xóa. */ if ($role) { $auth = Yii::$app->authManager; // Get all permission by role $allPermissionByRole = $auth->getPermissionsByRole($name); // Get all permission by role parent and delete permission in role remove if permission in role parent. $allPermissionByRoleParent = $auth->getPermissionsByRole($role->parent); $allPermissionByRoleParent = \yii\helpers\ArrayHelper::map($allPermissionByRoleParent, 'name', 'name'); foreach ($allPermissionByRole as $permission) { if (in_array($permission->name, $allPermissionByRoleParent)) { AuthItemChild::deleteAll(['child' => $permission->name, 'parent' => $name]); } } // Lấy ra các role con của role bị xóa, và update vào role parent của role bị xóa. AuthItemChild::updateAll(['parent' => $role->parent], ['parent' => $name]); // Xóa chính nó trong bảng child. AuthItemChild::deleteAll(['child' => $name]); } else { AuthItemChild::deleteAll(['parent' => $name]); } // Xóa role AuthItem::deleteAll(['name' => $name]); $result = ['status' => 1, 'message' => 'Xóa vai trò thành công']; echo json_encode($result); }
public function actionUpdaterole() { $updateRoles = Yii::$app->request->get('listRoles'); $roles = json_decode($updateRoles); if (is_array($roles) and !empty($roles)) { \app\modules\account\models\AuthItemChild::updateTreeRole($roles); } }