Делаю сервис.
Помимо frontend- и backend-частей есть еще dashboard (у каждой компании свой) со своей авторизацией и прочими плюшками.
Сейчас dashboard открывается по адресу site.com/dashboard/..., firewall один на всех, данные в контроллерах выводятся в зависимости от $company_id = $this->getUser()->getCompany()->getId()
Хочу перенести dashboard на поддомены аля companyname.site.com/...
Настроил nginx так, чтобы все запросы вида companyname.site.com/ шли на site.com/.
Теперь вопросики:
1) Сейчас для тестов прописан вручную 1 firewall для тестовой компании, у которой slug = democompany. Как запилить динамические firewall'ы для всех хостов типа companyname.site.com?
security.ymlsecurity:
...
providers:
dashboard_user_provider:
id: acme.dashboard.user_provider
firewalls:
...
dashboard:
host: democompany.%domain%
pattern: ^/
form_login:
login_path: /login
check_path: /login_check
provider: dashboard_user_provider
csrf_provider: form.csrf_provider
default_target_path: /
logout:
path: /logout
target: /
anonymous: true
remember_me:
key: "%secret%"
lifetime: 31536000 # 365 days in seconds
path: /
domain: ~
access_control:
...
- { host: democompany.%domain%, path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { host: democompany.%domain%, path: ^/, role: [ROLE_DASHBOARD_USER] }
2) Чтобы ограничить выборку данных в пределах текущей компании в каждом контроллере сейчас делаю вот так:
public function listAction($company_slug) {
if ($company_slug !== $this->getUser()->getCompany()->getSlug()) {
throw $this->createNotFoundException(sprintf("No data found"));
}
...
...
}
И ежу понятно, что это говнокод.
На каком уровне делать такие проверки?
Серфинг по гуглу и гитхабу ничего не дал.
Может кто уже делал подобное? Или видел пример?
Спасибо.