Geo*_*iuc 4 php symfony symfony-security
我在 security.yml 中为我的网站定义安全性
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/ad/new, role: ROLE_USER }
- { path: ^/myAds, role: ROLE_USER }
- { path: ^/payments, role: ROLE_USER }
- { path: ^/pay, role: ROLE_USER }
Run Code Online (Sandbox Code Playgroud)
但我不确定如何在此处添加这样的路线:
mybundle_contact_advertiser:
path: /ad/{id}/contact
defaults: { _controller: MyBundle:Default:contactAdvertiser,id:null}
Run Code Online (Sandbox Code Playgroud)
id考虑到我不能这样做,如何定义:
- { path: ^/ad, role: ROLE_USER }
Run Code Online (Sandbox Code Playgroud)
作为一条路线
mybundle_ad:
path: /ad/{id}
defaults: { _controller: MyBundle:Default:viewAd ,id:null}
Run Code Online (Sandbox Code Playgroud)
不适用于未注册的用户。
来自@turdaliev-nursultan 的所有答案都有效。
但如果你知道 {id}参数始终是整数,那么还有一个可能的答案。
您可以编辑该security.yml文件并将以下规则添加到access_control列表中:
- { path: ^/ad/[0-9]+/contact$, role: ROLE_USER }
Run Code Online (Sandbox Code Playgroud)
的[0-9]+部分是指由一个或多个数字从0到9的任何字符串。
还要记住,使用任何类似 的 url http://example.com/ad/foo/contact,其中参数不是现有的 id,将导致 http 404 错误。
我有两个解决方案给你。
首先添加prefix需要认证授权的路由。然后只需将其添加prefix到您的security.yml文件中即可。这样您就不需要手动添加所有路由。
其次,将路线更改为:
mybundle_contact_advertiser:
path: /ad/contact/{id}
defaults: { _controller: MyBundle:Default:contactAdvertiser}
Run Code Online (Sandbox Code Playgroud)
然后将以下内容添加到您的security.yml文件中:
- { path: ^/ad/contact/, role: ROLE_USER }
Run Code Online (Sandbox Code Playgroud)
但是,如果您不想更改路线,请检查您的内部授权action
$this->denyAccessUnlessGranted('ROLE_ADMIN', null, 'Unable to access this page!');
Run Code Online (Sandbox Code Playgroud)
或者
if (!$this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
throw $this->createAccessDeniedException();
}
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的一点是,您可以使用@Security注释来保护您的操作。
/**
* @Security("has_role('ROLE_USER')")
*/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8273 次 |
| 最近记录: |