一部のアクセス決定がページ自体に依存する(たとえば、ログインしたユーザーにのみ表示される) ものと、動的モデル オブジェクト/logout
に依存するもの(たとえば、ログインしたユーザーによって書き込まれたかどうかを確認する必要がある場所)の Web プロジェクトがあります。ユーザーまたは彼が管理者の場合)。/article/delete/1234
1234
今、私は両方をどのように組み合わせるかという問題に直面しています。どんなに試しても、2つだけに頼ることはできません。
- 一部のページではモデルを使用していないため、モデル ルールを設定できません
- 一方、モジュラー アプローチの動的アサーションを作成することはできません。Aはデフォルト モジュールに限定されず、管理モジュールでも使用できます。
Comment
comment
default/comment
Comment
モジュラー ACLを使用して、ユーザーがアクセスを許可されているかどうかを各ページで確認しようとしています。
if (!$acl->isAllowed($user, 'default/secrets', 'mysecrets')) {
$this->forward('auth', 'login');
$this->setDispatched(false);
}
また、動的アサーションを使用して、誰かが特定のモデル オブジェクトの編集を許可されているかどうかを確認しています。
// $comment has a method getResourceId() returning 'comment'
if ($acl->isAllowed($user, $comment, 'delete')) {
// display a link for deletion
}
もちろん、
- 特定のコメントの削除、および
- /comment/delete/???? へのアクセス ページ
は同じですが、これは不可能だと思います。2 つのルールを作成する必要があります。
$acl->allow('member', 'default/comment', 'delete');
$acl->allow('member', 'comment', 'delete', new Acl_Assert_CommentAuthor());
$acl->allow('admin', 'comment', 'delete');
場合によっては作業が重複する可能性があるため、これは私には完璧ではないようです。
この問題にアプローチするためのより良い方法はありますか? または、少なくとも次のような一貫した命名スキームを作成する唯一の方法ですmvc:default/comment
。model:comment