Как предоставить роль пользователю во время разработки?

Можно ли динамически назначить роль текущему пользователю (мне)?

Я работаю над сайтом на моем локальном компьютере, на сервере размещена рабочая версия сайта. 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 объект.

0

Решение

Мне нужно было загрузить любого пользователя из базы данных с помощью 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 среды, он использует традиционная форма входа и отобразить список пользователей, чем я могу выдать себя за.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]