Можно ли динамически назначить роль текущему пользователю (мне)?
Я работаю над сайтом на моем локальном компьютере, на сервере размещена рабочая версия сайта. 2 версии (dev
а также prod
) использовать систему аутентификации, которая использует сервер CAS, мы изменили брандмауэр, чтобы избежать этой системы аутентификации в dev
среда. Но когда я работаю локально, я вошел в систему только как анонимный пользователь, брандмауэр настроен на разрешение доступа к администрированию анонимному пользователю, только если он подключен с 127.0.0.1
адрес. Таким образом, я могу видеть любую часть администрирования, но не могу смоделировать доступ из разных ролей во время разработки.
Другими словами, я ищу что-то вроде этого:
class AcmeController
{
public AcmeAction()
{
...
$user->setRole('ROLE_ADMIN');
...
}
}
Или любой другой способ установить роль.
Обновить:
Я проверял это:
class AcmeController
{
public AcmeAction()
{
...
$user = $this->getUser();
$user->setRole('ROLE_ADMIN');
...
}
}
Это приводит к фатальной ошибке:
Неустранимая ошибка: вызов функции-члена addRole () для необъекта в […] AcmeController.php в строке […]
Я думаю, что это связано с тем, что текущий пользователь является анонимным, поэтому он не существует в БД, и я не могу получить доступ к User
объект.
Мне нужно было загрузить любого пользователя из базы данных с помощью User
юридическое лицо непосредственно в dev
окружение и использование пакета SSO / LDAP в prod
среда.
Решением было изменить файлы конфигурации, чтобы использовать разные контроллеры входа в систему. dev
а также prod
среды:
приложение / Config / security.yml: где переменные будут загружены
security:
[...]
providers:
%security_providers%
firewalls:
dev:
[...]
user_manager: %security_firewalls_user_management%
приложение / Config / config_dev.yml а также приложение / Config / config_test.yml: переменные объявлены
Для входа используйте традиционную форму входа
parameters:
security_providers:
user_db:
entity:
class: Acme\AcmeBundle\Entity\User
property: id
security_firewalls_user_management:
pattern: ^/
anonymous: ~
form_login: ~
logout: ~
switch_user: true
login_controller: "AcmeDevBundle:Security:login"
приложение / Config / config_prod.yml: переменные объявлены
parameters:
security_providers:
user_auth:
entity:
class: Acme\AcmeBundle\Entity\User
property: other_id
security_firewalls_user_management:
pattern: ^/
anonymous: ~
trusted_sso:
manager: user_sso
login_action: false
logout_action: false
check_path: /
login_path: page_login
logout: true
switch_user: true
login_controller: "AcmeBundle:Main:login"
Приложение / AppKernel.php
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
[...]
);
if (in_array($this->getEnvironment(), array('dev', 'test'))) {
[...]
# Bundle only activated in dev and test environments
$bundles[] = new Acme\DevBundle\AcmeDevBundle();
}
return $bundles;
}
[...]
DevBundle
загружается только в dev
а также test
среды, он использует традиционная форма входа и отобразить список пользователей, чем я могу выдать себя за.
Других решений пока нет …