| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- <sect1 id="zend.acl.advanced">
- <title>고급 사용법</title>
- <sect2 id="zend.acl.advanced.storing">
- <title>ACL 데이터의 보존에 의한 영속성의 확보</title>
- <para>
- Zend_Acl는 ACL 데이터의 보존을 위해 데이타베이스나 캐쉬 서버와 같은 어떠한 특별한 백엔드 기술도 요구하지 않게 설계되었습니다. 전적으로 PHP 구현만으로 커스터마이즈된 관리툴에서 상대적으로 쉽고 유연성을 가진 Zend_Acl을 작성할 수 있습니다. 다양한 상황들에 부딪히다 보면, ACL의 인터액티브한 관리를 필요로 하므로, end_Acl는 어플리케이션의 접근 제어와 그에 대한 설정 및 질의를 할 수 있는 메소드를 제공합니다.
- </para>
- <para>
- 데이터의 사용법은 여러가지 상황에 따라 크게 달라지기 때문에, ACL 데이터의 저장은 개발자의 몫으로 남습니다. Zend_Acl는 직렬화(serializable)가 가능해서, ACL 객체를 PHP의 <ulink url="http://php.net/serialize"><code>serialize()</code></ulink> 함수를 이용해서 직렬화 할 수 있습니다. 그 결과를, 파일 및 데이타베이스 또는 캐쉬 서버 등의 원하는 장소에 저장할 수 있습니다.
- </para>
- </sect2>
- <sect2 id="zend.acl.advanced.assertions">
- <title>검증을 통한 조건부 ACL 규칙의 작성</title>
- <para>
- 때때로 어떤 자원에 접근하는 롤의 허가나 거절을 위한 규칙은 절대적인 것이 아니라 다양한 기준에
- 따릅니다. 예를 들어, 접근을 허락하는 것은 오전 8시부터 오후 5시의 사이로 한정한다고 하는 경우나,
- 악플의 진원지로 밝혀진 특정의 IP주소로부터의 접근만을 거부하는 경우도 있습니다. Zend_Acl는
- 개발자의 필요에 의한 어떤 조건을 근거로 규칙을 구현할 수 있도록 지원하고 있습니다.
- </para>
- <para>
- Zend_Acl는 조건부의 규칙을 <code>Zend_Acl_Assert_Interface</code>로 지원하고 있습니다. 규칙의 검증용 인터페이스를 사용하기 위해, 개발자는 인터페이스의 <code>assert()</code> 메소드를 implements한 클래스를 작성합니다:
- </para>
- <programlisting role="php"><![CDATA[<?php
- require_once 'Zend/Acl/Assert/Interface.php';
- class CleanIPAssertion implements Zend_Acl_Assert_Interface
- {
- public function assert(Zend_Acl $acl, Zend_Acl_Role_Interface $role = null,
- Zend_Acl_Resource_Interface $resource = null, $privilege = null)
- {
- return $this->_isCleanIP($_SERVER['REMOTE_ADDR']);
- }
- protected function _isCleanIP($ip)
- {
- // ...
- }
- }]]>
- </programlisting>
- <para>
- 검증 클래스를 작성하면, 조건부의 규칙을 할당할 때, 이 검증 클래스의 인스턴스를 지정해야만 합니다.
- 검증을 포함하고, 작성된 규칙은 검증 메소드(assert)가 true를 리턴할 때만 적용됩니다.
- </para>
- <programlisting role="php"><![CDATA[<?php
- require_once 'Zend/Acl.php';
- $acl = new Zend_Acl();
- $acl->allow(null, null, null, new CleanIPAssertion());]]>
- </programlisting>
- <para>
- 위의 코드는 모두에게 모든 권한에 접근할 허가를 주지만, 접근 요청 IP가 "블랙 리스트에 올려진" 경우에는
- 접근을 거부하는 조건부 허가 규칙을 만듭니다. 만약 "깨끗하다"라고 간주되지 않는 IP로부터 요청이
- 들어오면, 접근 허가 규칙이 적용되지 않습니다. 왜냐하면, 규칙은 모든 롤, 모든 자원 그리고 모든 권한에
- 적용되기 때문에, "깨끗하지 않은" IP로부터의 접근은 거부하게 됩니다. 그러나, 이것은 특수한 경우입니다.
- 보통은 (즉, 특정의 롤, 자원 또는 권한을 규칙의 대상으로 하는 경우), 검증에 실패해서 규칙이 적용되지
- 않는 경우에는, 접근이 가능한지의 여부를 다른 규칙들을 사용해서 결정합니다.
- </para>
- <para>
- 검증 객체의 <code>assert()</code> 메소드는, 인증 질의(즉, <code>isAllowed()</code> 메소드)가 적용되는 ACL, 롤, 자원 및 권한에게 넘겨집니다. 이것을 이용해서 필요로 하는 조건을 검증 클래스가 판단합니다.
- </para>
- </sect2>
- </sect1>
|