私は zend Framework 2 アプリケーションを作成していますが、ここで説明されていることを実装しようとしています:
http://ralphschindler.com/2009/08/13/dynamic-assertions-for-zend_acl-in-zf
コードが機能するというデモンストレーションは非常に優れていますが、フレームワーク (mvc を使用) がどのように機能するかにはあまり当てはまりません。それとも、私が間違った道を進んでいるのかもしれません...
私はこのような RouteListener を作成しました:
class RouteListener implements ListenerAggregateInterface
{
public function attach(EventManagerInterface $events)
{
$this->listeners[] = $result = $events->attach(
MvcEvent::EVENT_DISPATCH, array($this, "checkAcl"), 100
);
}
}
メソッド checkAcl は、やりたいことが許可されているかどうかをチェックします。
リソースとアクションは次のように決定されます。
$resource = $routeMatch->getParam("controller");
$action = $routeMatch->getParam("action");
また、役割は、セッションに格納されている ID (Zend\Permissions\Acl\Role\RoleInterface を実装) によって決定されます。
例に従ってください: ユーザーが特定のブログ投稿を編集できるかどうかを判断するにはどうすればよいですか? acl がチェックを行うまでに、コントローラーはブログ投稿をまだロードしていないため、これにアプローチする方法がわかりません。アサーションでブログ投稿の取得を複製しない限り、より良い方法があることを願っています。