CakePHP控制器beforeFilter自定义验证以防止将数据保存到数据库

hlswsv35  于 2022-11-11  发布在  PHP
关注(0)|答案(1)|浏览(204)

我有一个控制器和一些功能里面。一些功能基本上是保存数据到数据库。其中一个功能需要一个过滤器,特定类型的用户不能做写访问到数据库。
我的问题是如何阻止将数据保存到特定用户角色的数据库中。

class TestController extends AppController {
     public function beforeFilter(){
        if(in_array($this->action, ['f1','f2'])) {
             if($this->authenticatedUser['role'] == 'readonly') {
                //return message
                //block save data into db
             }
         }
     }

     public function f1() {
        //save data into db
     }

     public function f2() {
        //save data into db
     }

     public function f3() {
     }
}

当我尝试使用f1或f2写入时,它会转到beforeFilter并显示消息,但数据也会保存到db中。当我尝试将数据写入beforeFilter上的db时,我应该如何阻止它?

e4eetjau

e4eetjau1#

以下是一些逻辑:

  • 检查请求是否为post
  • 检查请求的方法
  • 如果两个检查都匹配,创建一条快速消息,并将GET重定向到所需的方法
if($this->request->is('post') && in_array($this->action, ['f1','f2'])) {
    if($this->authenticatedUser['role'] == 'readonly') {
         //set flash message
         //get redirect to action
    }
}

下一页

function f1() {
   // if request is post, save data
   // else return find data or empty object / array
}

相关问题