2016-06-28 8 views
0

ユーザの管理とSymfony2での権限に関する少しの心配があります。Symfony2ユーザ権限管理

は私に説明してみましょう:

私はFOSUserBundleを設定します。

著作権管理である私が今したいのですがどのような。私はエンティティ「ポスト」を持っています。 私は以下の役割を持つユーザーを持っています。

ROLE_GUEST - VIEW,RATE 
ROLE_USER - VIEW,CREATE,RATE,EDIT_OWN 
ROLE_EDITOR - VIEW,CREATE,RATE,EDIT,DELETE 

特定の操作を実行するために各ロールにアクセス許可を設定する必要があります。

ありがとうございました:)

答えて

2

を私が正しくあなたの必要性を理解していれば、あなたがその役割に基づいてセキュリティ層を持っていると思います。あなたは月の方法でこれを行うことができます:

symfonyのデフォルトの方法を - あなたは、ルートアクセス制御の世話をする

# app/config/security.yml 
security: 
# ... 
access_control: 
    - { path: ^/post/view, roles: VIEW } 
    - { path: ^/post/rate, roles: RATE } 
# etc 

この下の例のようにsymfonyのセキュリティ層を構成することができます。 EDIT_OWNのような、より複雑な役割のhttp://symfony.com/doc/current/cookbook/security/access_control.html

の詳細情報は、すべてこのために直接アプローチ

if (!$post->isAuthor($this->getUser())) { 
    $this->denyAccessUnlessGranted('EDIT', $post); 

    // or without the shortcut: 
    // 
    // use Symfony\Component\Security\Core\Exception\AccessDeniedException; 
    // ... 
    // 
    // if (!$this->get('security.authorization_checker')->isGranted('edit', $post)) { 
    // throw $this->createAccessDeniedException(); 
    // } 
} else { 
    $this->denyAccessUnlessGranted('EDIT_OWN', $post); 
} 

を取ることができ、より多くのあなたは、より高度な役割またはのためにsymfonyのサイトhttp://symfony.com/doc/current/best_practices/security.html

を確認することができますACLの要件もここhttps://symfony.com/doc/current/components/security/authorization.htmlを見て、私はこの記事で提供さ4つのリンクで承認有権者https://symfony.com/doc/current/components/security/authorization.html#voters

で、あなたはすべてのyを見つける必要がありますRBACとACLを実装する必要があります。また、使用したいアノテーションに関する情報を見つけることもできます。 symfonyのセキュリティレイヤーには、JMS \ SecurityExtraBundleのように作業しているsymfonyのバージョンに応じて便利な拡張機能があります。

希望の特定のものについては、このヘルプ、

アレクサンドルCosoi

+0

、編集のように同じエンティティに削除しないが、それが使用することをお勧めではありません[有権者](http://symfony.com/doc /current/cookbook/security/voters.html)にアクセス許可を確認しますか? –

+1

@Bart Bartomanそれはあなたのアプリケーションのアーキテクチャに依存します。アプリのさまざまな場所でアクションを制限することができます。それは、操作が許可されているかどうかを判断するために必要な複雑さと情報に依存します。したがって、残りのAPIを開発しているとすれば、役割に基づいてルーティングレベルからアクセスを切断できますが、ACLのものが必要な場合は、まずACLが制御しているデータオブジェクトを取得する必要があります。それを行う方法になる可能性があります。だからこそ、私はちょうどより複雑な制限ルールが必要な場合に、最後に有権者に言及しました。 –

+0

最後に、最適化するためには、アクセスが制限されていることがわかったらすぐにアクセスを制限するのが最善の方法です。実際には、エンティティのプロパティを編集するなどの複雑な制限ルールを使用して、低レベルのものを制限したい場合にのみ、私は有権者しか使用しませんでした。しかし、必要に応じて、直接アプローチから簡単に投票者に広げることができます。 –