2013-05-27 2 views
-1

Я использую кеширование ESI в своей сети; работали нормально, и сегодня я очистил кэш APC и кеш sf2, и я все вижу ОК. Но некоторые люди не видят панели esi и т. Д.Symfony2 кеш браузера ошибок ESI

Почему это и как его исправить? Я не понимаю, почему я и некоторые друзья видят это хорошо, а другие люди не могут?

Using symfony 2.1.7 

Rendering таким образом:

$response=new Response(); 
$response= $this->render('HomePageBundle:Default:index.html.twig', array(... 
$response->setPrivate(true); 
$response->setMaxAge(300); 

return $response; 

Мой веб/app.php файл

require_once __DIR__.'/../app/bootstrap.php.cache'; 
require_once __DIR__.'/../app/AppKernel.php'; 
require_once __DIR__.'/../app/AppCache.php'; 

$loader = new ApcClassLoader('tb_sf2', $loader); 
$loader->register(true); 

$kernel = new AppKernel('prod', false); 
$kernel->loadClassCache(); 

// wrap the default AppKernel with the AppCache one 
$kernel = new AppCache($kernel); 

$request = Request::createFromGlobals(); 
$response = $kernel->handle($request); 
$response->send(); 
$kernel->terminate($request, $response); 

Но если это было бы ошибкой, я бы не видеть ЭРИ панели тоже, верно?

я очистил кэш снова некоторое время (может быть, 30mins позже) один сказал:

Теперь я могу увидеть меню слева, но сверху, все еще ничего там

Я очистил журнал и чем мой друг сделал обновление ... этот журнал был добавлен для каждой панели ESI:

[2013-05-27 23:03:17] request.INFO: Matched route "home_page_homepage" (parameters: "_controller": "TB\HomePageBundle\Controller\DefaultController::indexAction", "_route": "home_page_homepage") [] [] 
[2013-05-27 23:03:17] app.INFO: Locale Query Guessing Service Loaded [] [] 
[2013-05-27 23:03:17] app.INFO: Locale has not been identified by the Query guessing service [] [] 
[2013-05-27 23:03:17] app.INFO: Locale Session Guessing Service Loaded [] [] 
[2013-05-27 23:03:17] app.INFO: Locale has been identified by guessing service: (Session) [] [] 
[2013-05-27 23:03:17] app.INFO: Setting [ en ] as defaultLocale for the Request [] [] 
[2013-05-27 23:03:17] security.DEBUG: Read SecurityContext from the session [] [] 
[2013-05-27 23:03:17] security.DEBUG: Reloading user from user provider. [] [] 
[2013-05-27 23:03:17] security.DEBUG: Username "MbrunoM" was reloaded from user provider. [] [] 
[2013-05-27 23:03:18] security.DEBUG: Write SecurityContext in the session [] [] 
[2013-05-27 23:03:18] request.INFO: Matched route "notifications_box_esi" (parameters: "_controller": "TB\HomePageBundle\Controller\DefaultController::notificationsBoxEsiAction", "max": "10", "_route": "notifications_box_esi") [] [] 
[2013-05-27 23:03:18] app.INFO: Locale Query Guessing Service Loaded [] [] 
[2013-05-27 23:03:18] app.INFO: Locale has not been identified by the Query guessing service [] [] 

[2013-05-27 23:03:18] app.INFO: Locale Query Guessing Service Loaded [] [] 
[2013-05-27 23:03:18] app.INFO: Locale has not been identified by the Query guessing service [] [] 
[2013-05-27 23:03:18] app.INFO: Locale Session Guessing Service Loaded [] [] 
[2013-05-27 23:03:18] app.INFO: Locale has been identified by guessing service: (Session) [] [] 
[2013-05-27 23:03:18] app.INFO: Setting [ en ] as defaultLocale for the Request [] [] 
[2013-05-27 23:03:18] security.DEBUG: Read SecurityContext from the session [] [] 
[2013-05-27 23:03:18] security.DEBUG: Reloading user from user provider. [] [] 
[2013-05-27 23:03:18] security.DEBUG: Username "MbrunoM" was reloaded from user provider. [] [] 
[2013-05-27 23:03:18] security.DEBUG: Access is denied (and user is neither anonymous, nor remember-me) by "/var/www/domain.com/framework/vendor/symfony/symfony/src/Symfony/Component/Security/Http/Firewall/AccessListener.php" at line 70 [] [] 
[2013-05-27 23:03:18] security.DEBUG: Access is denied (and user is neither anonymous, nor remember-me) by "/var/www/domain.com/framework/vendor/symfony/symfony/src/Symfony/Component/Security/Http/Firewall/AccessListener.php" at line 70 [] [] 
+0

предоставить больше информации, визуализации методы, конфигурации .. какая версия Symfony? который обратный прокси? лак? внутренний? Что говорят лог-файлы? – nifr

+0

обновлено ПОЖАЛУЙСТА, проверьте – EnchanterIO

+0

да .. я перечитал его в кучке текста и надеялся, что никто не заметит, прежде чем я его отредактировал .. если вы хотите, пожалуйста, измените свой комментарий на «t .....» на «domain»: D – EnchanterIO

ответ

0

Убедитесь, что пользователи разрешены, чтобы получить доступ к маршруту ESI на вашем брандмауэре .

Возможно, в настройках брандмауэра может возникнуть ошибка. У вашего пользователя нет доступа к маршруту '* notifications_box_esi *'. Интересная строка в журнале отладки это одна:

security.DEBUG: Access is denied (and user is neither anonymous, nor remember-me) by "/var/www/nonamepage/framework/vendor/symfony/symfony/src/Symfony/Component/Security/Http/Firewall/AccessListener.php" at line 70 [] [] [2013-05-27 23:03:18] security. 

Вы брандмауэр разрешает или ограничивает доступ к определенным маршрутам/URLS на основе ролей или доступ-решения-менеджере.

Конфигурация может быть найден в security.yml:

security: 

    # ... 

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

    # ... or with an access decision manager 
    firewalls: 
     your_firewall_name: 
      pattern: ^/ 
      # ... 

Вы можете проверить, какие роли имеет текущий пользователь с:

$this->get('security.context')->getToken()->getUser()->getRoles(); 
+0

Да, я заметил, но что с ним делать? Как «большой» доступ к этому маршруту? – EnchanterIO

+0

поиск по маршруту. проверки безопасности могут быть реализованы is_granted() в ветке, а также в действии вашего контроллера, отображающего маршрут. Возможно, с аннотациями JMSSecurityExtraBundle ... не знаю структуру проекта. – nifr

+0

ow вы имели в виду этот брандмауэр, я знаю их ... aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa omg ... кто-то ударил меня, пожалуйста ... ладно ... решение появилось посредине у меня после того, как я увидел: - {path: ^/admin/users , роли: ROLE_SUPER_ADMIN} - {путь: ^/admin, ролей: ROLE_ADMIN} эти строки ... изображение двух строк, которые я модифицировал неделю назад, появилось у меня в голове ... и я не очистил кеш с этого момента, поэтому i coul не помню, где ошибка может быть ... у меня был ROLE_SUPER_ADMIN для/esi/и я супер админ, поэтому я видел все хорошо, а мой друг тоже ... ah ah – EnchanterIO

0

Я знаю, что это проблема, с 2-х лет назад но у меня есть та же проблема: security.DEBUG: доступ запрещен (и пользователь не является ни анонимным, ни запоминающимся)

Проблема в том, что если я делаю это grante d в моем LoginSuccessHandler, который перенаправляется на мою страницу, я получил хорошую роль (ROLE_USER), но она по-прежнему не работает. Я уже очистил свой кеш, это не имеет никакого значения. Если я иду на панель инструментов отладки Symfony, он говорит: Authenticated? нет (возможно, потому что у пользователя нет ролей)

Вот моя безопасность.YML и мой LoginSuccessHandler:

security: 
 
    encoders: 
 
    Mainbundle\Entity\Personne: 
 
     algorithm:  sha512 
 
     encode_as_base64: false 
 
     iterations:  1 
 

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

 
    providers: 
 
    administrators: 
 
     entity: { class: MainBundle:Personne } 
 

 
    firewalls: 
 
    #wsse_secured: 
 
     #pattern: ^/api/.* 
 
     #stateless: true 
 
     #wsse: true 
 
    default: 
 
     #pattern:  ^/ 
 
     pattern:  ^/wsse 
 
     anonymous: ~ 
 
     #wsse:   true 
 
     form_login: 
 
     post_only:   true 
 
     use_forward:   false 
 
     provider:   administrators 
 
     csrf_provider:  form.csrf_provider 
 
     csrf_parameter:  _csrf_token 
 
     remember_me:   true 
 
     login_path:   login_route 
 
     check_path:   login_check 
 
     default_target_path: admin 
 
     failure_path:  null 
 
     success_handler:  main.component.authentication.handler.login_success_handler 
 
     logout: 
 
     path: \t \t \t \t  logout 
 
     target: \t \t \t /
 
     success_handler: main.component.authentication.handler.logout_success_handler 
 

 
    access_control: 
 
    - { path: ^/wsse/admin, roles: ROLE_USER } 
 
    - { path: ^/wsse, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
 
    - { path: ^/api, roles: IS_AUTHENTICATED_FULLY } 
 
    #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
 
    #- { path: ^/login_check, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
 

 
    #providers: 
 
     #webservice: 
 
      #id: webservice_user_provider 
 
     #in_memory: 
 
      #memory: ~ 
 

 
    #encoders: 
 
     #MainBundle\Security\User\WebserviceUser: sha512

<?php 
 
    
 
namespace MainBundle\Component\Authentication\Handler; 
 
    
 
use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface; 
 
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; 
 
use Symfony\Component\Security\Core\SecurityContext; 
 
use Symfony\Component\HttpFoundation\Request; 
 
use Symfony\Component\HttpFoundation\RedirectResponse; 
 
use Symfony\Component\Routing\Router; 
 
use Doctrine\ORM\EntityRepository; 
 
use MainBundle\Entity\UserRepository; 
 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
 
use Mainbundle\Manager\UserManager; 
 

 
class LoginSuccessHandler extends Controller implements AuthenticationSuccessHandlerInterface 
 
{ 
 
\t protected $router; 
 
\t protected $security; 
 
\t protected $usermanager; 
 
\t 
 
\t public function __construct($usermanager, Router $router, SecurityContext $security) 
 
\t { 
 
\t \t $this->router = $router; 
 
\t \t $this->security = $security; 
 
\t \t $this->usermanager = $usermanager; 
 
\t } 
 
\t 
 
\t public function onAuthenticationSuccess(Request $request, TokenInterface $token) 
 
\t { 
 
\t \t $personne = $token->getUser(); 
 
\t \t $usermanager = $this->usermanager->getRepository(); 
 
\t \t $role_array = $this->usermanager->findRole($personne->getId()); 
 
\t \t $personne->setRoles($role_array); 
 
\t \t 
 
\t \t var_dump($this->security->getToken()->getUser()->getRoles()); 
 
\t \t 
 
\t \t if ($this->security->isGranted('ROLE_SUPER_ADMIN')) 
 
\t \t { 
 
\t \t \t $response = new RedirectResponse($this->router->generate('category_index')); 
 
\t \t } 
 
\t \t elseif ($this->security->isGranted('ROLE_ADMIN')) 
 
\t \t { 
 
\t \t \t $response = new RedirectResponse($this->router->generate('category_index')); 
 
\t \t } 
 
\t \t elseif ($this->security->isGranted('ROLE_USER')) 
 
\t \t { 
 
\t \t \t $response = new RedirectResponse($this->router->generate('admin')); 
 
\t \t \t // redirect the user to where they were before the login process begun. 
 
\t \t \t /*$referer_url = $request->headers->get('referer'); 
 
\t \t \t \t \t \t 
 
\t \t \t $response = new RedirectResponse($referer_url);*/ 
 
\t \t } 
 
\t \t elseif ($this->security->isGranted('ROLE_MANAGER')) 
 
\t \t { 
 
\t \t \t $response = new RedirectResponse($this->router->generate('admin')); 
 
\t \t } 
 
\t \t return $response; 
 
\t } \t 
 
}