SUPEE-6285 설치 후 액세스 거부 오류


85

Magento 1.7.0.2 저장소에 SUPEE-6285 패치를 설치 한 후 선택적 권한 (모든 권한이 아님)을 가진 사용자의 모든 사용자 정의 모듈에 액세스하려고 하면 시스템에 " 액세스 거부 "오류가 표시됩니다. 아래 스크린 샷.

여기에 이미지 설명을 입력하십시오

사용자 권한이 역할 리소스 에서 올바르게 설정되었으며 권한 설정이 다시 적용되도록 권한 설정을 다시 적용했습니다.

여러 사용자 정의 확장에서 문제가 재현되어 작동하지 않는 단일 확장이 아닙니다.

로그 아웃 / 로그인하고 캐시를 지우고 컴파일러가 비활성화되었음을 확인했습니다.

누구 든지이 문제를 해결하는 방법을 제안 할 수 있습니까?

답변:


129

여기에 쓰여진대로 :

제한된 관리자 계정을 사용하면 일부 타사 확장 메뉴가 더 이상 작동하지 않을 수 있습니다. 기본 반환 값 Mage_Adminhtml_Controller_Action::_isAllowed()이에서 (으)로 변경 되었기 true때문 Mage::getSingleton('admin/session')->isAllowed('admin')입니다. ACL을 사용하지 않기 때문에 관리 컨트롤러에서이 방법을 무시하지 않는 확장은 이제 "ALL" 권한이 필요합니다 .

유일한 해결책은 확장을 패치하고이 방법을 모든 관리 컨트롤러에 추가하는 것입니다.

protected function _isAllowed()
{
    return true;
}

또는 실제로 ACL 자원이 다음에 정의 된 경우 etc/adminhtml.xml:

protected function _isAllowed()
{
    return Mage::getSingleton('admin/session')->isAllowed('ENTER RESOURCE IDENTIFIER HERE');
}

리소스 식별자를 확인하는 방법

이것은 adminhtml.xml다음과 같이 보일 수 있습니다.

Mage_Setup 예 (acl)

아래의 노드 이름을 가지고 acl/resources/admin/children, 다음 건너 뛰는 children노드를.

누락 된 리소스 식별자를 만드는 방법

<menu>정의 만 있고 정의 <acl>는없는 경우 고유 한 정의도 가능합니다 (동일한 모듈 내에있을 필요가 없으므로 타사 파일을 수정하지 않아도 됨) ::

Mage_Setup 예 (메뉴)

아래 menu에 모든 것을 복사 acl/resources/admin/children하고 <action>노드를 제거하십시오 .


자동 수정

https://gist.github.com/raybogman/eec47237b8ef0d4dd0fd 에는 SupportDesk.nu의 훌륭한 명령 줄 도구가 있습니다.

대부분의 누락 된 _isAllowed()호출을 잘 처리 하지만 난독 처리되거나 암호화 된 소스 파일로 인해 코드가 깨져서 결과를 수동으로 확인해야합니다.


이 솔루션을 방금 테스트 한 결과 "대시 보드"권한을 부여해도 아무런 차이가 없습니다. "대시 보드 권한"이 역할 리소스의 "대시 보드"권한과 동일합니까 아니면 다른 곳입니까?
Chris

2
답변을 업데이트했습니다.에 대한 구성을 잘못 해석했으며 admin실제로 모든 권한을 가진 사용자에게만 true를 반환합니다.
Fabian Schmengler

3
또는 return true;에 ACL에 대해 정의 된 것이없는 경우 에만 수행하지 마십시오 . 대신 xml 파일에 권한을 추가하고 올바르게 확인하십시오. 살펴보세요 앨런 스톰의 사이트 또는 여기를 권한을 만드는 방법에 대한 정보를 원하시면. config.xmladminhtml.xml
kel

커스텀 모듈에서는 잘 작동하지만 구성 설정 섹션이 있으면 어떻게이 블록에 액세스 할 수 있습니까?
mjdevloper

1
로 구성된 경로에 대한 컨트롤러입니다 <use>admin</use>. 그들은 일반적으로 확장 Mage_Adminhtml_Controller_Action합니다.
Fabian Schmengler

2

필자의 경우 타사 모듈의 경우 adminhtml 컨트롤러에 아래 코드를 추가하면 효과가 있습니다.

protected function _isAllowed()

{
     return true;
}

-5

그것은해야한다:

protected function _isAllowed()
{
    return Mage::getSingleton('admin/session')->isAllowed('system/config');
}

이 경우 Magento에서 ACL 설정을 반환합니다. Magento Core Team이 다른 패치로 문제를 해결할지 궁금하거나 app ​​/ code / local에서 전역 수정으로 수행해야합니다 ...


3
이것은 의도 된 동작이 아닙니다. 그들은 기본적으로 관리 컨트롤러를 제한적으로 만들었습니다. 따라서 실제로 확장 공급 업체는 지금 업데이트해야합니다.
Fabian Schmengler

1
예, 그래도 문제가 해결되지 않으면에서 수정하십시오 app/code/local. 그러나 사용자에게 권한이있는 경우에만 ACL없이 사용자 정의 확장을 표시하십시오 System > Configuration.
Fabian Schmengler

해결책은 해결책이며 권장하지 않습니다! 이 패치 이전의 관리자 컨트롤러에서와 같이 기본적으로 true를 반환 할 수 있습니다. 더 나은 솔루션 : 액세스 제어 목록을 올바르게 구성하십시오.
마티아스 클라인
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.