我在 security.yml 中有一些規則,基本上告訴 symfony 應該允許哪些角色訪問某些路由/url。有沒有辦法在給定請求的代碼中確定允許哪些角色?我打算在事件偵聽器中使用它。
uj5u.com熱心網友回復:
您可以使用AccessMap從use Symfony\Component\Security\Http\AccessMapInterface;
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'));
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/322540.html
標籤:symfony
