大家好我现在用symfony开发一个应用程序,我有一个frontOffice和一个Backoffice视图,对于frontOffice,我使用FosUserBundle来建立连接用户,而对于后台,我会与in_memory提供者建立连接juste。当我使用这个解决方案时,我在同一个登录页面(/ login)中有相同的重定向,我会将管理员的后台重定向到(/ admin / login)。
我的安全档案:
# app/config/security.yml
security:
encoders:
Project\UserBundle\Entity\User: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
main:
id: fos_user.user_provider.username_email
in_memory:
memory:
users:
user: { password: userpass, roles: [ 'ROLE_ADMIN' ] }
admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
firewalls:
main:
pattern: ^/
anonymous: true
provider: main
form_login:
login_path: fos_user_security_login
check_path: fos_user_security_check
default_target_path: /index
logout:
path: fos_user_security_logout
target: /login
remember_me:
secret: %secret%
main_login:
pattern: ^/admin/login$
anonymous: true # On autorise alors les anonymes sur ce pare-feu
main2:
pattern: ^/admin
anonymous: false
provider: in_memory
form_login:
default_target_path: /admin
login_path: /admin/login
check_path: /admin/login_check
logout:
path: /admin/logout
target: /admin/login
access_control:
#- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
#- { path: ^/admin, roles: ROLE_ADMIN }
我的Backoffice的loginAction
<?php
namespace Project\BackofficeBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
class SecurityController extends Controller
{
public function loginAction(Request $request)
{
// Si le visiteur est déjà identifié, on le redirige vers l'accueil
if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
return $this->redirectToRoute('project_backoffice_products');
}
// Le service authentication_utils permet de récupérer le nom d'utilisateur
// et l'erreur dans le cas où le formulaire a déjà été soumis mais était invalide
// (mauvais mot de passe par exemple)
$authenticationUtils = $this->get('security.authentication_utils');
return $this->render('ProjectBackofficeBundle:Backoffice:login.html.twig', array(
'last_username' => $authenticationUtils->getLastUsername(),
'error' => $authenticationUtils->getLastAuthenticationError(),
));
}
}
我的广告文件
login:
path: /admin/login
defaults:
_controller: ProjectBackofficeBundle:Security:login
admin_login_check:
path: /admin/login_check
logout:
path: /admin/logout