这似乎是一个简单的问题,但我似乎无法在任何地方找到明确的答案。
我正在编写一个应用程序,供多个用户使用。每家公司及其用户只能访问其数据。我希望每家公司都有自己的子域名:即company1.myapp.com,company2.myapp.com等
当他们输入该URL时,我正在使用子域从数据库获取用户信息,他们可以从那里登录。我将他们的公司ID(子域)设置为会话变量,以便应用知道哪些数据它应该从DB中拉出来
我无法解决的问题: - 如何将身份验证锁定到一个子域?即,一旦通过身份验证,如果我将域名从company1.myapp.com更改为company2.myapp.com,我该如何确保系统知道用户只对company1进行了身份验证?
任何指针都表示赞赏。
谢谢, 格雷格
答案 0 :(得分:1)
ACL(Access Control Lists)是你的答案。我链接的相关食谱条目包含您需要的所有信息。
答案 1 :(得分:0)
感谢Symfony forums的一些帮助,我似乎使用了一个监听器。
定义侦听器#config.yml - 记下优先级,否则页面似乎在终止会话之前呈现。
services:
company_listener:
class: myApp\SecurityBundle\Controller\CompanyListener
arguments:
security: "@security.context",
container: "@service_container"
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 64 }
听众类
class CompanyListener extends controller
{
public static $companyID;
private $securityContext;
protected $container;
public function __construct(SecurityContext $context, $container)
{
$this->securityContext = $context;
$this->container = $container;
}
public function onKernelRequest(GetResponseEvent $event)
{
$request = $event->getRequest();
$session = $request->getSession();
$currentHost = $request->getHost();
if(is_object($session)){
$companyID = $session->get('companyID');
$sessionHost = $session->get('subdomain');
if ($sessionHost != $currentHost) {
$this->get('request')->getSession()->invalidate();
}
}
$session->set('company', $currentHost);
}
}