我有一个概念验证应用程序,可执行以下操作:
$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对象副本时,整个事情可能会在另一个地方中断。
欢迎提示。