2013-04-06 43 views
2

我的應用程序具有角色的層次結構如下:的Symfony2:isGranted其他實體

  • ROLE_SUPER_ADMIN
    • ROLE_ADMIN
      • ROLE_USER

我有我的控制器,使這項工作:

/** 
* @Route("/admin/delete/{id}", name="_admin_delete") 
* @Secure(roles="ROLE_ADMIN") 
*/ 
public function deleteuserAction($id) 
{ 
    $user = $this->container->get('fos_user.user_manager')->findUserBy(array('id' => $id)); 
    if (null === $user) { 
     throw $this->createNotFoundException('User id not found'); 
    } 

    if ($user->hasRole('ROLE_ADMIN')) { 
     // You can not delete this user! 
     throw new ... 
    } 

    // delete user 
    $this->container->get('fos_user.user_manager')->deleteUser($user); 

    // ... 
} 

deleteuserAction是所有那些ROLE_ADMIN訪問..但我想,他們不能刪除誰擁有角色ROLE_ADMIN高校用戶。

有一個正確的方法來做到這一點?

帶有此配置您可以刪除ROLE_SUPER_ADMIN ...是的,你可以把它添加到列表中,以阻止它,但有一個複雜的層次結構會變得難以管理。

+0

有什麼問題嗎?你的方法似乎是正確的。 – Xocoatzin

+0

@Xocoatzin,通過這個配置你可以刪除ROLE_SUPER_ADMIN ...是的,你可以將它添加到列表中來阻止它,但是複雜的層次結構會變得很難管理。 – Federkun

+1

如果您希望在應用程序中擁有更復雜的所有權方案,請使用訪問控制列表(http://symfony.com/doc/2.0/cookbook/security/acl.html)。 – Xocoatzin

回答