У меня есть пользовательский поставщик пользователя, следуя руководству в:Symfony2 Пользовательский поставщик пользователя не работает
http://symfony.com/doc/current/cookbook/security/custom_provider.html
Все работает без ошибок, но я не удается получить доступ к запретной зоне.
В моем классе UserProvider я устанавливаю $ role var для массива ("ROLE_USER"), и это разрешение, которое мне нужно для доступа к приложению/списку маршрута, но когда я перехожу в приложение/список, Symfony перенаправляет меня на логин снова и опять.
Я видел панель инструментов отладки и результаты:
Username anon.
Authenticated? yes
Roles { }
Token class Symfony\Component\Security\Core\Authentication\Token\AnonymousToken
Мой security.yml файл:
security:
firewalls:
secured_area:
pattern: ^/
anonymous: ~
form_login: ~
http_basic:
realm: "Secured Demo Area"
form_login:
provider: webservice
login_path: login
check_path: login_check
always_use_default_target_path: true
default_target_path: listado_actas
logout:
path: logout
target: login
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
providers:
webservice:
id: webservice_user_provider
encoders:
Symfony\Component\Security\Core\User\User: plaintext
Actas\Gestion\UserBundle\Security\User\WebServiceUser:
id: my.encoder.service
Мой класс UserProvider выглядит следующим образом. Я просто называю сервис XML, который дает мне знак того, что я буду хранить в моих Класс_пользователей:
public function loadUserByUsername($username)
{
$salt = "";
$roles = "";
// make a call to your webservice here
$password = $this->request->get('_password');
$xml_interface = new XMLInterfaceBundle();
$token = $xml_interface->requestLogin($username, $password);
if (strlen($token) > 10) {
$roles = array("ROLE_USER");
$salt = "";
return new WebserviceUser($username, $password, $salt, $roles, $token);
}
throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username));
}
Это мой UserObject в DaoAuthenticationProvider :: checkAuthentication()
Actas\Gestion\UserBundle\Security\User\WebserviceUser Object
(
[username:Actas\Gestion\UserBundle\Security\User\WebserviceUser:private] => 44886706X
[password:Actas\Gestion\UserBundle\Security\User\WebserviceUser:private] => 44886706XkCrDP
[salt:Actas\Gestion\UserBundle\Security\User\WebserviceUser:private] =>
[roles:Actas\Gestion\UserBundle\Security\User\WebserviceUser:private] => Array
(
[0] => ROLE_ADMIN
)
[my_token:Actas\Gestion\UserBundle\Security\User\WebserviceUser:private] =>
)
Это мой routing.yml :
xml_interface:
resource: "@XMLInterfaceBundle/Resources/config/routing.yml"
prefix: /
actas:
resource: "@ActasBundle/Resources/config/routing.yml"
prefix: /
login:
pattern: /login
defaults: { _controller: UserBundle:Default:login }
login_check:
pattern: /login_check
logout:
pattern: /logout
Как вы установили 'role_hierarchy' в' security.yml'? – lvarayut
У меня нет этого, нужно ли это? –
Да, я так думаю. Я упомянул в своем комментарии. – lvarayut