Silex定义访问规则

时间:2016-08-23 14:24:41

标签: php symfony silex

我遵循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;
}

1 个答案:

答案 0 :(得分:1)

绝对规则的顺序很重要,只有一个匹配。 Silex将从顶部开始查看每个,并在找到一个与URL匹配的security.access_rules条目后立即停止,换句话说,Silex将根据URI确定要使用哪个security.access_rules使用匹配的第一条规则。因此,您需要将第一条规则移至最终解决此问题:

'security.access_rules' => [
    [ '^/account', 'ROLE_USER' ],
    [ '^/admin', 'ROLE_ADMIN' ],
    [ '^.*$', 'IS_AUTHENTICATED_ANONYMOUSLY' ],
]