Аутентификация на конкретном поддомене в Symfony - PullRequest
2 голосов
/ 14 марта 2012

это кажется достаточно простым вопросом, но я не могу найти четкого ответа нигде.

Я пишу приложение, которое будет использоваться несколькими компаниями с несколькими пользователями.Каждая компания и ее пользователи имеют доступ только к своим данным.Я хочу, чтобы каждая компания имела собственный субдомен: т.е. company1.myapp.com, company2.myapp.com и т. Д.

Когда они вводят этот URL, я использую субдомен для получения информации о пользователе из БД изтам они могут войти в систему. Я устанавливаю идентификатор своей компании (поддомен) в качестве переменной сеанса, чтобы приложение знало, какие данные оно должно извлекать из БД

Что я не могу обработать: - Как сделатьЯ блокирую аутентификацию на одном поддомене?т. е. после аутентификации, если я изменю домен с company1.myapp.com на company2.myapp.com, как я могу убедиться, что система знает, что пользователь аутентифицирован только для company1?

Любые указатели приветствуются.

Спасибо, Грег

Ответы [ 2 ]

1 голос
/ 19 марта 2012

ACL (списки контроля доступа) - ваш ответ.Ссылка на соответствующую поваренную книгу, на которую я ссылаюсь, содержит всю необходимую информацию.

0 голосов
/ 21 марта 2012

Благодаря некоторой помощи на форумах Symfony Мне кажется, что это работает с использованием слушателя.

определить слушателя # 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);

}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...