Benim PHP web uygulaması için erişim kontrol listelerini uygulamak yardımcı olun. Ben özellikle Zend_ACL kullanıyorum.
Belirli varlık (bir kullanıcı veya grup olabilir) ne kaynağa erişimi ne üzerinde ince taneli, uygulama geniş kontrol istiyorum. Belirli bir kaynak örneğine erişim vermek mümkün olmak ister, ama aynı zamanda bu tür tüm kaynaklara olacaktır. Örneğin:
- Kullanıcı 1. Tüm mesajların üzerinde yetki düzenleme gelmiştir
- User # 2 misafir editörü ve sonrası ID # 5. düzenleyin ayrıcalıkları vardır
- Group # 1 (misafir) her şeyi ayrıcalıkları okumuş
- Kullanıcıların konuğu devralan bir kullanıcı grubuna aittir.
Orada gereken bir ACL referans kaynak türleri veya özel örnekleri arasında: Benim soru budur? Ben kullanıcılara böyle ACL kullanarak temel, kaynak-tipi geniş ayrıcalıkları vermeniz gerekir:
- yazılan kullanıcı # 1 düzenlemek hibe
- Bu miras var daha hibe kullanıcı # 2 şey
- Hibe grup 1. tüm kaynakların okumak
- Belirli kaynaklardaki hibe ve denys izlemek için istisnalar tablo uygulamak
Yoksa kaynakların benim farklı türde tüm bireysel örnekleri için kaynak yaratmak ve tüm kullanıcıların tüm kaynakları okumak için izin vermek için bir Tahsis koparmak gitmeli? Oldukça kaba gibi görünüyor.
Benim geçerli çözüm şudur: kaynak devralma kullanarak, hiçbir türü, her tür için bu kök bir çocuk, ve sonra her örneği için her türden bir çocuğun bir ebeveyn çoğu kaynak oluşturmak. Bu bana belirli bir tip üzerinde hibe ve bir kaç örneklerini inkar, ya da (yukarıda kullanıcı # 2 gibi) belirli bir tür inkar ama bir örnek vermek sağlar. Bu ancak benim ihtiyaçları daha karmaşık, güzel benim izinleri sistemi birleştirir. Yakında, kaynak türleri iç içe olacak. Yani anne ya da çocukların farklı modüller olabilir kim olacak. Bir örnek: Bir site geniş fotoğraf galerisi modülü, başka daha özel galeri bunun altında bulunan bir duyuru modülü. Ben bu adrese ne tam olarak emin değilim. Ben hala tüm galeriler vermek yeteneğine sahip olmak ister, ya da bazı fotoğraflar altında sadece bu yüzden, sadece bir ya da olacaktır. Zend_ACL kaynaklar için birden çok devralma desteklemiyor unutmayın.
Bunu uygulamak için en iyi yolu nedir? Bütün bir ACL ile veya her modül yerleşik bazı mantık kullanarak?