$ this-> getUser() - > isAdmin()VS $ this-> get('security.authorization_checker') - > isGranted('ROLE_ADMIN')

时间:2016-06-06 12:30:04

标签: symfony

我必须在我的应用程序中多次检查用户是否是“管理员”。

我想知道在性能方面哪种方式最好。

至少有两个(在控制器内):

$this->get('security.authorization_checker')->isGranted('ROLE_ADMIN');

$this->getUser()->isAdmin();

Users是一个映射mysql表的ORM类:

/**
 * @ORM\Table(name="users")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
 */
class User implements UserInterface, \Serializable
{
    /**
     * @ORM\Column(type="boolean", options={"default"=0})
     */
    private $isAdmin = 0;

    // [...]

    public function isAdmin(){
        return $this->isAdmin;
    }

    // [...]

    public function getRoles()
    {
        if($this->isAdmin()) {
            return ['ROLE_ADMIN', 'ROLE_USER'];
        } else {
            return ['ROLE_USER'];
        }
    }
}

我想getUser()->isAdmin()应该更快,除非安全系统以某种方式缓存角色......

编辑:我最终使用$this->isGranted('ROLE_ADMIN');因为键入

更短

2 个答案:

答案 0 :(得分:0)

我从未使用getUser()来阅读该角色。

使用SecurityContext或AccessDecisionManager的实现,例如

$securityContext->isGranted('ROLE_USER');

答案 1 :(得分:0)

在表现方面,它依赖。如果性能是您的应用程序的一个重要因素,您应该使用blackfire进行分析。如果您的数据库是聚集的并遍布全球,那么使用authorization_checker的方法会更快。如果您的DIC很大,并且您的数据库位于同一服务器上,则isAdmin()方法可能会更快。