访问不安全区域中的app.user,silex

时间:2014-02-20 13:40:28

标签: symfony silex

我有防火墙的配置:

$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)或我做错了什么。

1 个答案:

答案 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添加匿名访问规则。

希望这有帮助!