Uygulamamı Zend Framework'e temel aldım. Kimlik doğrulaması için Zend_Auth
kullanıyorum, ancak Zend_Acl
benim için çalışacağından emin değilim çünkü açıkçası, gördüğüm örnekler ihtiyaçlar için çok basit ya da kafamı karıştırıyor.Zend ACL ihtiyaçlar için uygun mu?
Ben Kaynaklar başvurum öğelerin düşünüyorum ve bu kaynaklar olabilir Ayrıcalıklar var. Kaynak Ayrıcalıklarını içeren roller, kullanıcılara atanan dinamik olarak tanımlanmıştır. Bu bilgiyi normalize edilmiş tablolarda saklıyorum.
- Kullanıcılar
- Kaynakları birden Ayrıcalıklar
Roller olabilir birden Kaynakları olabilir Rol
Bu, Zend ACL ile meshleniyor mu? ACL'yi benim için sorun yaratacak şekilde mi düşünüyorum?
Benim Çözüm
Typeonerror kredi alır, ama burada benim spesifik bir çözüm.
class My_Acl extends Zend_Acl
{
protected $_role_id;
public function setRole($role_id)
{
$this->_role_id = $role_id;
return $this->addRole($role_id);
}
public function getRole()
{
return $this->_role_id;
}
public function deny($resource, $privilege)
{
return parent::deny($this->_role_id, $resource, $privilege);
}
public function allow($resource, $privilege)
{
return parent::allow($this->_role_id, $resource, $privilege);
}
public function isAllowed($resource, $privilege)
{
return parent::isAllowed($this->_role_id, $resource, $privilege);
}
}
Ben resource
, privilege
ve role_id
sütun döndüren bir sorguyu yürütmek ACL doldurmak için: Sadece geçerli kullanıcı rolünü yüklenmesidir
Zend_Acl
uzatıldı. Kullanıcının rolünün bu ayrıcalığa sahip olmaması durumunda role_id
sütun sonuç kümesinde sıfırdır. $acl = new My_Acl();
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
$userInfo = $auth->getStorage()->read();
$acl->setRole($userInfo->role_id);
} else {
$acl->setRole('');
}
// QUERY HERE
foreach ($privileges as $privilege) {
if (!$acl->has($privilege['resource'])) {
$acl->addResource($privilege['resource']);
}
if (is_null($privilege['role_id'])) {
$acl->deny($privilege['resource'], $privilege['privilege']);
} else {
$acl->allow($privilege['resource'], $privilege['privilege']);
}
}
Örneğinizde Kullanıcı, Rol ve Kaynak düzeylerini görüyorum. Kullanıcı, Rol, Kaynak, Ayrıcalık var. Bir Kullanıcının bir Rolü vardır, Rolün birden çok Kaynağı olabilir ve bir Kaynak birden çok Ayrıcalıklara sahip olabilir. Çözümünüzde bir şeyi yanlış anladım mı? – Sonny
Doğru hakkında sesler. Kullanıcıların kurulum şekli, her kullanıcı ebeveyninden ayrıcalıklar alır.Yani "admin" tüm "misafir" ve "üyeler" ayrıcalıklarını alır. Yönetici altında, "tümüne" izin veriyorum ve ardından tüm kaynaklarda "tasfiye" işlemini reddediyorum ve "oluştur" eylemini yalnızca "cms: yorumlar" kaynağında reddediyorum. Böylece "cms: comments-> view" veya "cms: comments-> moderate" eylemlerine hala erişebilirler. – typeoneerror
Bazı kod eklendi. – typeoneerror