我想尝试清楚了解如何使用Yii的RBAC。我有一个item
表,fk's
与user
有关。我正在使用CGridview
为此{DB}记录提供update
选项。我现在也开始使用Access规则了。
项目表
- id
- name
......
- user_id
我的访问规则:
$auth->createOperation('updateOwnItem', 'User can update their own item', 'return $params["user_id"] == Yii::app()->user->id;');
因此,例如,我可能有一个更新文件的链接:
www.example.com/item/update/2
控制器
public function actionUpdate($id) {
if(!Yii::app()->user->checkAccess('updateOwnItem', array('user_id'=>Yii::app()->user->id))) {
throw new CHttpException(403, 'No access.');
}
// Rest of controller
但总是会返回“无法访问”。
我的其他规则工作,但有人能发现这里可能出错的地方吗?另外,我覆盖了getId()
方法,因此我的user-> id确实返回了用户ID。
提前致谢
答案 0 :(得分:2)
我可能已经解决了这个问题。如果这个错误,请随时告诉我。
<强>控制器强>
public function actionUpdate($id) {
$model = $this->loadModel($id, 'Item');
if(!Yii::app()->user->checkAccess('updateOwnItem', array('user_id' => $model->user_id))) {
throw new CHttpException(403, 'No access.');
}
我认为我必须加载$ model记录,然后通过模型访问该列。
如果这看起来不对,请告诉我。