Позволяет пользователям и анонимным пользователям просматривать веб-сайт, но защищает его часть

1

У меня проблема: я хочу разрешить пользователям и анонимному веб-сайту просмотра и разрешить только пользователям принимать определенные действия (которые я получил). Дело в том, что определенные пути (/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']);
    }),
),

);
Теги:
silex

2 ответа

0
Лучший ответ

Вам нужно сделать это на шаге авторизации, поэтому вам нужно настроить ключ 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. Также, если вы хотите узнать больше об управлении доступом без ролей, проверьте это

  • 0
    Да, вчера понял так же. Даже, спасибо за ваше время и усилия :)
-1

Самый простой способ - установить сеанс в заголовках страниц.

if(!isset($_SESSION["logged_in"])){
  header("Location: http://www.example.com/");
}

Это довольно примитивно. Вы думали об использовании структуры MVC? Экономит вас много времени.

Почему бы не создать контроллер?

  • 0
    Ну, это примитивно, я мог бы также проверить роль, прежде чем показывать контент веб-сайта, но я знаю, что есть более "профессиональный" и сложный способ использования безопасности Silex ... Спасибо за ответ, хотя;)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню