2010-12-06 5 views
2

Сначала я опишу вкратце контекст. Я хочу иметь приложение symfony, где я могу создавать различные области. В каждой из областей вы можете иметь разные типы пользователей (или роли). Каждый пользователь может иметь несколько ролей в разных областях.Где реализовать фильтр безопасности для динамических групп

Чтобы проиллюстрировать этот вопрос, мы определим:

  • 2 зоны: "Площадь 1" и "Площадь 2".
  • 2 пользователя: «Пользователь 1» и «Пользователь 2».
  • 2 роли: «продавец» и «покупатель».
  • «Пользователь 1» является продавцом и покупателем в «зоне 1»
  • «Пользователь 2» является продавцом и покупателем в «зоне 1» и покупатель только в «зоне 2»

Мой вопрос: , который является лучшим способом проверить на ограниченных страницах, если пользователь принадлежит к данной области и если у него есть необходимая роль в этой области.

Подумав немного об этом, я сделал следующее:

  1. Когда создается область, я также создать одну sfGuardGroup за роль и один глобальный sfGuardGroup для области, каждая из которых с суффиксом области Я бы. Таким образом, в нашем примере, мы будем иметь роли:
    • область-1, продавцы-1, покупатели-1 для зоны 1
    • площадь-2, продавцы-2, покупатели-2 для области 2
  2. Пользователи добавлены в соответствующие группы. Таким образом, в нашем примере:
    • пользователя 1 будет принадлежать области-1 группы, продавцы-1 и покупатели-1
    • пользователя 2 будет принадлежать области-1 группы, продавцы-1, покупатели-1, площадь -2 и покупатели-2
  3. Из URL, я знаю, в какой области мы, к примеру:

В этот момент, я вроде застрял, как я не могу разобрать, лучшее место, чтобы осуществить проверку разрешений: изменить защитный фильтр ? Изменить действия?

ответ

1

Ваша требуемая реализация не поддерживается sfGuard, поэтому я рекомендую создать новый дополнительный фильтр безопасности.

Вы можете создать новый фильтр, который расширяет sfFilter, а затем добавить его в filter.yml после существующего фильтра безопасности. Это означает, что все существующие функции безопасности, предоставляемые sfGuard, продолжаются.

Вы можете определить, в какой области запрашивается, посмотрев на имя текущего модуля и действия (как вы доступ к этим отличается в зависимости от версии Symfony вы используете, смотрите в sfBasicSecurityFilter разгадку), то сравните это с ролями, которые текущий пользователь использует sfGuardSecurityUser.

+0

Спасибо, что поставили меня на правильный путь. Кажется, что после некоторых тестов мне удастся пойти куда-нибудь, используя пользовательский sfFilter. – 2010-12-07 15:03:33

 Смежные вопросы

  • Нет связанных вопросов^_^