XuPoH
@XuPoH

Как в Symfony2 автоматически обновлять внутри сессий пользователей их роли?

У меня имеется небольшой проект, в котором реализована пользовательская система, в связи:
<?php
class User extends \FOS\UserBundle\Model\User {
    /**
     * @ORM\OneToOne(targetEntity="Group")
     * @ORM\JoinColumn(name="group_id", referencedColumnName="id")
     * @var $group \Cyber\CraftBundle\Entity\Group
     */
    protected $group;

    //... другие поля
}

/**
 * @ORM\Entity(repositoryClass="GroupRepository")
 * @ORM\Table(name="cyber_groups")
 */
class Group implements \FOS\UserBundle\Model\GroupInterface
{
    /**
     * @ORM\ManyToMany(targetEntity="Role")
     * @ORM\JoinTable(name="cyber_groups_user_roles")
     */
    protected $roles;

    /**
     * @ORM\OneToOne(targetEntity="Group")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
     */
    protected $parent;
}

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\Role\RoleInterface;

/**
 * Role Entity
 *
 * @ORM\Entity(repositoryClass="RoleRepository")
 * @ORM\Table(name="cyber_roles")
 */
class Role implements RoleInterface {
    public static $ROLE_DEFAULT = "VIEW_SITE";
    /**
     * @ORM\Id
     * @ORM\Column(type="integer", name="id")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @ORM\Column(type="string", name="role", unique=true, length=70)
     */
    private $role;
}


Однако, после авторизации, как я понял, все роли записываются в сессии, что противоречит архитектуре моего приложения, так как в админпанели есть функция смены группы пользователя - таким образом, $user->getRoles() вернёт уже совсем другие значения ролей. Как мне форсировать обновление этих прав с каждым заходом на сайт, а не хранить их в сессиях?
  • Вопрос задан
  • 193 просмотра
Решения вопроса 1
XuPoH
@XuPoH Автор вопроса
Решил задачу добавлением
security:
    always_authenticate_before_granting: true
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы