2015-12-10 47 views
0

我爲用戶創建了ManyToMany角色,現在symfony沒有看到我的用戶的角色,我不知道爲什麼 現在我可以輸入路由下的每個路由:^ /,爲什麼?而Symfony如何知道我的用戶有什麼作用,我不明白。 Screen和屏幕當用戶有許多角色 - screenSymfony Security看不到用戶的角色

  - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

而且在行動ROLE_FREELANCER我嘗試被授予,並有全是假的

$security = $this->get('security.context'); 
    $admin = $security->isGranted('ROLE_ADMIN'); // have false 
    $freel = $security->isGranted('ROLE_FREELANCER'); //have false 

如何正確設置security.yml或我在做什麼錯誤??

security.yml:

security: 
encoders: 
    Artel\ProfileBundle\Entity\Users: 
     algorithm:  sha1 
     encode_as_base64: false 
     iterations:  1 

    Symfony\Component\Security\Core\User\User: plaintext 

role_hierarchy: 
    ROLE_CLIENT: ROLE_CLIENT 
    ROLE_COMPANY: ROLE_COMPANY, 
    ROLE_FREELANCER: ROLE_FREELANCER 
    ROLE_ADMIN: ROLE_ADMIN 

providers: 
    user: 
     entity: 
      class: ArtelProfileBundle:Users 
      property: email 
    chain_provider: 
     chain: 
      providers: [user_db, in_memory] 
      providers: [user_dev, in_memory] 
    user_db: 
     entity: { class: Artel\ProfileBundle\Entity\Users, property: email } 
    in_memory: 
     memory: 
     users: 
      admin_tyty: { password: adminpass_tyty, roles: [ 'ROLE_ADMIN' ] } 


firewalls: 
    default: 
     anonymous: ~ 
     http_basic: ~ 
     form_login: 
      login_path: /login 
      check_path: /login_check 
     logout: 
       path: /logout 
       invalidate_session: false 

    main: 
     pattern: ^/ 
     anonymous: ~ 
     security: true 
     form_login: 
      provider: user 
      login_path: login 
      check_path: login_check 
      username_parameter: login[email] 
      use_referer: true 
     logout: 
      path: logout 
      target:/

access_control: 
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin, roles: ROLE_ADMIN } 
    - { path: ^/sonata-admin/, roles: ROLE_ADMIN } 
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/company, roles: ROLE_COMPANY } 
    - { path: ^/profile, roles: ROLE_FREELANCER } 
    - { path: ^/clients, roles: ROLE_CLIENT } 
    - { path: ^/customer/developers/profile/get, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/customer/developers/bit, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/customer/developers/bitGet, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

實體角色

class Role implements RoleInterface 
{ 

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

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

/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

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


/* 
* methods for RoleInterface 
*/ 
public function getRole() 
{ 
    $this->getName(); 
} 

/** 
* Get id 
* 
* @return integer 
*/ 
public function getId() 
{ 
    return $this->id; 
} 

/** 
* Set name 
* 
* @param string $name 
* @return Role 
*/ 
public function setName($name) 
{ 
    $this->name = $name; 

    return $this; 
} 

/** 
* Get name 
* 
* @return string 
*/ 
public function getName() 
{ 
    return $this->name; 
} 

/** 
* Add users 
* 
* @param \Artel\ProfileBundle\Entity\Users $users 
* @return Role 
*/ 
public function addUser(\Artel\ProfileBundle\Entity\Users $users) 
{ 
    $this->users[] = $users; 

    return $this; 
} 

/** 
* Remove users 
* 
* @param \Artel\ProfileBundle\Entity\Users $users 
*/ 
public function removeUser(\Artel\ProfileBundle\Entity\Users $users) 
{ 
    $this->users->removeElement($users); 
} 

/** 
* Get users 
* 
* @return \Doctrine\Common\Collections\Collection 
*/ 
public function getUsers() 
{ 
    return $this->users; 
} 
} 

實體用戶

class Users implements UserInterface 
    { 
/** 
* @var int 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @Expose() 
* @ORM\GeneratedValue(strategy="AUTO") 
* @Groups({"for_vip", "for_all_projects", "for_profile_project"}) 
*/ 
protected $id; 

/** 
* @ORM\ManyToMany(targetEntity="Role", inversedBy="users") 
* @ORM\JoinTable(name="user_roles") 
* 
*/ 
private $userRoles; 

----------------------Method for Userinterface---------------------- 

/** 
* Get salt 
* 
* @return string 
*/ 
public function getSalt() 
{ 
    return ''; 
} 

/** 
* @inheritDoc 
*/ 
public function eraseCredentials() { } 

/** 
* Геттер для ролей пользователя. 
* 
* @return ArrayCollection A Doctrine ArrayCollection 
*/ 
public function getUserRoles() 
{ 
    return $this->userRoles; 
} 

/** 
* Геттер для массива ролей. 
* 
* @return array An array of Role objects 
*/ 
public function getRoles() 
{ 
    return $this->getUserRoles()->toArray(); 
} 

----------------------End method for Userinterface---------------------- 


----------------------Additional Method for Role---------------------- 
/** 
* Add userRoles 
* 
* @param \Artel\ProfileBundle\Entity\Role $userRoles 
* @return Users 
*/ 
public function addUserRole(\Artel\ProfileBundle\Entity\Role $userRoles) 
{ 
    $this->userRoles[] = $userRoles; 

    return $this; 
} 

/** 
* Remove userRoles 
* 
* @param \Artel\ProfileBundle\Entity\Role $userRoles 
*/ 
public function removeUserRole(\Artel\ProfileBundle\Entity\Role $userRoles) 
{ 
    $this->userRoles->removeElement($userRoles); 
} 




public function setRole(RoleInterface $role) 
{ 
    if (!$this->userRoles->contains($role)) { 
     $this->userRoles->add($role); 
    } 

    return $this; 
} 

----------------------End additional Method for Role---------------------- 

}

回答

0

嗯,我不知道這是否會幫助你,但因爲我對symfony很陌生並且不太瞭解它,我使用了Symfony User捆綁之友。它處理註冊,登錄和一些更安全的功能。我使用它來發揮更多作用併爲我的頁面構建一些安全性。如果我錯了,請糾正我。

編輯:

這是文檔,易於使用。 http://symfony.com/doc/current/bundles/FOSUserBundle/index.html

+0

我使用Security組件中的UserInterface,我認爲可以使用此組件創建許多角色 –

+0

是的,也可以與FOS UserBundle一起使用。使用FOSUserBundle,您可以使用命令行來提升用戶,還可以在security.yml中添加新角色,並用一行代碼保護控制器中的頁面。 – Gijsberts

相關問題