젠드 프레임 워크에 기반한 애플리케이션입니다. 나는 인증을 위해서 Zend_Auth
을 사용하고 있지만, 솔직하게 말해서 내가 본 예가 나의 요구에 너무 단순하거나 나를 혼란스럽게하기 때문에 Zend_Acl
이 나를 위해 작동하는지 확신 할 수 없다.Zend ACL이 내 요구 사항에 맞습니까?
저는 리소스로서 내 애플리케이션의 요소를 생각하고 있으며, 이러한 리소스는 권한을 가질 수 있습니다. 자원 권한을 포함하는 역할은 동적으로 사용자에게 할당되어 정의됩니다. 정규화 된 테이블에이 정보를 저장합니다.
- 사용자
- 자원 여러 권한
역할을 할 수있는 여러 자원을 가질 수있는 역할
젠드 ACL이있는 메쉬입니까? 나에게 ACL을 문제가되는 방식으로 생각하고 있는가?
내 솔루션
Typeonerror 신용을 얻을 수 있지만, 여기 내 특정 솔루션입니다.
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);
}
}
내가 resource
, privilege
및 role_id
열을 반환하는 쿼리를 실행하여 ACL을 채우려면 : 만 현재 사용자의 역할을로드하기 때문에
Zend_Acl
을 확장했다. 사용자의 역할에 해당 권한이없는 경우 role_id
열은 결과 집합에서 null입니다. $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']);
}
}
예에서 사용자, 역할 및 리소스의 수준이 표시됩니다. 나는 사용자, 역할, 자원, 특권을 가지고있다. 사용자에게는 하나의 역할이 있고 역할에는 여러 자원이 있고 자원에는 여러 권한이있을 수 있습니다. 내가 당신의 솔루션에서 뭔가를 오해하고 있습니까? – Sonny
오른쪽에 대한 소리. 사용자가 설정되는 방식에 따라 각 사용자는 부모로부터 권한을 상속받습니다.따라서 "admin"은 "guest"및 "members"권한을 모두 갖습니다. admin에서 "all"을 허용 한 다음 모든 리소스에서 "제거"작업을 거부하고 "cms : comments"자원에서만 "create"작업을 거부합니다. 그래서 그들은 여전히 "cms : comments-> view"또는 "cms : comments-> moderate"액션에 액세스 할 수 있습니다. – typeoneerror
일부 코드가 추가되었습니다. – typeoneerror