2016-10-27 7 views
0

SonataUserBundleなしでSonataAdminBundle を使用していますが、FOSUserBundleのみを使用しています。理由はSymfony 3を使用しているためで、SonataUserBundleはそこでは動作しません。SonataAdminBundleの役割

今、私は24の管理サービスを持っています。ユーザーが新しいユーザーを作成できず、他のユーザーのプロファイルを変更できないように、Adminクラスを1つだけ変更する必要があります。スーパー管理者だけがそれを行うことができます。

しかし、私は24 Adminsのロールをこのように書く必要があるのですか?

ROLE_OPTICKS_ACCESS: 
    - ROLE_SONATA_ADMIN_FOO_LIST 
    - ROLE_SONATA_ADMIN_FOO_VIEW 
    - ROLE_SONATA_ADMIN_FOO_CREATE 
    - ROLE_SONATA_ADMIN_FOO_EDIT 
    - ROLE_SONATA_ADMIN_FOO_DELETE 
    - ROLE_SONATA_ADMIN_FOO_EXPORT 

この場合、私のsecurity.ymlには約144個の行があります。そして、私はROLE_SONATA_ADMIN_USER_CREATEROLE_SONATA_ADMIN_USER_EDITという2つの行を削除して、自分のプロフィールを編集できるようにする方法を見つけ出すことができます。

誰でも手助けできますか?これはこれを行う最善の方法ですか?私はそれを正しくしていますか?

私はちょうどこのようなことを考えていたので、

protected function configureRoutes(RouteCollection $collection) 
{ 
    $securityContext = $this->getConfigurationPool()->getContainer()->get('security.authorization_checker'); 

    if (!$securityContext->isGranted('ROLE_SUPER_ADMIN')) { 
     $collection->remove('create'); 
     $collection->remove('edit'); 
    } 
} 

しかし、明らかに私は間違った方法でやっていますが、私もエラーが表示されます。

トークンストレージには認証トークンが含まれていません。一つの可能​​ 理由はこのURL

、私は必死に助けを必要としてくださいにするために構成ファイアウォールがないことかもしれません。

答えて

0

あなたは

sonata_admin: 
    security: 
     handler: app.security.handler 

独自のセキュリティハンドラを実装することがありますが、これはサービスであり、あなたはROLE_SONATA_ADMIN_FOO役割を持っている誰任意のだろうあなた自身のisGranded方法このように

public function isGranted(AdminInterface $admin, $attributes, $object = null) 
{ 
    if ($admin instanceof FooAdmin) { 
     return $this->securityChecker->isGranted("ROLE_SONATA_ADMIN_FOO"); 
    } 
} 

を実装する必要がありますFooAdminとanythinsを作ることができる。それは単なるスケッチです。もちろん、もっと複雑なロジックを実装することもできます。