首页 文章

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

提问于
浏览
2

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

我有一个情况我不确定哪个涉及自定义访问过滤器 .

我将使用一个假设的例子,它类似于我正在尝试做的事情 .

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

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

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

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

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

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

因此,问题是:Yii过滤机制是否仅适用于基于操作的操作,或者您可以将不同的过滤器应用于相同的操作,但是应用于不同的场景(例如,当操作有发布请求时为一个,而不是) .

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

1 回答

  • 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之前我用过这个

相关问题