gpt4 book ai didi

symfony - 授予其他用户

转载 作者:行者123 更新时间:2023-12-04 08:47:28 25 4
gpt4 key购买 nike

在我阅读了食谱中的这一章之后

http://symfony.com/doc/current/cookbook/security/entity_provider.html

我创建了一个实现“AdvancedUserInterface”的实体“User”和一个实现“RoleInterface”的实体“Roles”。我还在“security.yml”中创建了一个角色结构。

用户和角色之间的关系是“多对多”关系。

一切安好。

对于登录用户,我可以检查这样的授权:

$this->get('security.context')->isGranted("ROLE_EDITOR");

但是如何检查数据库中其他用户的此授权?

有像吗?
$this->get('security.context')->isGranted("ROLE_EDITOR", $user);

最佳答案

Symfony 5 回答:

namespace App\Controller;

...
use Symfony\Component\Security\Core\Role\RoleHierarchyInterface;
use Symfony\Component\Security\Core\Role\RoleHierarchy;

class UserController extends AbstractController
{
private $roleHierarchy;

/**
* @Route("/users", name="users")
*/
public function usersIndex(RoleHierarchyInterface $roleHierarchy)
{
$this->roleHierarchy = $roleHierarchy;

// your user service or your Doctrine code here
$users = ...

foreach ($users as $user) {
$roles = $roleHierarchy->getReachableRoleNames($user->getRoles());
\dump($roles);

if ($this->isGranted($user, 'ROLE_SUPER_ADMIN')) {
...
}
}
...
}

private function isGranted(User $user, string $role): bool
{
$reachableRoles = $this->roleHierarchy->getReachableRoleNames($user->getRoles());

foreach ($reachableRoles as $reachableRole) {
if ($reachableRole === $role) {
return true;
}
}

return false;
}
}
注意:为了简单起见,我将所有内容都放在 Controller 中,但当然我建议将角色管理代码移动到一个单独的服务中,例如@leberknecht 的回答。

关于symfony - 授予其他用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31140903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com