Разделяйте внешних и внутренних пользователей с помощью sfDoctrineGuardPlugin - PullRequest
5 голосов
/ 04 апреля 2011

Я запускаю проект и использую Symfony, мой первый раз с Symfony, действительно здорово, я уже установил sfDoctrineGuardPlugin, и теперь все в порядке, почему ?, потому что пользователи внешнего интерфейса могут войти в систему инаоборот, я не хочу этого, поэтому я начинаю Google, я нашел Symfony sfDoctrineGuardPlugin пользовательский запрос входа здесь, в SO, но я не знаю, где я должен разместить функцию, так что у меня естьне проверял его.

Поскольку я не хочу, чтобы пользователи веб-интерфейса могли войти в бэкэнд, я думаю, что могу использовать учетные данные, могу ли я ??но Symfony проверяет учетные данные пользователей после их входа в систему, и я не хочу ни того, ни другого, поэтому, как я могу этого достичь? Может быть, если у меня могут быть пространства имен в сеансе, я могу проверить, есть ли администратор в внутреннем пространстве имена также для внешних пользователей, поэтому они никогда не исправляются, я думаю.

Я не знаю, действительно знаю, есть ли у sfDoctrineGuardPlugin какая-либо конфигурация, которая может управлять этой ситуацией, существует такая конфигурация ??* Кроме того, в моем бэкэнде мне бы хотелось, чтобы у меня была страница для управления внешними пользователями, а также другая страница для внутренних пользователей, потому что у внешних пользователей будут профиль и адреса, я думаю, что это намного проще, но я не знаю, где это сделать.начало.

нужна помощь здесь

спасибо

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

После нескольких дней программирования я смог сделать это именно так, как я хотел, и я поделюсь своим решением:
Я начал с примера, который нашел здесь в SO , вы можете прочитать пост здесь:
Symfony sfDoctrineGuardPlugin пользовательский запрос входа это дало мне идею, и я выполнил ее, поэтому я создаю \ lib \ Util.class.php с функциями, один для пользователей бэкэнда запросов, а другой для пользователей внешнего интерфейса

static public function retrieveCustomer($username, $isActive = true)
{
    $query = Doctrine_Core::getTable('sfGuardUser')->createQuery('u')
    ->leftJoin('u.Groups g')
    ->leftJoin('g.Permissions p')
    ->where('u.username = ?', $username)
    ->addWhere('u.is_active = ?', $isActive)
    ->addWhere('g.name = ?', 'customers');

    return $query->fetchOne();
}

static public function retrieveAdmin($username, $isActive = true)
{
    $query = Doctrine_Core::getTable('sfGuardUser')->createQuery('u')
    ->leftJoin('u.Groups g')
    ->leftJoin('g.Permissions p')
    ->where('u.username = ?', $username)
    ->addWhere('u.is_active = ?', $isActive)
    ->whereIn('g.name', array('administrators','operators'));

    return $query->fetchOne();
}  

Теперь в app.yml каждого приложения я переопределяю запрос плагина по умолчанию

#Example for apps/backend/config/app.yml
all:
    sf_guard_plugin:
        retrieve_by_username_callable: Util::retrieveAdmin

До сих пор все было хорошо, но я столкнулся с другой проблемой, поэтому я открыл новую тему: Перезапись isAuthenticated () в symfony , и вот я получил последний шаг для своего решения, который устанавливал разные имена сеансов для каждого приложения, поэтому в factories.yml каждого приложения:

#apps\backend\config\factories.yml
storage:
  class: sfSessionStorage
  param:
    session_name: backend

и теперь все настроено, внешние пользователи не могут войти в бэкэнд-приложение и наоборот.

не стесняйтесь комментировать

0 голосов
/ 04 апреля 2011

Наиболее распространенный подход - через учетные данные, мои backend приложения security.yml выглядят так:

all:
  is_secure: on
  credentials: [login_backend]
...