SUPEE-6285 yüklendikten sonra Erişim Reddedildi hataları


85

Magento 1.7.0.2 depomuza SUPEE-6285 yamasını yükledikten sonra , seçici izinleri olan (tüm izinlere sahip olmayan) kullanıcılar için tüm özel modüllere erişmeye çalışırken sistem " Erişim Engellendi " hatası gösteriyor . Aşağıdaki ekran görüntüsü.

görüntü tanımını buraya girin

Kullanıcı izinleri Rol Kaynakları'nda uygun şekilde ayarlanmıştır ve bunların ayarlandığından emin olmak için izin ayarlarını yeniden uyguladık.

Sorun, birden fazla özel uzantı üzerinden yeniden üretildi, bu nedenle çalışmayan tek bir uzantı değil.

Çıkış yaptım / giriş yaptım, önbelleği temizledim ve derleyicinin devre dışı olduğunu onayladım.

Birisi bunun nasıl giderileceğini önerebilir mi?

Yanıtlar:


129

Yazılı olarak burada :

Kısıtlı yönetici hesapları kullanıyorsanız, üçüncü taraf uzantılarının bazı menüleri artık onlar için çalışmayabilir. Nedeni varsayılan dönüş değeri olmasıdır Mage_Adminhtml_Controller_Action::_isAllowed()olarak değiştirildi trueiçin Mage::getSingleton('admin/session')->isAllowed('admin'). ACL'yi kullanmadıkları için bu yöntemi yönetici denetleyicilerinde geçersiz kılmayan uzantılar, artık "ALL" ayrıcalığına ihtiyaç duyuyor .

Tek çözüm, uzantıları düzeltmek ve bu yöntemi tüm yönetici denetleyicilerine eklemektir:

protected function _isAllowed()
{
    return true;
}

Ya da aslında içinde tanımlanan bir ACL kaynağına sahipse etc/adminhtml.xml:

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

Kaynak tanımlayıcısı nasıl belirlenir

Bir nasıl adminhtml.xmlböyle görünebilir:

Mage_Setup örneği (acl)

Aşağıdaki düğüm adlarını alın, acl/resources/admin/childrenaşağıdaki childrendüğümleri atlayın.

Eksik kaynak tanımlayıcıları nasıl oluşturulur?

Eğer sadece bir <menu>tanım varsa ancak <acl>tanım yoksa, kendi tanımınızı da tanımlayabilirsiniz (aynı modül içinde olması gerekmez, bu nedenle 3. parti dosyalarının değiştirilmesi gerekmez):

Mage_Setup örneği (menü)

Aşağıda her şeyi kopyalayın menuiçin acl/resources/admin/childrenve kaldırmak <action>düğümleri.


Otomatik düzeltme

SupportDesk.nu tarafından https://gist.github.com/raybogman/eec47237b8ef0d4dd0fd adresinde iyi bir komut satırı aracı var

Çoğu _isAllowed()çağrıyı iyi idare eder ancak karışık veya şifrelenmiş kaynak dosyalarda kodun bozulmasına neden olur, bu nedenle sonuçları manuel olarak kontrol etmelisiniz.


Sadece bu çözümü test etti ve "Dashboard" iznini vermek hiç farketmez. "Kontrol Paneli ayrıcalığı", Rol Kaynakları altındaki "Kontrol Paneli" izniyle aynı mı, yoksa başka bir yerde mi?
Chris

2
Cevap güncellendi, yapılandırmasını yanlış yorumladım, adminaslında sadece tüm yetkilere sahip kullanıcılar için doğru.
Fabian Schmengler

3
Lütfen return true;ACL için tanımlanmış hiçbir şey yoksa config.xmlveya kullanmayın adminhtml.xml. Bunun yerine izinleri xml dosyasına ekleyin ve doğru şekilde kontrol edin. Alan Storm'un sitesine göz atın veya izinler oluşturma hakkında bilgi için buraya tıklayın .
kel,

Özel modül için iyi çalışıyor ancak yapılandırma ayarı için bölüm varsa, bu bloğa nasıl erişebiliriz?
mjdevloper 13:15

1
Yapılandırılmış güzergahlar için kontrolörler <use>admin</use>. Genellikle uzarlar Mage_Adminhtml_Controller_Action.
Fabian Schmengler

2

Üçüncü taraf modülleri için benim durumumda adminhtml kontrolörlerine aşağıdaki kodu eklemek çalıştı:

protected function _isAllowed()

{
     return true;
}

-5

Olmalı:

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

Bu durumda, Magento'dan ACL Ayarlarını döndürür. Sadece Magento Çekirdek Ekibinin başka bir Yama ile mi düzelteceğini merak ediyorum ya da bunun global bir düzeltme olarak app / code / local'da yapılması gerek ...


3
Amaçlanan davranış bu değil. Yönetici denetleyicilerini isteyerek varsayılan olarak kısıtlayıcı hale getirdiler. Yani aslında uzatma satıcıları şimdi güncelleme yapmak zorunda kalıyor.
Fabian Schmengler

1
Bu nedenle, evet, eğer bu sizin için çalışıyorsa, düzeltin app/code/local, ancak ACL'siz özel uzantıları göstermek için ve eğer kullanıcının izinleri varsa, System > Configurationherkesin istediği şey değilse.
Fabian Schmengler

Çözümünüz geçici bir çözümdür ve tavsiye edilmez! Varsayılan olarak doğru dönebilirsiniz (bu düzeltme ekinden önceki yönetici denetleyicisinde olduğu gibi). Daha iyi bir çözüm: Erişim Kontrol Listelerinizi doğru şekilde yapılandırın.
Matthias Kleine,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.