【问题标题】:Silex Defining Access RulesSilex 定义访问规则
【发布时间】:2016-08-23 14:24:41
【问题描述】:

我关注 Silex 文档部分http://silex.sensiolabs.org/doc/providers/security.html#defining-access-rules

这是我的确认

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

所以我需要的很简单,匿名用户可以访问任何地方(/account/* 和 /admin/* 路径除外),具有“ROLE_USER”的用户可以访问任何地方和 /account/* 路径,但不能/admin/* 路径,具有“ROLE_ADMIN”的用户可以访问任何地方。

我制作了一个非常基本的控制器来测试如果用户不是“ROLE_ADMIN”,他是否会被重定向:

$app->get('/admin', function () use ($app) {

    return 1;
})->bind('admin');

但一点也不。他可以访问/admin,并在页面上打印“1”...

根据文档:

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).

【问题讨论】:

    标签: php symfony silex


    【解决方案1】:

    规则的顺序很重要,只有一个会匹配。 Silex 将从顶部开始查看每个条目,并在找到与 URL 匹配的 security.access_rules 条目后立即停止,换句话说,Silex 将根据 URI 和第一个匹配的规则来决定使用哪个 security.access_rules用来。所以你需要将第一条规则移到结束来解决这个问题:

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

    【讨论】:

      猜你喜欢
      • 2013-08-23
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      相关资源
      最近更新 更多