管理路径的Silex防火墙设置


Silex Firewall setup for admin path

我需要设置我的silex防火墙,如:

www.mysite.com/* => access to all users
www.mysite.com/admin/* => access to only logged in users

我使用这个设置,但它没有按预期工作:

$app->register(new SecurityServiceProvider(), array(
            'security.firewalls' => array(
                'secure' => [
                    'pattern' => '^/.*$',
                    'anonymous' => true, 
                    'form' => array(
                        'login_path' => '/admin/login',
                        'check_path' => '/admin/auth'
                    ),
                    'logout' => array(
                        'logout_path' => '/admin/logout'
                    ),
                    'users' => $app->share(function() use ($app) {
                        return new AuthenticationSuccessHandler($app['db']);
                    }),
                ]
            ),
            'security.access_rules' => array(
                array('^/admin$', 'ROLE_ADMIN')
            )
        ));

有什么帮助吗?非常感谢!!;-)

'users' => $app->share(function() use ($app) {
     return new AuthenticationSuccessHandler($app['db']);
 }),

上述函数需要返回一个实现的对象

Symfony''Component''Security''Core''User''UserProviderInterface

查看此处查看自定义用户提供商文档

也可以将login_path移动到安全区域之外。另一种配置方式是:

  $app['security.firewalls'] = array(
'secure' => array(
    'pattern' => '^/admin/',
    'form' => array('login_path' => '/login', 'check_path' => '/admin/auth'),
    'users' => $app->share(function () use ($app) {
         return new MyUserProvider($app['db']); 
     }),
    ),
  ),
);
$app['security.access_rules'] = array(
array('^/admin', 'ROLE_ADMIN')
);

确保您注册了条令数据库。