2010-11-21 10 views
0

私は単純にsymfonyによって生成されたCRUD関数を持っています。 記事のクラスと記事の所有者があります。 私は現在の記事の所有者よりも他のユーザーがそれを編集しないようにしたい。 私は自分自身のフィルタやバリデータのカスタムについて考えていましたが、バリデータを実装するときに、一部のユーザーが編集フォームに入ることができました。 しかし、私はユーザーフィルタを実装するときにいくつかのアクション(この場合は編集)の前にのみフィルタを実行させる問題があります。symfony CRUDアクションへのアクセス制限

どうすればよいですか?

答えて

0

これは内蔵されていると思います。 security.ymlファイルについてお読みください。

更新:明らかにセキュリティシステムcalls the method hasCredential() of the user objectを参照してください。おそらく、あなたのカスタムユーザクラスでこのメソッドを拡張することができます。そのため、そのパラメータが 'article_owner'のような場合に特別なチェックを行います。

これが完了すると、あなたがしなければならないだろう、すべてはあなたが私はsymfonyは箱から出して、オブジェクトレベルのアクセス制御をサポートしていないと思う

+0

私はそれが何であるか知っています。しかし、私は例えば作らなければならない。すべての記事の "all: credentials:owner_article_5" ...それぞれの所有者に資格情報を指定する方法はわかりません。 – user364622

+0

@ user364622:上の私の更新を参照してください – greg0ire

+0

ニース:]私はalredyが私のアクションクラスでメソッド "isOwner"を書いている。しかし、あなたが提案する解決策の魔法使いは素晴らしく、賢いです。私は、ユーザークラスの過負荷はその問題のために良いことだと思う。 – user364622

0

をしたいアクションのこの資格を指定しています。私は自分のアプリケーションの中でその特定の問題を抱えていて、ログインしたユーザーが編集アクションでオーナーと一致するかどうかを明示的にチェックすることになりました。これは私がそれに使用した関数です:

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