[英]Symfony Security not see roles for user
我为用户创建了ManyToMany角色,现在symfony看不到我的用户的角色,我也不知道为什么。现在,我可以输入路径下方的每个路由:^ /,为什么? 以及如何让Symfony知道我的用户中扮演什么角色,我不明白。 用户担任多个角色时的屏幕和屏幕- 屏幕
- { 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----------------------
}
嗯,我不知道这是否对您有帮助,但是由于我是symfony的新手,并且对此了解不多,所以我使用了Symfony用户捆绑包。 它可以安全地处理注册,登录和其他功能。 我使用它来担任更多角色,并为页面建立一些安全性。 如果我错了,请纠正我。
编辑:
这是文档,易于使用。 http://symfony.com/doc/current/bundles/FOSUserBundle/index.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.