我遇到了问题:我想允许用户和匿名视图网站,并且只允许用户采取某些操作(我已经覆盖了)。问题是某些路径(/帐户等)应该只对已登录的用户可访问。 我真的很难配置我的secure.php但是,无论是匿名者都可以访问/帐户,或者我无法访问任何地方的用户,除了/ account /...
尝试了两个:
$app['security.firewalls'] = array(
'secured' => array(
'pattern' => '/account',
'form' => array('login_path' => '/login', 'check_path' => '/account/login_check'),
'logout' => array('logout_path' => '/account/logout', 'invalidate_session' => true),
'users' => $app->share(function () use ($app) {
return new UserProvider($app['db']);
}),
),
'unsecured' => array(
'pattern'=> '/',
'anonymous' => true,
)
);
和
$app['security.firewalls'] = array(
'secured' => array(
'pattern' => '/account',
'anonymous'=> true,
'form' => array('login_path' => '/login', 'check_path' => '/account/login_check'),
'logout' => array('logout_path' => '/account/logout', 'invalidate_session' => true),
'users' => $app->share(function () use ($app) {
return new UserProvider($app['db']);
}),
),
);
答案 0 :(得分:0)
您需要在授权步骤中执行此操作,因此您必须配置security.access_rules
key。
您可以通过在其中启用匿名和经过身份验证的用户来执行此操作,然后使用访问规则限制对/ accounts URI的访问,以仅允许经过身份验证的用户:
<?php
$app['security.firewalls'] = array(
'secured' => array(
'pattern' => '^.*$',
'anonymous' => true,
'form' => array('login_path' => '/login', 'check_path' => '/account/login_check'),
'logout' => array('logout_path' => '/account/logout', 'invalidate_session' => true),
'users' => $app->share(function () use ($app) {
return new UserProvider($app['db']);
}),
);
// By using authorization the access to the /account/* is protected to
// users with the ROLE_USER (you can be more creative here if you want)
// and with the second rule the whole site is allowed to non authenticated
// users (remember the /login path must not be protected!)
$app['security.access_rules'] = array(
// this could be also array('^/account', 'ROLE_USER')
array('^/account', 'IS_AUTHENTICATED_FULLY'),
array('^.*$', 'IS_AUTHENTICATED_ANONYMOUSLY')
);
有关授权的详情,请参阅Symfony doc。此外,如果您想了解有关没有角色check this out
的访问控制的更多信息答案 1 :(得分:-1)
最简单的方法是在页眉中设置会话。
if(!isset($_SESSION["logged_in"])){
header("Location: http://www.example.com/");
}
这很原始 - 您是否考虑过使用MVC框架?会节省你很多时间。
为什么不创建一个控制器?