Nói ví dụ Tôi cho một vai trò mới cho người dùng hiện thực trong một bộ điều khiển, như vậy:Symfony 2.3: Làm cách nào để làm mới người dùng đã xác thực từ cơ sở dữ liệu?
$em = $this->getDoctrine()->getManager();
$loggedInUser = $this->get('security.context')->getToken()->getUser();
$loggedInUser->addRole('ROLE_XYZ');
$em->persist($loggedInUser);
$em->flush();
Trên tải trang tiếp theo, khi tôi lấy người dùng xác thực một lần nữa:
$loggedInUser = $this->get('security.context')->getToken()->getUser();
Họ không được cấp vai trò. Tôi đoán điều này là do người dùng được lưu trữ trong phiên và cần phải được làm mới.
Làm cách nào để thực hiện việc này?
Tôi đang sử dụng FOSUserBundle nếu điều đó tạo sự khác biệt.
Cơ sở dữ liệu có được cập nhật không? – cheesemacfly
Có cơ sở dữ liệu được cập nhật. Vì vậy, nếu tôi đăng xuất và trong một lần nữa thì vai trò mới được phản ánh. –
Tôi đã kiểm tra vai trò mới trong một mẫu khuôn mẫu bằng cách sử dụng 'if is_granted ('ROLE_XYZ')'. Tôi đã thay đổi điều này thành 'if app.user.hasRole ('ROLE_XYZ')' và bây giờ nó đang hoạt động. Lạ ... –