2014-10-27 6 views
0

Я разрабатываю простой блог, используя Symfony 2 для него.Symfony - Получение анонимного пользователя вместо аутентифицированного пользователя

Я застрял в вопросах безопасности. Я хочу отображать «редактировать» ссылки, если пользователь зарегистрировался на сайте, но я получаю анонимный пользователь.

Вот мой код security.yml и код шаблона. Благодаря!

security.yml:

security: 
encoders: 
    Symfony\Component\Security\Core\User\User: plaintext 

role_hierarchy: 
    ROLE_ADMIN: ROLE_USER 
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 

providers: 
    in_memory: 
     memory: 
      users: 
       admin: { password: admin, roles: ['ROLE_ADMIN'] } 

firewalls: 
    # disables authentication for assets and the profiler, adapt it according to your needs 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 

    # secures part of the application 
    blog_secured_area: 
     pattern: ^/edit 
     anonymous: ~ 
     http_basic: 
      realm: "Secured Blog Area" 

    # the blog page has to be accessible for everybody 
    blog_public: 
     pattern: ^/ 
     anonymous: true 


access_control: 
    - { path: ^/edit, roles: ROLE_ADMIN } 

article.html.twig (URL:/подробнее/{ID})

{% if is_granted('ROLE_ADMIN') %} 
    <a href="{{path('yago_web_blog_edit', {'id': article.id})}}">Editar</a> 
{% endif %} 
+0

Вы уверены, что имеете авторизуемого пользователя? вы можете проверить его в панели профилировщика –

+1

Я думаю, это связано с тем, что вы определили два контекста безопасности: 'blog_secured_area' и' blog_public'. Вы можете войти в зону безопасности, но не в общественном месте. Позвоните мне, если я ошибаюсь, но ваш 'is_granted ('ROLE_ADMIN')' тест выполняется в публичной зоне? –

+0

Когда я получаю доступ к/edit/* для времени fisrt, выдается основной файл auth. Затем, если я вхожу в систему успешно, мне не нужно делать это снова. Я предполагаю, что какой-то сеанс был создан (я новичок в symfony), но это не так. Очевидно, что я что-то пропустил. Спасибо за ваш ответ. – YagoQuinoy

ответ

1

Попробуйте переключить порядок firewals безопасности:

firewalls: 
# disables authentication for assets and the profiler, adapt it according to your needs 
dev: 
    pattern: ^/(_(profiler|wdt)|css|images|js)/ 
    security: false 

# the blog page has to be accessible for everybody 
blog_public: 
    pattern: ^/ 
    anonymous: true 

# secures part of the application 
blog_secured_area: 
    pattern: ^/edit 
    anonymous: ~ 
    http_basic: 
     realm: "Secured Blog Area" 

access_control: 
- { path: ^/edit, roles: ROLE_ADMIN } 

Поскольку я думаю, что symfony2 сканирует брандмауэры и видит их один за другим в том порядке, в котором они написаны, в вашем cas e последний говорит, что все маршруты доступны с anonymous ролью, так что это будет и по маршруту /edit.