문제

안녕하세요, 저는 Zend로 시작하여 작동 방식을 이해하려고 노력하고 있으며 ACL 클래스와 함께 사람들은 모든 역할과 리소스를 하나의 파일로 선언하는 것 같습니다. 이제 나에게 이것은 사람이 기본 사용자로만 로그인하거나 심지어 사이트의 손님/방문자 만 로그인하는 경우 시스템 자원 낭비로 보입니다. 그래서 나는 현재 사용자의 역할/자원에 따라 역할을 설정하는 다른 클래스를 가질 수 있다고 생각했습니다.

내 현재 아이디어는 부트 스트랩에서 역할에 스위치/케이스를 사용하고 역할 이름 (예 : 'sake'=> 'model_visitoracl', 'user'=> 'model_useracl'및 '역할 이름을 기준으로 개별 ACL 클래스를로드하는 것입니다. admin '=>'model_adminacl '), 각각 해당 클래스 파일이 있습니다. 그런 다음 클래스 파일 내에서 각 파일에 대해 무언가를합니다. 이것은 작동 중이며 현재 모든 'admin'ACL을 하나로 정의 할 수 있습니다 (관리자 사용자의 권리 상속인을 통해 역 추적), '사용자'-'방문자'역할 및 리소스가 있습니다.

그러나 '사용자'에 대한 역할 권한을 변경하고 싶을 때 '사용자'및 'admin'을 위해 변경 해야하는 것처럼 이것은 가장 좋은 방법으로 보이지 않습니다. 이것은 두 가지 역할에 문제가되지 않지만 더 큰 시스템에서는 분명히 있습니다.

그래서 나는 같은 것을 시도했습니다

class Model_AdminAcl extends Zend_Acl{
  function __construct(){
    $d = new Model_UserAcl();

    //defining the admin role and permissions, with inheritance from the roles 
    //set in Model_UserAcl
  }
}

Model_UserAcl 구성 기능을 실행하려고 시도하고 '사용자'역할을 설정하려면 'Zend_acl_Role_registry_Exception'이 'Zend_Acl_role_rection_exception'을 던지는 것은 작동하지 않는 것 같습니다.

그래서 다음 단계는 무엇입니까? 각 모듈에 대한 파일을 개별적으로 포함시키고 필요한 클래스에 필요에 따라이를 포함하는 데 필요한 클래스가 있습니까?

아니면이 문제로 Molehills에서 산을 만들고 있습니까?

감사합니다, Psy

도움이 되었습니까?

해결책

좋아, 이것을 해결했는데, 왜 내가 이것을 처음부터 시도 할 생각이 아니라고 잘 모르겠다 (금요일 Brain Frazzle 생각)

방금 생성자의 내용을 자체 함수에 넣은 다음 생성자에서 해당 함수를 호출하고 클래스가 그 아래 클래스에서 상속합니다.

//Model/VisitorAcl.php
class Model_VisitorAcl extends Zend_Acl{
  function __construct(){
    $this->addVisitorRules();
  }

  function addVisitorRules(){
    //adding the role and permissions
  }
}

//Model/UserAcl.php
class Model_UserAcl extends Model_VisitorAcl{
  function __construct(){
    $this->addVisitorRules();
    $this->addUserRules();
  }

  function addUserRules(){
    //adding the role and permissions
  }
}

//Model/AdminAcl.php
class Model_AdminAcl extends Model_AdminAcl{
  function __construct(){
    $this->addVisitorRules();
    $this->addUserRules();
    $this->addAdminRules();
  }

  function addAdminRules(){
    //adding the role and permissions
  }
}

이것이 내가 갈 방법이 아니라면, 반드시 알려주십시오.

PSY

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top