Truy cập các lỗi bị từ chối sau khi cài đặt SUPEE-6285


85

Sau khi cài đặt bản vá SUPEE-6285 trên cửa hàng Magento 1.7.0.2 của chúng tôi, hệ thống sẽ hiển thị lỗi " Truy cập bị từ chối " khi cố gắng truy cập tất cả các mô-đun tùy chỉnh cho người dùng có quyền chọn lọc (không phải tất cả các quyền). Ảnh chụp màn hình bên dưới.

nhập mô tả hình ảnh ở đây

Các quyền của người dùng được đặt đúng trong Tài nguyên vai trò và chúng tôi đã áp dụng lại các cài đặt quyền để đảm bảo các quyền này được đặt.

Vấn đề đã được sao chép trên nhiều tiện ích mở rộng tùy chỉnh để nó không chỉ là một tiện ích mở rộng không hoạt động.

Tôi đã đăng xuất / đăng nhập, xóa bộ đệm và xác nhận rằng trình biên dịch đã bị tắt.

Bất cứ ai có thể đề nghị làm thế nào để khắc phục sự cố này?

Câu trả lời:


129

Như được viết ở đây :

Nếu bạn sử dụng tài khoản quản trị viên bị hạn chế, một số menu của tiện ích mở rộng bên thứ ba có thể không hoạt động nữa đối với họ. Lý do là giá trị trả về mặc định của Mage_Adminhtml_Controller_Action::_isAllowed()đã được thay đổi từ truethành Mage::getSingleton('admin/session')->isAllowed('admin'). Các tiện ích mở rộng không ghi đè phương thức này trong bộ điều khiển quản trị viên vì chúng không sử dụng ACL, giờ cần đặc quyền "TẤT CẢ" .

Giải pháp duy nhất là vá các phần mở rộng và thêm phương thức này vào tất cả các bộ điều khiển quản trị của chúng:

protected function _isAllowed()
{
    return true;
}

Hoặc nếu họ thực sự có tài nguyên ACL được xác định trong etc/adminhtml.xml:

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

Cách xác định mã định danh tài nguyên

Đây là cách một adminhtml.xmlcó thể trông như thế nào:

Ví dụ Mage_Setup (acl)

Lấy tên nút bên dưới acl/resources/admin/children, bỏ qua các childrennút sau .

Cách tạo định danh tài nguyên bị thiếu

Nếu chỉ có một <menu>định nghĩa nhưng không có <acl>định nghĩa, bạn cũng có thể định nghĩa riêng của mình (nó không phải nằm trong cùng một mô-đun, do đó không có tệp bên thứ 3 nào phải được sửa đổi) ::

Ví dụ Mage_Setup (menu)

Sao chép mọi thứ bên dưới menuđể acl/resources/admin/childrenvà loại bỏ các <action>nút.


Tự động sửa

Có một công cụ dòng lệnh tốt của SupportDesk.nu tại https://gist.github.com/raybogman/eec47237b8ef0d4dd0fd

Nó xử lý hầu hết các _isAllowed()cuộc gọi bị thiếu khá tốt nhưng sẽ dẫn đến mã bị hỏng với các tệp nguồn bị mã hóa hoặc bị mã hóa, vì vậy bạn vẫn nên kiểm tra kết quả theo cách thủ công.


Chỉ cần thử nghiệm giải pháp này và cho phép "Bảng điều khiển" không có sự khác biệt. Là "đặc quyền Bảng điều khiển" giống như quyền "Bảng điều khiển" trong Tài nguyên vai trò hay đây là nơi nào khác?
Chris

2
Cập nhật câu trả lời, tôi hiểu sai cấu hình cho admin, nó thực sự chỉ trả về đúng cho người dùng với tất cả các quyền riêng tư.
Fabian Schmengler 8/07/2015

3
Vui lòng không làm return true;nếu không có gì được xác định cho ACL trong config.xmlhoặc adminhtml.xml. Thay vào đó, hãy thêm quyền vào tệp xml và kiểm tra đúng cách. Hãy xem trang web của Alan Storm hoặc ở đây để biết thông tin về việc tạo quyền.
kel

Nó hoạt động tốt cho mô-đun tùy chỉnh nhưng nếu có phần cài đặt cấu hình, làm thế nào chúng tôi có thể cấp quyền truy cập cho khối này?
mjdevloper 13/07/2015

1
Bộ điều khiển cho các tuyến đường được cấu hình với <use>admin</use>. Họ thường mở rộng Mage_Adminhtml_Controller_Action.
Fabian Schmengler

2

Trong trường hợp của tôi đối với các mô-đun của bên thứ ba, việc thêm mã dưới đây vào bộ điều khiển adminhtml đã hoạt động:

protected function _isAllowed()

{
     return true;
}

-5

Nó nên là:

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

Trong trường hợp đó, nó trả về Cài đặt ACL từ Magento. Tôi chỉ tự hỏi liệu Magento Core Team sẽ sửa nó bằng một Bản vá khác hay điều này nên được thực hiện trong ứng dụng / mã / cục bộ như là một bản sửa lỗi toàn cầu ...


3
Đây không phải là hành vi dự định. Họ đã làm cho các bộ điều khiển quản trị bị hạn chế theo mặc định về mục đích. Vì vậy, thực sự các nhà cung cấp mở rộng buộc phải cập nhật ngay bây giờ.
Fabian Schmengler

1
Vì vậy, vâng, nếu điều đó phù hợp với bạn, hãy sửa nó app/code/local, nhưng hiển thị các tiện ích mở rộng tùy chỉnh mà không có ACL nếu và chỉ khi người dùng có quyền System > Configurationkhông phải là điều ai cũng muốn.
Fabian Schmengler 8/07/2015

Giải pháp của bạn là một cách giải quyết và không được khuyến khích! Bạn có thể trả về true theo mặc định (như trong trình điều khiển quản trị trước bản vá này). Giải pháp tốt hơn: Định cấu hình Danh sách điều khiển truy cập của bạn một cách chính xác.
Matthias Kleine
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.