เข้าถึงข้อผิดพลาดที่ถูกปฏิเสธหลังจากติดตั้ง SUPEE-6285


85

หลังจากติดตั้งแพตช์ SUPEE-6285 บน Magento 1.7.0.2 ของเราแล้วระบบจะแสดงข้อผิดพลาด " ปฏิเสธการเข้าถึง " เมื่อพยายามเข้าถึงโมดูลที่กำหนดเองทั้งหมดสำหรับผู้ใช้ที่มีสิทธิ์เลือก (ไม่ใช่สิทธิ์ทั้งหมด) ภาพหน้าจอด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

สิทธิ์ของผู้ใช้ถูกตั้งค่าอย่างถูกต้องในทรัพยากรบทบาทและเราได้ใช้การตั้งค่าสิทธิ์อีกครั้งเพื่อให้แน่ใจว่ามีการตั้งค่าเหล่านี้

ปัญหาได้รับการทำซ้ำในส่วนขยายที่กำหนดเองหลายรายการดังนั้นจึงไม่ใช่เพียงส่วนขยายเดียวที่ไม่ทำงาน

ฉันออกจากระบบ / ล้างแคชและยืนยันว่าคอมไพเลอร์ถูกปิดใช้งาน

ทุกคนสามารถแนะนำวิธีแก้ไขปัญหานี้ได้หรือไม่

คำตอบ:


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>โหนด


แก้ไขอัตโนมัติ

มีเครื่องมือบรรทัดคำสั่งที่ดีโดย SupportDesk.nu ที่https://gist.github.com/raybogman/eec47237b8ef0d4dd0fd

มันจัดการกับ_isAllowed()สายที่ขาดหายไปได้ค่อนข้างดี แต่จะส่งผลให้รหัสที่ใช้งานไม่สมบูรณ์หรือมีการเข้ารหัสไฟล์ดังนั้นคุณยังควรตรวจสอบผลลัพธ์ด้วยตนเอง


เพิ่งทดสอบโซลูชันนี้และการให้สิทธิ์ "แผงควบคุม" ไม่ได้สร้างความแตกต่าง สิทธิ์ "แดชบอร์ด" นั้นเหมือนกับสิทธิ์ใน "แดชบอร์ด" ภายใต้บทบาททรัพยากรหรือเป็นที่อื่นหรือไม่
Chris

2
อัปเดตคำตอบฉันตีความการกำหนดค่าที่ผิดสำหรับadminจริง ๆ แล้วมันจะคืนค่าจริงสำหรับผู้ใช้ที่มีสิทธิ์ทั้งหมด
เฟเบียน Schmengler

3
กรุณาอย่าเพียงแค่ทำreturn true;ถ้ามีอะไรที่กำหนดไว้สำหรับ ACL ในของคุณหรือconfig.xml adminhtml.xmlเพิ่มสิทธิ์ในไฟล์ xml และตรวจสอบอย่างถูกต้อง ดูเว็บไซต์ของ Alan Stormหรือที่นี่สำหรับข้อมูลเกี่ยวกับการสร้างการอนุญาต
kel

มันทำงานได้ดีสำหรับโมดูลที่กำหนดเอง แต่ถ้ามีส่วนสำหรับการตั้งค่าการตั้งค่าเราจะให้การเข้าถึงสำหรับบล็อกนี้ได้อย่างไร?
mjdevloper

1
ควบคุมเส้นทางที่ configued <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');
}

ในกรณีนั้นจะคืนการตั้งค่า ACL จาก Magento ฉันแค่สงสัยว่า Magento Core Team จะแก้ไขด้วย Patch ตัวอื่นหรือควรจะทำใน app / code / local เป็น Fix ทั่วโลก ...


3
นี่ไม่ใช่พฤติกรรมที่ตั้งใจไว้ พวกเขาทำให้ตัวควบคุมผู้ดูแลระบบ จำกัด โดยค่าเริ่มต้นตามวัตถุประสงค์ ดังนั้นผู้ขายส่วนขยายจึงถูกบังคับให้อัปเดตทันที
เฟเบียน Schmengler

1
ดังนั้นใช่ถ้าใช้งานได้สำหรับคุณให้แก้ไขในapp/code/localแต่แสดงส่วนขยายที่กำหนดเองโดยไม่ต้องใช้ ACL หากผู้ใช้มีสิทธิ์เท่านั้นSystem > Configurationไม่ใช่สิ่งที่ทุกคนต้องการ
เฟเบียน Schmengler

โซลูชันของคุณเป็นวิธีแก้ปัญหาและไม่แนะนำ! คุณสามารถคืนค่าจริงตามค่าเริ่มต้น (เหมือนเดิมในตัวควบคุมของผู้ดูแลระบบก่อนแพทช์นี้) ทางออกที่ดีกว่า: กำหนดค่ารายการควบคุมการเข้าถึงของคุณอย่างถูกต้อง
แมทเธียสไคลน์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.