Silex安全配置

时间:2016-11-17 09:43:48

标签: php symfony silex

我正在努力解决silex安全问题:

我有以下内容:

$app->register(new Silex\Provider\SecurityServiceProvider());

以及后来:

$app['security.firewalls'] = array(
    'admin' => array(
        'pattern' => '^/admin',
        'http' => true,
        'users' => array(
            // raw password is foo
            'admin' => array('ROLE_ADMIN', '5FZ2Z8QIkA7UTZ4BYkoC+GsReLf569mSKDsfods6LYQ8t+a8EW9oaircfMpmaLbPBh4FOBiiFyLfuZmTSUwzZg=='),
        ),
    ),
);

但是当我点击路径" localhost / admin"我得到了:

Found error: No route found for "GET /admin"

无法理解silex rly页面上的文档。我应该使用控制器注册安全过滤器吗?

在控制器中定义如下函数:

public function admin(){
        return 'Hello';
    }

并且路线是:

$app->get('/admin', 'app.vendor_controller:admin');

现在我得到了:

Hello

一旦我点击路径/管理员,没有身份验证表单。所以没有包含身份验证过程...

EDIT ~~~~~~~~~~~~~~~~~~~~~

好的,所以现在点击url / admin之后我会收到带有字段的身份验证横幅,作为用户和密码,我输入admin,foo但是对此没有影响。

`A username and password are being requested by http://localhost:8080. The site says: “Secured”`

代码如下:

$app['security.firewalls'] = array(
    'admin' => array(
        'pattern' => '/admin',
        'http' => true,
        'users' => array(
            'admin' => array('ROLE_ADMIN', 'foo')
        )));
$app['security.access_rules'] = array(
    array('/admin', 'ROLE_ADMIN'),
);

$app->register(new Silex\Provider\SecurityServiceProvider(), array(
    'security.firewalls' => array(
    'pattern' => '/admin',
    'http' => true,
    'users' => array(
        // raw password is foo
        'admin' => array('ROLE_ADMIN', 'foo'),
    ))));

1 个答案:

答案 0 :(得分:0)

您配置了与每个/admin*网址匹配的防火墙,但这并不意味着每个网址都需要身份验证。你可以成为anonymous user,这没关系。如果你想告诉silex“用户需要在这里允许ROLE_ADMIN”,你需要添加

$app['security.access_rules'] = array(
    array('^/admin', 'ROLE_ADMIN'),
);