我为管理员特定操作创建了模块。我不想为每个控制器编写相同的访问规则,这不是很好的编码风格。
问问题
2854 次
4 回答
3
模块就像一个具有分离目录结构的子应用程序。它不负责过滤或检查权限。
唯一重要的解决方案是按照 Ismael 的提议定义一个新的抽象。
class ExtendedController
{
public function rules()
{
return array_merge(parent::rules(), array(
// your rules
));
}
}
于 2009-10-23T17:26:19.833 回答
3
一种解决方案是为每个经过身份验证的类扩展一个通用的 BaseClass 控制器。
这样你就可以写一次。
于 2009-10-23T10:11:45.380 回答
1
Ismael 和pesaa 选择非常好,甚至可以快速实施,但我总是推荐更强大的替代方案,如RBAC 模型。你可以在http://code.google.com/p/srbac/找到一个非常好的Yii RBAC图形用户界面
于 2009-11-18T18:13:01.217 回答
0
这对我有用:
class extendedController extends baseController
{
public function accessRules()
{
return array_merge(
// This controller's rules are added first:
// Allow all users to call the 'hello' action.
array(
array('allow',
'actions'=>array('hello'),
'users'=>array('*'),
),
),
// BaseController rules are added last, especially
// if the last rule in the baseController denies all
// users that were not allowed yet.
parent::accessRules()
);
}
public function actionHello()
{
echo('Hello!');
}
}
于 2014-04-29T19:33:31.173 回答