我遵循Silex文档部分http://silex.sensiolabs.org/doc/providers/security.html#defining-access-rules
这是我的确认
With the above configuration, users must have the ROLE_ADMIN to access the /admin section of the website [...] (if that's not the case, the user will be automatically redirected).
所以我需要的是非常简单,一个匿名用户可以访问任何地方(除了/ account / *和/ admin / *路径),一个用户使用" ROLE_USER"可以访问averywhere和/ account / *路径,但不能访问/ admin / *路径,以及使用" ROLE_ADMIN"可以随处访问。
我制作了一个非常基本的控制器来测试用户是否被重定向,如果他不是" ROLE_ADMIN":
SELECT @x.value('(/*:DesiredConfigurationDigest/*:SoftwareUpdateBundle/*:Annotation/*:DisplayName/@Text)[1]', 'NVARCHAR(256)')
但根本不是。他可以访问/ admin,打印" 1"在页面上......
根据文件:
.text {
overflow: hidden;
max-height: 0;
transition: max-height 0.5s cubic-bezier(0, 1, 0, 1);
&.full {
max-height: 1000px;
transition: max-height 1s ease-in-out;
}
答案 0 :(得分:1)
绝对规则的顺序很重要,只有一个匹配。 Silex将从顶部开始查看每个,并在找到一个与URL匹配的security.access_rules
条目后立即停止,换句话说,Silex将根据URI确定要使用哪个security.access_rules
使用匹配的第一条规则。因此,您需要将第一条规则移至最终解决此问题:
'security.access_rules' => [
[ '^/account', 'ROLE_USER' ],
[ '^/admin', 'ROLE_ADMIN' ],
[ '^.*$', 'IS_AUTHENTICATED_ANONYMOUSLY' ],
]