有没有办法获得给定 URL 的允许角色?
Is there a way to get allowed roles for a given URL?
我在 security.yml 中有一些规则,基本上告诉 symfony 应该允许哪些角色访问某些 route/url。
有没有办法在给定请求的代码中确定允许哪些角色?
我打算在事件侦听器中使用它。
您可以使用 use Symfony\Component\Security\Http\AccessMapInterface;
中的 AccessMap
AccessMap 包含您的 access_control 配置的映射。
您可以在监听器中轻松自动连接服务:
private AccessMapInterface $accessMap;
public function __construct(AccessMapInterface $accessMap)
{
$this->accessMap = $accessMap;
}
别忘了注册服务:
#services.yaml
services:
#...
Symfony\Component\Security\Http\AccessMapInterface: '@security.access_map'
然后您可以使用AccessMap
通过$this->accessMap->getPatterns($request)
方法匹配您的请求并访问每个配置。
来自我的一个项目的示例:
Symfony\Component\Security\Http\AccessMap {#8567 ▼
-map: array:7 [▼
0 => array:3 [▼
0 => Symfony\Component\HttpFoundation\RequestMatcher {#8547 ▼
-path: "^/login"
-host: null
-port: null
-methods: []
-ips: []
-attributes: []
-schemes: []
}
1 => array:1 [▼
0 => "PUBLIC_ACCESS"
]
2 => null
]
1 => array:3 [▶]
2 => array:3 [▶]
3 => array:3 [▶]
4 => array:3 [▶]
5 => array:3 [▶]
6 => array:3 [▶]
]
}
让我们看看我的登录页面需要什么角色:
//$request is from my login page
dump($this->accessMap->getPatterns($request));
array:2 [▼
0 => array:1 [▼
0 => "PUBLIC_ACCESS"
]
1 => null
]
因此应该很容易在您的侦听器中匹配您的请求,并使用包含您的请求所需角色的 getPatterns 结果。
如果你想访问不是你当前请求的特定路由配置,你可以这样做:
$this->accessMap->getPatterns(Request::create('/login', 'GET'));
我在 security.yml 中有一些规则,基本上告诉 symfony 应该允许哪些角色访问某些 route/url。 有没有办法在给定请求的代码中确定允许哪些角色? 我打算在事件侦听器中使用它。
您可以使用 use Symfony\Component\Security\Http\AccessMapInterface;
AccessMap
AccessMap 包含您的 access_control 配置的映射。
您可以在监听器中轻松自动连接服务:
private AccessMapInterface $accessMap;
public function __construct(AccessMapInterface $accessMap)
{
$this->accessMap = $accessMap;
}
别忘了注册服务:
#services.yaml
services:
#...
Symfony\Component\Security\Http\AccessMapInterface: '@security.access_map'
然后您可以使用AccessMap
通过$this->accessMap->getPatterns($request)
方法匹配您的请求并访问每个配置。
来自我的一个项目的示例:
Symfony\Component\Security\Http\AccessMap {#8567 ▼
-map: array:7 [▼
0 => array:3 [▼
0 => Symfony\Component\HttpFoundation\RequestMatcher {#8547 ▼
-path: "^/login"
-host: null
-port: null
-methods: []
-ips: []
-attributes: []
-schemes: []
}
1 => array:1 [▼
0 => "PUBLIC_ACCESS"
]
2 => null
]
1 => array:3 [▶]
2 => array:3 [▶]
3 => array:3 [▶]
4 => array:3 [▶]
5 => array:3 [▶]
6 => array:3 [▶]
]
}
让我们看看我的登录页面需要什么角色:
//$request is from my login page
dump($this->accessMap->getPatterns($request));
array:2 [▼
0 => array:1 [▼
0 => "PUBLIC_ACCESS"
]
1 => null
]
因此应该很容易在您的侦听器中匹配您的请求,并使用包含您的请求所需角色的 getPatterns 结果。
如果你想访问不是你当前请求的特定路由配置,你可以这样做:
$this->accessMap->getPatterns(Request::create('/login', 'GET'));