如果项目创建没有单独的操作,如何在Yii控制器中应用自定义过滤器。

时间:2013-12-31 16:52:39

标签: yii

我正在使用Yii Framework创建一个项目。

我有一种情况我不确定哪些问题与自定义访问过滤器有关。

我将使用一个与我正在尝试的类似的假设示例。

假设我们有一篇博客文章,可以选择提交评论。通常评论表单与博客文章显示在同一页面上,但根据用户的类型,表单是否呈现(例如,如果我们不允许,则呈现评论提交表单没有意义访客用户或另一组用户提交评论)。

现在,即使表单没有呈现,我仍然怀疑用户可以绕过它并尝试提交评论(例如,编辑页面的html)。

所以我要做的就是进行服务器端验证,以确保我们有合适的用户提交评论。

这就是我有点怀疑的地方。

我知道将访问过滤器应用于我们不允许某些用户执行的操作是一种很好的做法,但是因为没有单独的注释提交操作呈现单独的页面,而是处理受保护的函数评论提交,并由BlogPost控制器中的视图操作调用,我不知道如何去做。

我认为如果在调用帖子视图操作时有与评论提交相关的帖子请求,我可以执行验证,如果用户没有验证则抛出异常,但我不确定这是最好的方法

所以,问题是:Yii过滤机制是否仅适用于基于行动的行为,或者您可以将不同的过滤器应用于相同的行动,但是应用于不同的场景(例如,当行动有发布请求时为1,不)。

我是编程,PHP和Yii的初级,所以如果我有时没有意义,请原谅。

1 个答案:

答案 0 :(得分:0)

在您呈现评论列表和表单的操作中,您可以在调用checkAccess()时包装处理评论帖子的代码。例如:

// Only allow administrators to create comments.
// This part could be different depending on how you have your roles set up.
if (Yii::app()->user->checkAccess("admin")) {
    // Something like this, probably...
    $model = new Comment;
    $model->attributes = $_GET['Comment'];
    $model->save();
}

// Do all your other stuff for rendering comments
// ...

棘手的部分可能是弄清楚要检查的操作/任务/角色。这是一个关于如何管理基本RBAC的教程。 http://www.yiiframework.com/wiki/328/simple-rbac/

您还可以考虑安装某种权限模块,以帮助您在项目中设置权限。我在http://www.yiiframework.com/extension/rights

之前使用过这个