使用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允许经过身份验证的用户执行“创建”和“更新”操作,并允许管理员用户执行“管理员”和“删除”动作。
在我的应用程序中,还有另一种类型的用户, 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'?
答案 0 :(得分:0)
admin 和 houseAdmin 是角色的名称。因此,应使用关键角色指定,但不应指定用户:
array('allow',
'actions' => array('create','update'),
'roles' => array('houseAdmin'),
),
阅读this了解详情。