在CakePHP中,我将在哪里放置一个对会话用户执行检查的方法?

在CakePHP中,我将在哪里放置一个对会话用户执行检查的方法?,php,cakephp,separation-of-concerns,cakephp-2.4,Php,Cakephp,Separation Of Concerns,Cakephp 2.4,背景:我有一个方法levelCheck,它将当前用户的级别与几个参数进行比较,并返回true或false。我需要能够从任何控制器访问此方法,并且我还希望在助手中对其进行调用,以便在菜单上使用,等等 问题:由于蛋糕的灵活性,我几乎可以在任何地方用蛋糕打电话给任何人。这个应该放在哪里?在自定义会话中扩展?在AppController中?处理当前用户的新组件?在用户模型或用户控制器中 这里最重要的一点是,我或其他人将来如何为这样的事情确定正确的位置?将此方法放在AppController中 class

背景:我有一个方法levelCheck,它将当前用户的级别与几个参数进行比较,并返回true或false。我需要能够从任何控制器访问此方法,并且我还希望在助手中对其进行调用,以便在菜单上使用,等等

问题:由于蛋糕的灵活性,我几乎可以在任何地方用蛋糕打电话给任何人。这个应该放在哪里?在自定义会话中扩展?在AppController中?处理当前用户的新组件?在用户模型或用户控制器中


这里最重要的一点是,我或其他人将来如何为这样的事情确定正确的位置?

将此方法放在AppController中

class AppController extends Controller 
{

  function levelCheck(){
    # whatever
  }

}
function beforeFilter() 
 {

      $this->custome_componnetst_name->levelCheck(parameters.....); 
      /*action*/

}
这是此操作的正确位置。因为AppController在所有控制器中都进行了扩展,所以可以使用当前控制器对象$this->levelCheck调用此方法。

class AppController extends Controller 
{

  function levelCheck(){
    # whatever
  }

}
function beforeFilter() 
 {

      $this->custome_componnetst_name->levelCheck(parameters.....); 
      /*action*/

}

我不喜欢这个。操作不一定是每个控制器的一个方面。@user2864740为什么我的意思是你有更好的选择或意见?如果可能的话,我会使用DI/IoC。一般来说,我不喜欢子类型继承,但它似乎特别不适合这个地方。如果对这个单一的方法采用这种方法,那么在M种不同类型的操作中有N种方法时会发生什么?是否应该遵循同样的模式?也就是说,此操作不一定属于或所有控制器,但它似乎非常适合属于特定控制器/视图可能使用的服务依赖项。对于跨M种不同类型的操作的N个方法,我将使用插件,但在上面的场景中,他试图检查几乎每个操作都会使用的用户级别,因此最好将此操作放在AppController中。后续问题:如何将其与助手配对?据我所知,不鼓励让助手调用控制器方法。。但是,两次编写该方法肯定不是干巴巴的,传递数据并不能实现该方法本身的功能。你有什么建议吗?我不使用CakePHP,甚至不使用PHP,但是你不能使用DI/IoC将服务注入控制器,然后根据需要调用对该服务的请求吗?需要此服务的每个控制器都将通过DI请求此服务,并且可以适当地配置IoC生存期,例如按请求。这就是我为我的ASP.NET代码所做的,DI支持的it IoC在横切/分离此类关注点和很好地封装可测试逻辑方面非常有效。此级别检查与授权或访问相关吗?访问,但它也有其他应用程序。似乎访问/授权应该在特定控制器之外处理,这样基本的安全性就可以被分离——在其他应用程序中使用一种额外的方法。为了澄清:问题不在于该方法应该在何处执行,而是应该在何处定义。在custome ComponentSet中定义levelCheck。