如何确保用户只能在Yii中查看和访问自己的数据

时间:2012-06-17 00:32:40

标签: security yii authorization

在Yii中,有没有最好的方法来确保用户只能在Yii中查看和访问他们自己的数据?

我认为管理员应该可以看到任何东西,但就目前而言,我稍后会越过那座桥。

由于

3 个答案:

答案 0 :(得分:9)

查看范围。默认范围将是您的朋友: http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes

因为defaultScopes数组在函数内部,所以您也可以执行条件默认范围:

public function defaultScope()
{
    $t=$this->getTableAlias(false,false);

    if(Yii::app()->user->notAdmin()) {
        return array(
            'condition'=>"$t.<column_name> = :<columnName>",
            'params'=>array(':<columnName>'=>Yii::app()->user->notAdmin),
        );
    }
    else return array();
}

修改:请注意,如果您不小心,这可能会让您遇到麻烦。请参阅this issue on the Yii site for more info

答案 1 :(得分:2)

Yii不会为你做这件事,你可以自己做,但这是相当直接的。

您可以考虑范围,或查看关系并将它们全部基于当前用户。例如,要获取用户的所有帖子,您可以执行以下操作:

$posts = Post::model()->findAll();    //WRONG

$posts = Yii::app()->user->posts();   //RIGHT (Should define the relation in the User model)

答案 2 :(得分:0)