2017-01-20 40 views
0

У меня следующий код в моем контроллере для удаления файлов:удалить по идентификатору не работает в Yii 1

public function actionDelete($id) 
    { 
     $current_user_id=Yii::app()->user->id; 
     $condition = 'user_id=:user_id'; 
     $params = array(':user_id' => $current_user_id); 
     $idExists = UserGroup::model()->exists($condition,$params); 
     if($idExists){ 
      $list = UserGroup::model()->find($current_user_id); 
      $getgroup= $list->user_group_id; 
      $getgroupright=UserRights::model()->find($getgroup); 
      $getuserRule=$getgroupright->user_rule_id; 
      $getuserprivilege=$getgroupright->user_privilege_id; 
      if($getuserprivilege=='1' and $getuserRule=='3'){ 
       $this->loadModel($id)->delete(); 
       // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser 
       if (!isset($_GET['ajax'])) 
        $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin')); 

      } 
      } 

     } 

Thid код if($getuserprivilege=='1' and $getuserRule=='3'){ работает для просмотра файлов по идентификатору (100%). Однако это не означало удаление файлов. Если я удалю этот код, он начнет работать. Как я могу исправить эту ошибку?

+0

'if ($ getuserprivilege == '1' и $ getuserRule == '3') {' должно быть 'if ($ getuserprivilege == '1' || $ getuserRule == '3') { ' –

+0

Он удаляет, даже если он не удовлетворяет требованиям – phpdev

ответ

-1

Попробуйте заменить

$this->loadModel($id)->delete(); 

с

$this->findModel($id)->delete(); 

Конечно вам нужен метод в findModel ($ ID) в контроллере

0

Сначала добавьте следующий код в контроллере сверху и проверьте, является ли запрос POST или GET

if(Yii::app()->request->isPostRequest()) 
    echo "POST"; 
else 
    echo "NOT POST"; 

если выход «NOT POST», то

Проверьте фильтры() в вашем контроллере и проверьте, разрешено ли удаление только через запрос POST.

public function filters() { 
     return array(
      'accessControl', // perform access control for CRUD operations 
      'postOnly + delete', // we only allow deletion via POST request 
     ); 
}

'postOnly + удаление', -> закомментировать эту строку.

, чтобы разрешить удаление с помощью запроса GET.

Альтернативное (более безопасное и лучшее) решение заключается в том, что вы используете метод POST для передачи «id» на контроллер.