Symfony2 с FOSUserBundle: доступ на основе групповых прав

Я не могу найти документацию о том, как использовать правила, связанные с fos_group, для управления доступом.
В этом проекте я хочу иметь возможность позже определять новые группы, которые используют предопределенные роли, такие как: ROLE_USER, ROLE_AMDIN и ROLE_SUPERAMDIN.
На каждой странице указано, что может или не может делать роль.

Обычно я использую функцию is_granted в twig для проверки ролей, но поскольку я хочу, чтобы система сначала проверяла роли группы, и если у пользователя нет группы, проверяйте роли, специфичные для пользователя, я не смогу ее использовать. .

Есть идеи, как добиться этого в Symfony2 с помощью групп FOSUserBundle?


person Robin Hermans    schedule 05.11.2013    source источник
comment
Вы читали: github.com/FriendsOfSymfony/FOSUserBundle/blob/ мастер/Ресурсы/ ?   -  person Manolo    schedule 05.11.2013
comment
Да, у меня есть. Я использовал это для создания связи между моей таблицей fos_user и fos_group. Но не объясняет, как пользоваться правами, которые есть в каждой группе.   -  person Robin Hermans    schedule 05.11.2013
comment
Возможно, это поможет вам: stackoverflow.com/questions/15057088/   -  person Manolo    schedule 05.11.2013
comment
Спасибо за помощь, но я читал все, что было в stackoverflow. К сожалению, ничего не соответствует моему вопросу   -  person Robin Hermans    schedule 05.11.2013


Ответы (1)


Я пытался сделать такую ​​​​работу. Вот что я обнаружил: объединение групповых ролей с ролями пользователей по умолчанию путем переопределения метода getRoles. Я надеюсь, что это поможет кому-то.

class Users extends BaseUser
{

  [...]
 public function getRoles()
 {
    $roles = $this->roles;

    foreach ($this->getGroups() as $group) {
        $roles = array_merge($roles, $group->getRoles());
    }

    // we need to make sure to have at least one role
    $roles[] = static::ROLE_DEFAULT;

    return array_unique($roles);
 }
}
person Akram    schedule 02.06.2014
comment
это кажется правильным решением, оно используется FOSUser в объекте FOS\UserBundle\Model\User посредством реализации GroupableInterface - person gondo; 18.08.2014
comment
Акрам (в настоящее время автор этого ответа): не круто брать чужую работу и называть ее своей - person gondo; 18.08.2014