Symfony 3.4.4 + FOSUserBundle + Sonata Admin Bundle - 按角色

时间:2018-02-26 06:40:15

标签: fosuserbundle sonata-admin symfony-3.4

我需要:

  • 如果登录Sonata Admin的用户是SUPER_ADMIN,请参阅所有用户
  • 如果登录Sonata Admin的用户是ADMIN,那么 NO 会看到SUPER_ADMIN

要知道在UserAdmin.php中如何通过按ROLE过滤来修改查询

谢谢

1 个答案:

答案 0 :(得分:0)

最后,这是我的解决方案:

public function createQuery($context = 'list')
{
    $query = parent::createQuery('list');

    if (!$this->isSuperAdmin()) {
        /** @var \Sonata\DoctrineORMAdminBundle\Datagrid\ProxyQuery @query */
        $query
            ->where("o.roles NOT LIKE '%ROLE_SUPER_ADMIN%'");

    }

    return $query;
}

并且,使用此功能,验证用户是否为SUPER_ADMIN:

private function isSuperAdmin() {
    $isUserSuperAdmin = false;

    $actualUserRoles = $this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser()->getRoles();

    if (in_array("ROLE_SUPER_ADMIN", $actualUserRoles)) {
        $isUserSuperAdmin = true;
    }

    return $isUserSuperAdmin;
}