새 확장 설치에서 404 오류를 피하는 방법


27

system.xml 구성으로 새 확장을 설치할 때 Magento에 표시되는 매우 일반적인 오류입니다 .

System->Configuration->Extension탭으로 이동 하면 404 오류가 표시됩니다. 로그 아웃했다가 다시 로그인해야합니다. 그러나 이것을 피할 수있는 방법이 있습니까?


믿지 않습니다. ACL 트리는 사용자 세션에 로그인하여 저장할 때로드됩니다.
— Peter O'Callaghan

한 가지 아이디어가 있지만 가능한지 모르겠습니다. 확장 기능을 설치 한 후 "Magento Connect Manage"의 동작을 변경하여 모든 관리자 세션을 만료시킬 수 있습니다. 그러나 그 수는 없습니다 (((확장의 범위에서 수행에만 연결 관리자의 범위에서..
— oleksii.svarychevskyi

2
귀하의 질문은 내 질문에 대답했습니다! 감사!
— Ian Phillips

이안이 "당신의 질문이 내 질문에 대답했습니다"라고 말한 것처럼 나는 의견을 남겨야했습니다. 로깅은 트릭을했다!
— Hans Wassink

답변:


16

@Cags가 말했듯이 세션이 초기화 될 때 (관리자가 로그인 할 때 AKA) ACL 트리가로드되기 때문에 (쉽게) 가능하지 않습니다.
가능한 해결 _isSectionAllowed방법은 시스템 구성 제어기 (( Mage_Adminhtml_System_ConfigController::_isSectionAllowed)) 에서 메소드 를 대체 하고 ACL 트리를 다시로드하는 것입니다.
다음과 같은 것 :

protected function _isSectionAllowed($section)
{
    $session = Mage::getSingleton('admin/session');
    $session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());//reload the tree
    return parent::_isSectionAllowed($secntion); //all the code from the original method
}

그러나 이는 구성 섹션에 액세스 할 때마다 ACL 트리가 다시로드됨을 의미합니다. 나는 이것을하는 데 아무런 의미가 없다.
또한 하나의 특정 확장에 대해서는 그렇게 할 수 없습니다. 핵심 클래스를 다시 작성해야합니다.


섹션이 허용되지 않으면 ACL 트리 만 재설정하는 것이 좋습니다. 솔직히 모듈 설치 후와 관리자가 다시 로그하기 전에 ACL이 허용하지 않은 섹션을로드하려고 시도한 것을 기억할 수 없습니다.
— pspahn

시도하지 않았기 때문에 미친 아이디어입니다.이 시점에서 세션을 사용할 수 있는지 확실하지 않지만 설치 스크립트에서 다시로드 할 수 있습니까? 물론 이것은 관리자로 로그인 한 요청에 의해 설치 스크립트가 트리거되고 다른 로그인 한 백엔드 사용자에게 영향을 미치지 않는 경우에만 작동합니다.
— Fabian Schmengler

2
@fschmengler. 나는 전에 그것을 시도하지 않았지만 그것이 효과가 있다고 생각합니다. 솔직히 말해서 난 그만한 가치가 있다고 생각하지 않습니다.
— Marius

9

나는 거의 사용자 정의하지 않고이 문제를 해결할 방법을 찾았습니다. 우리가 필요한 것은 :

  1. ACL을 다시로드하고 (로그 아웃 및 로그인하지 않은) 새로운 컨트롤러 작업은 이전 페이지로 다시 리디렉션됩니다.

    class SSE_AclReload_Adminhtml_Permissions_AclReloadController extends Mage_Adminhtml_Controller_Action
    {
        public function indexAction()
        {
            $session = Mage::getSingleton('admin/session');
            $session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
            Mage::getSingleton('adminhtml/session')->addSuccess($this->__('ACL reloaded'));
            $this->_redirectReferer();
        }
    }
    
  2. admin_noroute핸들 의 레이아웃 업데이트 . 이 새 컨트롤러 작업에 대한 링크를 관리자 404 페이지에 직접 추가합니다.

    <layout version="0.1.0">
        <adminhtml_noroute>
            <reference name="content">
                <block type="adminhtml/template" name="content.aclReload" after="content.noRoute" template="sse_aclreload/button.phtml" />
            </reference>
        </adminhtml_noroute>
    </layout>
    
  3. 링크가있는 템플릿 :

    <a href="<?php echo $this->getUrl('adminhtml/permissions_aclReload/index'); ?>">
        <?php echo $this->__('Reload ACL'); ?>
    </a>
    

Github에서 SSE_AclReload 의 작은 확장으로 함께 던졌습니다 ( 시스템> 권한 메뉴 에도 링크를 추가 합니다)

admin / noroute 조치가 전달되 자마자 ACL을 자동으로 다시로드하려고 시도 할 수도 있지만 1) 진행중인 작업을 알고 2) 선택할 수있는 것을 선호합니다.


1

새 확장 프로그램을 설치할 때 문제가 발생하면 404 오류 페이지가 표시되면 한 가지만 수행하면됩니다 System > Permissions > Roles. 그냥 역할을 저장하고 삭제하는 것을 잊지 마세요 var/cache과 var/seesion 그리고 문제가 해결되었습니다.


"일반 var / 세션"? 모든 고객을 로그 아웃하고 장바구니를 비우려면? 아니.
— Fabian Schmengler 2016 년

nup, var 폴더에서 세션을 지우십시오
— Hiral Unadkat

불행히도 이것은 동일합니다. 파일 세션 핸들러를 사용하지 않는 경우를 제외하고. 이 경우 파일이 없기 때문에 아무 것도 수행하지 않습니다.
— Fabian Schmengler

그런 다음 시스템> 권한> 역할로 이동하여 역할을 저장해야합니다.
— Hiral Unadkat

그것은 당신의 대답에 대한 다른 문제를 우리에게 가져옵니다.
— Fabian Schmengler 2016 년

0

이 시도:

  1. 이동 > 시스템 - -> 캐시 관리 관리자
  2. 모든 캐시 유형을 선택하십시오
  3. 작업을 새로 고침으로 유지하고 제출을 누르십시오.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.