У меня есть объект UserCas, у которого есть массив ролей базы данных (тот же принцип, что и для FOSUserBundle).
Проходя через security.yml, мне удается ограничить доступ к своим страницам в соответствии с ролями, но когда я использую is_granted, он не учитывает мои роли, я не понимаю, почему ...
У меня есть:
access_control:
- { path: ^/accueil, role: [IS_AUTHENTICATED_ANONYMOUSLY] }
# - { path: ^/admin, role: ROLE_ADMIN }
- { path: ^/, role: [IS_AUTHENTICATED_FULLY] }
- { path: ^/admin/*, roles: [ROLE_ADMIN] }
Моя сущность UserCas:
<?php
namespace Site\PagesBundle\Entity;
use Serializable;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\Collection;
use Site\PagesBundle\Security\Traits\traitUser;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Site\PagesBundle\Entity\PaquetDDLCas;
/**
* UserCas
*
* @ORM\Table(name="user_cas")
* @ORM\Entity(repositoryClass="Site\PagesBundle\Repository\UserCasRepository")
* @UniqueEntity("mail")
*/
class UserCas implements \Serializable, UserInterface
{
use traitUser;
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="username", type="string", length=255)
*/
private $username;
/************ MODIF ****************/
/**
* @ORM\Column(type="array")
*/
protected $roles = [];
/**
* {@inheritdoc}
*/
public function addRole($role)
{
$role = strtoupper($role);
if ($role === ['ROLE_USER']) {
return $this;
}
if (!in_array($role, $this->roles, true)) {
$this->roles[] = $role;
}
return $this;
}
/**
* {@inheritdoc}
* @return array
*/
public function getRoles()
{
return array_unique(array_merge(['ROLE_USER'], $this->roles));
}
/**
* {@inheritdoc}
*/
public function hasRole($role)
{
return in_array(strtoupper($role), $this->getRoles(), true);
}
/**
* {@inheritdoc}
*/
public function removeRole($role)
{
if (false !== $key = array_search(strtoupper($role), $this->roles, true)) {
unset($this->roles[$key]);
$this->roles = array_values($this->roles);
}
return $this;
}
/**
* {@inheritdoc}
*/
public function setRoles(array $roles)
{
$this->roles = array();
foreach ($roles as $role) {
$this->addRole($role);
}
return $this;
}
public function resetRoles()
{
$this->roles = [];
}
/******************* FIN MODIF *********************/
/**
* Constructor
*/
public function __construct()
{
$this->setEnabled(true);
$this->roles = array();
}
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* @return string
*/
public function getUsername()
{
return $this->username;
}
public function setUsername($username)
{
$this->username = $username;
}
public function serialize()
{
return serialize([
$this->id,
$this->username,
$this->mail
]);
}
public function unserialize($serialized)
{
list(
$this->id,
$this->username,
$this->mail
) = unserialize($serialized);
}
/*********************** Méthodes pour UserInterface ***************************/
public function eraseCredentials()
{
}
/**
* {@inheritdoc}
*/
public function getSalt()
{
}
/**
* {@inheritdoc}
*/
public function getPassword()
{
}
}
Если мой файл ветки, я хочу что-то отобразить, только если у меня есть ROLE_ADMIN:
{% if is_granted('ROLE_ADMIN') %}
//...
{% endif %}
Но это не работает.
И в моем контроллере, если я сделаю условие вроде:
if (is granted('ROLE_ADMIN))
{
dump('yes');
}
else
{
dump('no');
}
У меня свалка ('нет').
Но С контролем доступа в security.yml работает ограниченный доступ
Может кто-нибудь помочь мне, пожалуйста?