我正在阅读Symfony Security模块中的RoleHierarchy类,并尝试理解以下代码:
public function getReachableRoles(array $roles)
{
$reachableRoles = $roles;
foreach ($roles as $role) {
if (!isset($this->map[$role->getRole()])) {
continue;
}
foreach ($this->map[$role->getRole()] as $r) {
$reachableRoles[] = new Role($r);
}
}
return $reachableRoles;
}
文档说的是这样的:
返回给定角色的所有可到达角色的数组。
可访问角色是直接分配的角色,但也包括所有角色 在角色层次结构中可以从它们传递到的。
让我说我有
$role = new RoleHierarchy(array(
'ROLE_ADMIN' => array('ROLE_USER'),
'ROLE_SUPER_ADMIN' => array('ROLE_ADMIN', 'ROLE_FOO'),
));
根据函数描述(据我所知),下面的测试可能会失败,但它不会因为函数本身似乎返回与参数传递相同的值,如果它没有在map数组中找到角色。
$this->assertEquals([new Role('ROLE_BAR')],$role->getReachableRoles([new Role('ROLE_BAR')]));
所以我的问题是为什么它甚至不验证ROLE_BAR
存在或在角色层次结构图中定义,或者我可能没有得到函数描述或缺少角色如何工作的其他方面。我目前的理解是(可能是错误的),要使角色成为有效角色,它应该在角色层次结构中定义。