我为用户创建了ManyToMany角色,现在symfony看不到我的用户的角色,我不知道为什么 现在我可以输入路径下方的每个路由:^ /,为什么?如何让Symfony知道我的用户中有什么角色,我不明白。 Screen并在用户有多个角色时进行屏幕显示 - screen
- { 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 :(得分:0)
嗯,我不知道这是否会对你有所帮助,但是由于我是symfony的新手并且对它不了解,我使用了Symfony用户套装之友。它处理注册,登录和一些安全功能。我使用它来拥有更多角色并为我的页面构建一些安全性。如果我错了,请纠正我。
编辑:
这是文档,易于使用。 http://symfony.com/doc/current/bundles/FOSUserBundle/index.html