我必须在我的应用程序中多次检查用户是否是“管理员”。
我想知道在性能方面哪种方式最好。
至少有两个(在控制器内):
$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');
因为键入
答案 0 :(得分:0)
我从未使用getUser()
来阅读该角色。
使用SecurityContext或AccessDecisionManager的实现,例如
$securityContext->isGranted('ROLE_USER');
答案 1 :(得分:0)
在表现方面,它依赖。如果性能是您的应用程序的一个重要因素,您应该使用blackfire进行分析。如果您的数据库是聚集的并遍布全球,那么使用authorization_checker的方法会更快。如果您的DIC很大,并且您的数据库位于同一服务器上,则isAdmin()方法可能会更快。