2

@PreAuthorize アノテーション (Symfony2 2.1.8) で保護されているコントローラーの関数にアクセスしようとしました:

私が書くとき:

/*    
* @PreAuthorize("hasRole('ROLE_ADMIN') or #id == '5'")
*/

public function editAction($id){ 
(...)

私はうまくいくことができますが、私が使用するとき:

/*    
* @PreAuthorize("hasRole('ROLE_ADMIN') or #id == user.getId()")
*/

public function editAction($id){ 
(...)

「トークンには必要な役割がありません。」というエラーが表示され、はい、正しい ID でログに記録され、認証されています...

誰かアイデアはありますか?

4

1 に答える 1

2

わかりました、私はそれを理解しました...

基本的に PreAuthorize アノテーションはこれを行っています

user.getId() === '5'

getId は整数を返し、文字列に対して比較を行っています。このメソッドを User エンティティに追加することで、なんとか機能させることができました。

public function getStringId()
{
    return (string) $this->id;
}

次に、注釈をこれに変更します

@PreAuthorize("user.getStringId() == '2' and hasRole('ROLE_ADMIN')")

それが役立つことを願っています!

于 2013-03-18T17:40:27.190 に答える