我想知道如何在整个模块中执行访问控制。让我解释一下:如果我有一个仅用于创建会话的模块(/authentication/)。还有一个包含主应用程序的模块(/Main/)。
如果用户正确创建了会话,我想要做的是检查主模块上的任何请求。
在我对互联网的研究中,我看到了一种方法。我不确定,所以请告诉我我的解决方案是否良好:我将在我的引导函数(在 module.php 上)中实现一个事件,该事件将检查会话是否正确创建。如果不是,我将重定向到模块身份验证。
public function onBootstrap($e){
$eventManager = $e->getApplication()->getEventManager();
$auth = new AuthenticationService();
if (!$auth->hasIdentity()) {
$response = $e->getResponse();
$response->getHeaders()->addHeaderLine('Location', 'authentification');
$response->setStatusCode(302);
}
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
}
你觉得这个解决方案怎么样?
不幸的是,这个解决方案并不好。我不知道为什么,但似乎即使在模块身份验证中也会执行此代码。因此,在第一次调用时,当您尝试进入 url:/main 时,您将被重定向到模块 /authentication 并且代码将再次被重新执行,并且模块会将您重定向到 /authentication 并一次又一次地再次...
所以我认为解决方案是检查请求的 url 是否与这个 /authentication 不同。
这该怎么做 ?
希望我的问题清晰易懂。
谢谢你=D