示例#1
0
 /**
  * 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);
 }