Catalyst模式特征WithCurrentUser:旧的一些对象,克隆模式的一些对象

时间:2015-06-12 14:38:41

标签: perl catalyst dbix-class

我有一个概念验证应用程序,可执行以下操作:

  • 在AuthTest :: Schema中,它将身份验证规则预加载到对象var。
  • 在AuthTest :: Model :: DB中使用WithCurrentUser trait在每个Web请求的架构对象上设置当前用户。
  • 在每个数据库查询中,它检查(通过继承ResultSet)是否允许当前用户执行请求的操作。
  • 在控制器代码中,我还显式调用$user->isAccessAllowed()(链接到内部访问控制检查类AuthorizationResolver)。

问题是:应用程序中的某些数据库对象似乎是通过未初始化WithCurrentUser的Schema创建的,有些数据库初始化了。例如。 $c->user本身似乎是通过Schema创建的,没有Trait WithCurrentUser。

即。当我调用$user->isAccessAllowed()而后调用$user->result_source->schema调用AuthorizationResolver时,此架构的current_user设置为undef。另一方面,当我从刚从$c->model('DB::Author')创建的ResultSet中调用AuthorizationResolver时,架构中的current_user被正确设置为当前用户。

即,似乎用户对象是从不包含WithCurrentUser特征的旧模式副本创建的(通过$c->find_user或从会话中恢复的)。任何对$c->model()的新调用都会从新克隆创建对象。

我目前通过在调用$user->isAllowedAccess()时显式向AuthorizationResolver提供用户对象来解决这个问题,但显然当有两个Schema对象副本时,整个事情可能会在另一个地方中断。

欢迎提示。

0 个答案:

没有答案