Zend_Acl を使用して特定のリソースを特定のユーザーグループに許可する方法は知っていますが、それを使用してページの特定の部分のみを表示するにはどうすればよいですか? 例えば
ページに AJAX 経由で投稿を削除するボタンがありますが、ボタンを管理者のみに表示したいだけです。Zend_Acl を使用してコントローラーの post/delete へのアクセスをブロックできますが、それを使用してボタンが表示されないようにすることはできません。
Zend_Acl を使用して特定のリソースを特定のユーザーグループに許可する方法は知っていますが、それを使用してページの特定の部分のみを表示するにはどうすればよいですか? 例えば
ページに AJAX 経由で投稿を削除するボタンがありますが、ボタンを管理者のみに表示したいだけです。Zend_Acl を使用してコントローラーの post/delete へのアクセスをブロックできますが、それを使用してボタンが表示されないようにすることはできません。
// in controller
$this->view->allow_delete_post = $acl->isAllowed($role, 'delete_post');
。
// in template
<? if ($this->allow_delete_post): ?>[button html]<? endif; ?>
それはしませんか?
Christofは良い解決策を提供しましたが、別の方法はビューを分割することです。これはDRYに違反し始めますが、約200の異なる管理対象/コントロールがある場合、ビューが重くなります。したがって、ビューを$ this-> render('view')と$ this-> render('edit'で分割します。 )コントローラーからのアクセス許可の方が簡単な場合があります。次に、編集ビュースクリプトのみに編集リンクがあります。しかし、繰り返しになりますが、これはDRYであるため、最適ではありませんが、代替手段です。私はあなたがそれを比較検討する必要があると思います、どちらがより乾燥していて、ACLチェックまたは2つのビューでのものを繰り返します...
カスタムの静的 ACL クラスを作成して、ビュー スクリプト内から直接呼び出すこともできます。
ACL は通常プラグイン レベルで処理されるため、訪問者がビューを見ている場合、ACL はすでにリソースを許可しているため、ビュー内で次のようなことができるようになりました...
if(My_Custom_Acl::getIsAllowed('some_resource', 'delete_post_action'){
カスタムの getIsAllowed() メソッドでロール名を指定しませんでした。これは、この時点で ACL がユーザーの ID とロールを認識していると想定しているためです。
お役に立てれば