使用gii为实体创建CRUD,它在每个控制器中创建一个 accessRules()
函数,如下所示:
public function accessRules()
{
return array(
array('allow',
'actions'=>array('create','update'),
'users'=>array('@'),
),
array('allow',
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
这基本上告诉Yii允许 authenticated 用户执行'create'和'update'操作,并允许 admin 用户执行'admin'和'delete'操作 .
在我的应用程序中,还有另一种类型的用户,即 HouseAdmin 用户,在简单的经过身份验证的用户和超级用户之间具有不同的角色 .
在这里的帮助下,我创建了一个isHouseAdmin()函数,它告诉用户是否属于HouseAdmin类型 . 现在,我需要使用该信息使accessRules()与'houseAdmin'用户一起使用,因此我可以制定如下规则:
public function accessRules()
{
return array(
array('allow',
'actions'=>array('index','view'),
'users'=>array('@'),
),
array('allow',
'actions'=>array('create','update'),
'users'=>array('houseAdmin'),
),
array('allow',
'actions'=>array('admin','delete'),
'users'=>array('admin'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
我怎么能这样做?那些'admin'和'@'定义在哪里,所以我可以添加'houseAdmin'?
1 回答
admin 和 houseAdmin 是角色的名称 . 所以应该用键 roles 指定,但不能用 users 指定:
有关详细信息,请阅读this .