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

如果项目创建没有单独的操作,如何在Yii控制器中应用自定义筛选器。,yii,Yii,我正在使用Yii框架创建一个项目 我有一种情况,我不确定哪种情况与自定义访问筛选器有关 我将使用一个假设的例子,它与我试图做的类似 假设我们有一篇博客文章,可以选择提交评论。通常,评论表单与博客帖子显示在同一页面上,但取决于用户类型,表单要么呈现要么不呈现(例如,如果我们不允许来宾用户或其他用户组提交评论,则呈现评论提交表单没有意义) 现在,即使表单没有呈现,我仍然怀疑用户可以绕过它并尝试提交评论(例如,编辑页面的html) 所以我要做的是做一个服务器端验证,确保我们有合适的用户提交评论 这就是

我正在使用Yii框架创建一个项目

我有一种情况,我不确定哪种情况与自定义访问筛选器有关

我将使用一个假设的例子,它与我试图做的类似

假设我们有一篇博客文章,可以选择提交评论。通常,评论表单与博客帖子显示在同一页面上,但取决于用户类型,表单要么呈现要么不呈现(例如,如果我们不允许来宾用户或其他用户组提交评论,则呈现评论提交表单没有意义)

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

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

这就是我有点怀疑的地方

我知道将访问过滤器应用于某些用户不允许执行的操作是一种很好的做法,但由于没有单独的操作用于提交单独页面的评论,而是一个受保护的函数,用于处理评论提交,并由BlogPost控制器中的view操作调用,我不知道该怎么办

我认为,如果在调用post view操作时存在与评论提交相关的post请求,我可以执行验证,如果用户未验证,则抛出异常,但我不确定这是最佳方式

因此,问题是:Yii过滤机制是否仅适用于不同的操作,或者您可以将不同的过滤器应用于相同的操作,但适用于不同的场景(例如,一个操作有post请求,另一个操作没有post请求)


我是编程、PHP和Yii的下级,所以如果有时我讲不通,请原谅。

在您呈现评论列表和表单的操作中,您可以将处理评论帖子的代码包装在调用
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的教程


您还可以考虑安装某种权限模块来帮助设置项目中的权限。我以前使用过此选项

阻止用户发布评论不是问题,我不知道如何使用“checkAccess”和自定义筛选器来实现这一点。自定义筛选器是什么意思?您的意思是不确定如何使用相同的操作句柄保存评论和筛选评论列表吗?这似乎与你原来的问题不同。