Securized система входа в систему в Symfony 3

У меня проблема с входом в систему в Symfony 3. Так что мой security.yml является:

security:
role_hierarchy:
  ROLE_ADMIN:       ROLE_USER
  ROLE_FMTI:        ROLE_FMTI
  ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
firewalls:
  dev:
      pattern:  ^/(_(profiler|wdt)|css|images|js)/
      security: false
  secured_area:
      pattern:    ^/admin
      anonymous: ~
      form_login:
          always_use_default_target_path: true
          default_target_path: /admin/homepage
          login_path:  /admin/login
          check_path:  /admin/login_check
      logout:
          path:   /admin/logout
          invalidate_session: true
          target: /admin/login
  access_control:
  - { path: ^/admin/homepage, roles: ROLE_ADMIN }

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

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

Маршрут:

app_admin_homepage:
  path:     /homepage
  defaults: { _controller: AppAdminBundle:Login:index }
login:
  path:   /login
  defaults:  { _controller: AppAdminBundle:Login:login }
login_check:
  path:   /login_check
logout:
  path: /logout

И метод входа из LoginController:

public function loginAction(Request $request)
{
    $authenticationUtils = $this->get('security.authentication_utils');
    // get the login error if there is one
    $error = $authenticationUtils->getLastAuthenticationError();
    // last username entered by the user
    $lastUsername = $authenticationUtils->getLastUsername();

    return $this->render('AppAdminBundle:Member:login.html.twig', array(
        'last_username' => $lastUsername,
        'error'         => $error,
    ));
}

Проблема в том, что если я вхожу в приложение с учетными данными: admin/admin. После этого я делаю выход.

  1. Если бы я попытался получить доступ test.dev/admin/homepage ----> Я перенаправляю на страницу входа test.dev/admin/loginтак что это хорошо, я захожу как admin,

  2. Если бы я попытался получить доступ test.dev/admin/news/all -----> Я могу получить доступ к этой странице без входа в систему, и я вхожу как anonymous

Поэтому я хочу перенаправить на страницу входа для всех маршрутов /admin/* если пользователь не аутентифицирован. Спасибо и извините за мой английский

1 ответ

Решение

В Контроль доступа нужно добавить это:

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

Это означает, что для чего-либо кроме / admin / route требуется ROLE_ADMIN.

-- Обновить

Если вам нужен доступ к / admin / login /, вам нужно добавить к каждому маршруту администратора, кроме / login, шаблон пути, такой как / admin / api /, так что в вашем контроле доступа вы получите следующее:

access_control:
      - { path: ^/admin/api/, roles: ROLE_ADMIN }
Другие вопросы по тегам