2013-06-24 115 views
0

我想從數據庫中拉出用於認證用戶的角色。要做到這一點,我已經創建了一個擴展的角色很像貝婁碼組對象:symfony2角色類中的角色和名稱有什麼區別?

// src/Acme/Bundle/UserBundle/Entity/Group.php 
namespace Acme\UserBundle\Entity; 

use Symfony\Component\Security\Core\Role\Role; 
use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Table(name="acme_groups") 
* @ORM\Entity() 
*/ 
class Group extends Role 
{ 
    /** 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id() 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @ORM\Column(name="name", type="string", length=30) 
    */ 
    private $name; 

    /** 
    * @ORM\Column(name="role", type="string", length=20, unique=true) 
    */ 
    private $role; 

    /** 
    * @ORM\ManyToMany(targetEntity="User", mappedBy="groups") 
    */ 
    private $users; 

    public function __construct() 
    { 
     $this->users = new ArrayCollection(); 
    } 

    // ... getters and setters for each property 

    /** 
    * @see RoleInterface 
    */ 
    public function getRole() 
    { 
     return $this->role; 
    } 
} 

什麼讓我困惑的是,我看不到這個類之間的關係,並在這種security.yml相應字段作爲:

role_hierarchy: 
    ROLE_ADMIN:  ROLE_USER 
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 

所以名稱會在右側:和角色在右側?例如,在

ROLE_ADMIN: ROLE_USER 

將ROLE_ADMIN是組名和ROLE_USER成爲角色?對我來說沒有意義的是symfony2如何將角色屬性作爲單個變量而不是數組來實現。由於在聲明中

 ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 

有多個角色,不只是一個角色。這些如何與上面定義的類相對應?我正在關注symfony2食譜http://symfony.com/doc/current/cookbook/security/entity_provider.html#managing-roles-in-the-database

回答

1

security.yml role_hierarchy是關於角色的繼承。它允許您創建許多角色,然後聲明某些角色繼承其他角色。上述http://symfony.com/doc/current/book/security.html#hierarchical-roles

ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 

意味着,如果作爲一個用戶我的角色「ROLE_SUPER_ADMIN」(這是從角色字段在您的集團實體),那麼我也繼承角色「ROLE_USER,ROLE_ADMIN,ROLE_ALLOWED_TO_SWITCH」。

這樣:ROLE_TO_INHERIT: [ROLES_TO_INHERIT_FROM]

所以你的名字字段中s​​ecurity.yml沒有意義的只是你的角色字段。角色層次結構與存儲角色的位置是分開的。這是一個額外的配置級別,例如,您不需要爲每個超級管理員用戶添加3個角色,而只需添加超級管理員角色,他們將繼承所有其他角色。

希望有道理,請記住,爲了使用角色層次結構,您需要在數據庫中擁有角色。如果您沒有可以分配給用戶的ROLE_SUPER_ADMIN,那麼配置上述ROLE_SUPER_ADMIN層次結構並不好。因此,在組表中創建所有角色,然後設置層次結構。

+0

這一切都有道理,非常感謝! –

相關問題