1
我有一個web項目,其中一些訪問決策都依賴於頁面本身(如/logout
這應僅可見於用戶登錄),有些是依賴於動態模型對象(例如/article/delete/1234
,我們必須檢查1234
是否由登錄用戶編寫,或者他是否是管理員)。Zend_Acl中的規則同時基於MVC和波輪機型
現在,我正面臨着如何將兩者結合在一起的問題。無論我怎樣努力,我可以不依賴任何單獨兩個:
- 有些不使用任何型號,所以我不能設置任何模型規則有
- 在另一方面,我不能創建動態斷言爲模塊化方法,因爲
Comment
只是一個comment
而不是一個default/comment
。 AComment
不限於默認模塊,它也可以在管理模塊中使用。
With 模塊化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
}
當然,這將是很好如果
- 刪除某個評論,並
- 檢查訪問/評論/刪除/ ????
頁將是相同的,但我想這是不可能的,我就必須建立兩個規則:
$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
我不明白「默認」是什麼。 – conradfr 2012-07-30 08:58:28
'default'是Zend Framework中的默認模塊。我的應用程序中的其他模塊是'admin','vocabulary'。這是從應用程序的發展。如果我有'articles'和'messages',會更好,但現在這兩個都是'default'的一部分。 – Aufziehvogel 2012-07-30 14:52:40