컨트롤러 플러그인을 사용하여 인증 플러그인을 만들고 있습니다. application.ini 파일 내에서 내비게이션 설정을 정의한 다음, 그와 데이터베이스 사용자 레코드를 사용하여 ACL을 동적으로로드하고 Zend_Navigation에 적용합니다. 이 비트는 성공적으로 메뉴를로드하고 사용자가 볼 수있는 페이지 만 표시하므로 제대로 작동합니다.컨트롤러 플러그인 내에서 Zend_Navigation에서 현재 페이지를 검색하는 방법
그러나 이렇게해도 사용자가 페이지로 직접 이동하지 않습니다. 내가하고 싶은 일은 사용자가 컨트롤러 플러그인 내에서 액세스 권한이없는 페이지로 이동할 때를 식별하여 요청을 인증 페이지로 리디렉션 할 수 있습니다.
Zend_Navigation에서 현재 페이지를 검색하는 함수가 있어야한다고 생각했지만 찾지 못했습니다 ... 존재하지 않습니다.
어쨌든, 이것은 내 전체 컨트롤러 플러그인입니다. 누구나 솔루션을 볼 수 있습니까?
<?php
class Pog_Model_AuthPlugin extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $oRequest)
{
/**
* Load user
*/
$oAuth = Zend_Auth::getInstance();
$oDbUsers = new Pog_Model_DbTable_Users();
if (!$oAuth->hasIdentity())
{
$oUser = $oDbUsers->createRow();
$oUser->name = "guest";
$oUser->setReadOnly(true);
}
else
{
$oUser = $oAuth->getIdentity();
$oUser->setTable($oDbUsers);
}
/**
* Load ACL
*/
$oAcl = new Zend_Acl();
$oAcl->addRole($oUser->name);
/**
* Add current user privileges
*/
$oPrivileges = $oUser->getPrivileges();
foreach ($oPrivileges as $oPrivilege)
{
if (!$oAcl->has($oPrivilege->resource))
$oAcl->addResource($oPrivilege->resource);
$oAcl->allow($oUser->name, $oPrivilege->resource, $oPrivilege->privilege);
}
/**
* Load Navigation view helper
*/
$oViewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
$oNavigation = $oViewRenderer->view->navigation();
/**
* Add remaining Navigation resources
*/
foreach ($oNavigation->getPages() as $oPage)
{
if (!is_null($oPage->getResource()) && !$oAcl->has($oPage->getResource()))
$oAcl->addResource($oPage->getResource());
}
/**
* Set ACL and Role
*/
$oNavigation->setAcl($oAcl)->setRole($oUser->name);
/**
* Check if use is allowed to be here
*/
...MAGIC GOES HERE...
}
}
을,하지만 난 응답으로 하늘의 배열을 얻고있다 :
새로운 getPages() foreach 루프는 다음과 같습니다. Controller Plugin에서 실행하는 것과 관련이 있습니까? –
난 그냥보기 스크립트에 몇 가지 테스트 코드를 넣어 위의 작품은 괜찮아요. 컨트롤러 도우미에서 Navigation 도우미가 완전히 설치되지 않았지만 그 다음에는 괜찮습니다 ... 이제 설치가 시작되면 트리거 할 수 있는지 확인하십시오. –
@Valorin. 내 acl 컨트롤러 플러그인의 preDispatch 코드를 테스트했는데 괜찮습니다. 내비게이션을 어떻게 설정합니까? bootstrap.php에서 탐색을 설정합니까? 어쩌면이게 내 경우에는 초기화 된거야? – Marcin