2011-01-04 3 views
1

사용자와 회사가 가입 할 수있는 포털을 만들고 있습니다. 사용자는 독립적이거나 회사에서 일할 수 있습니다. 유형에 관계없이 모든 사용자가 사용할 수있는 기본 액세스가 있습니다 (독립적이거나 회사와 연결되어 있음). 독립적 인 사용자가 사용할 수있는 몇 가지 기능이 있지만 사용자가 회사 아래에있는 경우 회사 관리자는 특정 기능에 대한 액세스를 허용하거나 거부 할 수 있습니다. Zend_Acl을 사용하여 어떻게 관리 할 수 ​​있습니까?zend acl 다중 액세스 목록/레벨

+0

먼저 Zend_Acl 소개를 읽으셨습니까? 그리고 당신은 어떻게하면 당신을 관리 할 수 ​​있는지 모르십니까? http://framework.zend.com/manual/en/zend.acl.introduction.html –

+0

db에 acl (roles, resources & permissions/mode)을 저장하고 있으며 두 개의 테이블 그룹이 있습니다. 하나는 사이트 관련 작업을 처리하는 반면 2 번은 회사 관리자가 제어하는 ​​액세스를 처리하는 것입니다. 그렇다면 두 가지 유형의 ACL을 어떻게 관리 할 수 ​​있습니까? 매뉴얼에 제공된 세부 사항은 데이터베이스를 사용하여 ACL을 관리하는 방법을 다루지 않습니다. 나는 이것을 달성 할 수 있었지만 여러 유형의 ACL에 관한 약간의 지침이 필요하다. – Bryan

답변

1

ACL의 조건이 있습니다.

내 ACL (플러그인을 통해)을 선언 한 파일에서 다음 선언이 있습니다. Acl_AdminCanAccessUsersZend_Acl_Assert_Interface이고 TRUE 또는 FALSE을 반환합니다. 여기에서는 Request 객체를 생성자에 전달합니다. 이제

// Complex function to see if the current user can create/edit the desired user account. 
    $acl->allow('client', 'user', array('edit','create'), new Acl_AdminCanAccessUsers($this->_request)); 

당신은 그들이 isAdmin이있는 경우 여기에 우리가 사용자 레코드에 대한 DB를 확인하고 요청 매개 변수로 비교 또는 확인되어 볼 수 있듯이 이제 Acl_AdminCanAccessUsers

<?php 

class Acl_AdminCanAccessUsers implements Zend_Acl_Assert_Interface 
{ 

public function __construct($request) { 
    $this->request = $request; 
} 

public function assert(Zend_Acl $acl, 
         Zend_Acl_Role_Interface $role = null, 
         Zend_Acl_Resource_Interface $resource = null, 
         $privilege = null) 
{ 

    /** 
    * Can only test when trying to edit a user account 
    */ 
    if ("edit" != $privilege) { 
     return TRUE; 
    } 

    $identity = Zend_Auth::getInstance()->getIdentity(); 

    /** 
    * Get the id from the URL request 
    */ 
    $id = $this->request->getParam('id'); 

    /** 
    * Get user account from DB 
    */ 
    $user = Doctrine_Core::getTable('User')->find($id); 

    // Are they editing their own account? Give them a pass 
    if ($identity->user_id == $user->user_id) { 
     return TRUE; 
    } 

    // If they don't have the isAdmin flag set to yes on their account 
    // Then we'll just deny them immediately 
    if ($identity->isAdmin) { 
     return TRUE; 
    } 

    return FALSE; 
} 
} 

살펴 보자 Zend_Auth ID로 설정된 플래그. 역할, 자원 및 권한 이상으로 액세스 할 수있는 경우 ACL에 대한 많은 조건부 검사를 수행 할 수 있습니다.

해피 코딩!