2013-09-02 2 views
0

У меня возникла проблема ограничения пользователя собственными данными на сайте, который я разрабатываю.Ограничение пользователя на собственные данные

В настоящее время все пользователи могут получить доступ ко всем остальным пользователям.

Я нашел этот фрагмент кода в Интернете:

public function defaultScope() { 
     return array(
      'condition' => 'mob_num = '.YII::app()->user->getId(), // Customer can see only his orders 
     ); 
    } 

Это прекрасно работает, когда моя колонка представляет собой целое число, но если это строка дает мне следующую ошибку:

CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'name' in 'where clause'. The SQL statement executed was: SELECT COUNT(*) FROM `mob_reg` `t` WHERE name = shayan 

public function authenticate() 
    { 
     /*$users=array(
      // username => password 
      'demo'=>'demo', 
      'admin'=>'admin', 
     );*/ 
      // $users= Auth::model()->findByPk("8951821861"); 
      $users = Auth::model()->findByAttributes(array('company'=>$this->username)); 

      if($users == NULL) 
       $this->errorCode=self::ERROR_USERNAME_INVALID; 
      else if ($users->name != $this->username) 
       $this->errorCode=self::ERROR_USERNAME_INVALID; 
      else if ($users->company != $this->password) 
       $this->errorCode=self::ERROR_PASSWORD_INVALID; 

      else if($users->company=='naga') 
      { 
       $this->errorCode=self::ERROR_NONE; 
       $this->setState('roles', 'super'); 
       $this->id=$users->company; 
      } 
      else { 
       $this->errorCode=self::ERROR_NONE; 
       $this->setState('roles', 'normal'); 
       $this->id=$users->company; 
      } 

      return !$this->errorCode; 
    /* if(!isset($users[$this->username])) 
      $this->errorCode=self::ERROR_USERNAME_INVALID; 
     elseif($users[$this->username]!==$this->password) 
      $this->errorCode=self::ERROR_PASSWORD_INVALID; 
     else 
      $this->errorCode=self::ERROR_NONE; 
     return !$this->errorCode;*/ 
    } 
     public function getid() 
     { 
      return $this->id; 
     } 
+0

Вы даже прочитали сообщение об ошибке? В текстовом тексте говорится, что вы пытаетесь запросить колонку, которая не существует. В таблице 'mob_reg' * есть столбец с именем' name'? – DCoder

+0

Следующая проблема после этого будет заключаться в том, что вы не указываете имя пользователя, когда вы помещаете его в запрос. Используйте параметр привязки вместо того, чтобы вставлять его напрямую. – DCoder

+0

имя столбца существует, это не проблема, и да, можете ли вы показать мне, как указывать имя пользователя? –

ответ

0

Первый и Прежде всего, я бы не использовал defaultScope, потому что это предотвращает другие варианты использования, которые вы, возможно, захотите добавить позже, например вычисление статистики других людей, которые каким-то образом связаны с текущим пользователем, например который является человек, которого я называю наиболее часто и т.д.

Так что я думаю, вы должны просто добавить дополнительные ограничения, когда вы смотрите на данные, как так:

$orders = Orders::model()->findByAttributes(array('name' => user()->getid())); 

Если вы действительно хотите придерживаться defaultScope, вы нужно правильно цитировать имя, используя параметры в путь:

public function defaultScope() 
{ 
    return array(
     'condition' => "name=?", 
     'params' => array(user()->getid()), 
    ); 
} 

конечно, вы не хотите, имя пользователя хранится в таблице заказа, но это другая история.

+0

спасибо за ваш совет. оба работали на меня. –

Смежные вопросы