У меня проблема: я хочу разрешить пользователям и анонимному веб-сайту просмотра и разрешить только пользователям принимать определенные действия (которые я получил). Дело в том, что определенные пути (/account и т.д.) Должны быть доступны только зарегистрированным пользователям. Я очень старался настроить свой файл 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']);
}),
),
);
Вам нужно сделать это на шаге авторизации, поэтому вам нужно настроить ключ security.access_rules
.
Вы можете сделать это с помощью одного брандмауэра, включив в него анонимных и аутентифицированных пользователей, а затем, используя правила доступа, ограничьте доступ к 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. Также, если вы хотите узнать больше об управлении доступом без ролей, проверьте это
Самый простой способ - установить сеанс в заголовках страниц.
if(!isset($_SESSION["logged_in"])){
header("Location: http://www.example.com/");
}
Это довольно примитивно. Вы думали об использовании структуры MVC? Экономит вас много времени.
Почему бы не создать контроллер?