2010-11-21 107 views
0

我只是通過symfony生成的CRUD函數。 有文章類和文章的所有者。 我想阻止其他用戶比當前文章的所有者tu編輯它。 我在考慮自定義我自己的過濾器或驗證器,但是當我實現驗證器時,一些用戶可以進入編輯窗體(他們不僅可以發送它)。 但是當我實現用戶過濾器時,只有在某些操作(在這種情況下編輯)之前執行過濾器纔會出現問題。Symfony對CRUD操作的訪問限制

我該怎麼做?

回答

0

我認爲這是內置的。你應該閱讀關於security.yml文件。

更新:我看到...顯然是安全系統calls the method hasCredential() of the user object。也許你可以在你的自定義用戶類中擴展這個方法,這樣當它的參數是'article_owner'時,它會做一個特殊的檢查。

一旦做到這一點,所有你需要做的就是你想要

+0

我知道它是什麼。但我應該舉個例子。 「所有: credentials:owner_article_5」所有文章...螞蟻我不知道如何指定憑據給每個所有者。 – user364622 2010-11-21 15:56:39

+0

@ user364622:看到我上面的更新 – greg0ire 2010-11-21 19:25:15

+0

尼斯:]我已經在我的行動課上寫了一個方法「isOwner」。但是,你建議的解決方案很好,很聰明。我認爲用戶類的超載對於這個問題是很好的。 – user364622 2010-11-22 06:09:37

0

我不認爲symfony的支持對象級訪問控制的開箱即指定該憑證的行爲。我在其中一個應用程序中遇到了這個特殊問題,並最終在編輯操作中明確檢查登錄用戶是否與所有者相匹配。這是我使用的功能:

protected function hasObjectAccess($obj) { 
    if ($this->getUser()->hasGroup('admin') 
     || $obj->getOwnerId() == $this->getUser()->getId()))) { 
     return true; 
    } 
    return false; 
}