【发布时间】:2013-09-05 04:10:31
【问题描述】:
我面临着在我正在开发的网站上将用户限制为他们自己的数据的问题。
目前所有用户都可以访问所有其他用户的数据。
我在网上找到了这个 sn-p:
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;
}
【问题讨论】:
-
您是否阅读过错误消息?它以纯文本形式表示您正在尝试查询不存在的列。
mob_reg表有一个名为name的列吗? -
之后的下一个问题是,当您将用户名放入查询时,您没有引用该用户名。使用绑定参数而不是直接插入。
-
列名存在这不是问题,是的,你能告诉我如何引用用户名吗?
-
您应该发布您正在使用的实际代码,而不是您找到并用作灵感的代码...
public function defaultScope() { return array( 'condition' => 'name = :name', 'params' => array(':name' => ...), ); }