我有防火墙的配置:
$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'admin' => array(
'pattern' => '^/admin',
'form' => array(
'login_path' => '/#login',
'check_path' => '/admin/login_check',
),
'logout' => array(
'logout_path' => '/admin/logout',
)
),
'unsecured' => array(
'anonymous' => true,
'pattern' => '^.*$',
),
));
这也是对于security.rules:
$app['security.access_rules'] = array(
array('^/admin', 'ROLE_ADMIN'),
array('.*', 'IS_AUTHENTICATED_ANONYMOUSLY'),
);
我看到了这个答案:Silex/Symfony Security Firewall Access user token outside the secured area 但问题是,我无法访问“/”页面中的app.user和is_granted(在twig中)总是向任何输入返回false。
我不知道该答案中提到的ACL是否是其他内容(除了access_rules)或我做错了什么。
答案 0 :(得分:4)
我认为用户(令牌)只能在登录的防火墙内访问。因此,只要您位于网站的/admin
部分内,您就可以访问app.user
,但不在“无担保”的防火墙内。
要获得您正在寻找的行为,您需要使用^/
模式的整体/站点范围防火墙,然后使用访问规则来限制对/admin
的访问。
$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'main' => array(
'pattern' => '^/',
'anonymous' => true,
'form' => array(
'login_path' => '/#login',
'check_path' => '/admin/login_check',
),
'logout' => array(
'logout_path' => '/admin/logout',
)
),
));
$app['security.access_rules'] = array(
array('^/admin', 'ROLE_ADMIN'),
array('^/', 'IS_AUTHENTICATED_ANONYMOUSLY'),
);
因此,您的网站的全新用户将立即匿名进行身份验证,直到他们使用允许他们访问/admin
的角色登录。
值得注意的是,如果您要在管理区域内填写登录表单,例如/admin/login
。他们需要为登录URL添加匿名访问规则。
希望这有帮助!