Silex 定义访问规则
Silex Defining Access Rules
我关注 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).
当然规则的顺序很重要,只会匹配一个。 Silex 会从顶部开始查看每个条目,并在找到与 URL 匹配的 security.access_rules
条目后立即停止,换句话说,Silex 将根据 security.access_rules
来决定使用哪个条目使用 URI 和第一个匹配的规则。所以你需要把第一条规则移到结束来解决这个问题:
'security.access_rules' => [
[ '^/account', 'ROLE_USER' ],
[ '^/admin', 'ROLE_ADMIN' ],
[ '^.*$', 'IS_AUTHENTICATED_ANONYMOUSLY' ],
]
我关注 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).
当然规则的顺序很重要,只会匹配一个。 Silex 会从顶部开始查看每个条目,并在找到与 URL 匹配的 security.access_rules
条目后立即停止,换句话说,Silex 将根据 security.access_rules
来决定使用哪个条目使用 URI 和第一个匹配的规则。所以你需要把第一条规则移到结束来解决这个问题:
'security.access_rules' => [
[ '^/account', 'ROLE_USER' ],
[ '^/admin', 'ROLE_ADMIN' ],
[ '^.*$', 'IS_AUTHENTICATED_ANONYMOUSLY' ],
]