2015-10-26 11 views
5

私は自分のアプリケーションと使用戦略「コンセンサス」で5カスタム有権者を持っています。Symfony2デフォルトの有権者を無効にする方法は?

私の有権者は正しく動作しない場合があり、デバッグ後に理由を見つけました。

標準symfonyのRoleHierarchyVoterは常に「1」を返し、それゆえ「付与」の合計は結果「を拒否」の和にに等しい結果となります。したがって、私はRoleHierarchyを使用しないので、この投票者を無効にする必要があります。

1)どのように私は設定に投票を無効にすることができますか?

2)それがこの問題の別の解決策は存在していますか?

ありがとうございました!

UPDATED。

だから、私は常にfalseを返し自身RoleHierarchyVoterを作成しました。 この投票者は標準の投票人を置き換えますが、私はこの解決策が真実であるかどうかはわかりません。 その他のソリューションですか?

+1

サービスを完全に削除するには、コンパイラのパスhttp://symfony.com/doc/current/cookbook/service_container/compiler_passes.htmlを調べることができます。しかし、奇妙なデフォルトの動作のように見えます。 – Cerad

+0

@Ceradは私にFOSUserBundleをインストールしたこの問題の原因になりますか教えてください。 –

+0

わからない。私はコンセンサス戦略を実施していない。私はあなたがサービス定義を変更するためにパスを使用できることを知っています。私はFOSUserBundleから遠く離れています。 – Cerad

答えて

2

ので、現在私は常にfalseを返す自身RoleHierarchyVoterを作成することで問題を解決しました。

現在のところ不可能それが優先TYPE_BEFORE_OPTIMIZATIONに登録されており、私自身のコンパイラの前に行っているため、標準RoleHierarchyVoterの定義を削除します。

ところで、あなたはSecurityBundle /依存性の注入/ SecurityExtension.php次の行に見つけることができます:私はrole_hierarchy: ~を設定した場合でも

private function createRoleHierarchy($config, ContainerBuilder $container) 
    { 
     if (!isset($config['role_hierarchy'])) { 
      $container->removeDefinition('security.access.role_hierarchy_voter'); 

      return; 
     } 

     $container->setParameter('security.role_hierarchy.roles', $config['role_hierarchy']); 
     $container->removeDefinition('security.access.simple_role_voter'); 
    } 

isset($config['role_hierarchy']はtrueを返します。

この問題はバグとして報告しているRoleVoterhttps://github.com/symfony/symfony/issues/16358

0

ドキュメントは言う:RoleVoterがチェックする

RoleVoter votes if any attribute starts with a given prefix. 

デフォルトの接頭辞はconstuctorのデフォルトパラメータ値として渡され、ROLE_です。有権者は現在ログインしているユーザーを確認する必要があるため、これらは必須です。

自分の有権者がVoterInterfaceを実装していることを確認し、有権者の実装YourVoter::supportsClassも確認してください。ユーザーがアクセス権を持っていることを知りたい要素のFQNをチェックしてください。その後、次の設定は十分なはずです。だから、

app.security.download_voter: 
    class:  AppBundle\Security\Voter\DownloadVoter 
    public:  false 
    tags: 
     - { name: security.voter } 

:あなたはこの有権者を無効にするべきではありません

1)、他のすべての有権者がRoleHierarchyに依存しているため、この投票は、現在のユーザーのために作成しない投票を渡すとき。

2)Voterをよりよく理解するために、voterloggerを挿入し、プロファイラに追加情報を追加させることができます。そうすれば、あなた自身の有権者はもはやブラックボックスではありません。

+0

答えに感謝しますが、これは私が尋ねたものとは異なるものです。私がRoleHierarchyVoterを無効にすることができない理由は、私がこの質問に対する私の答えで説明した理由です。 –

+0

「他のすべての有権者がRoleHierarchyに依存している」というリンクを教えてください。 –

+0

'User'は' is_granted'の必須パラメータです。なぜなら、 'RoleHierarchyVoter'が常に最初に実行されるべき理由です。 'is_granted'の第二引数として何を渡しますか? 'UserInterface'を実装しているエンティティでなければなりません。 – Rvanlaak

関連する問題