Расширенные / динамические разрешения на sfguard - symfony
У меня есть проект Symfony и я хотел бы добавить функцию сообщества.
Каждый может открыть сообщество в качестве администратора и пригласить людей присоединиться к сообществу.
Администратор имеет больше прав, чем обычный пользователь сообщества.
Дело в том, что я хочу использовать sfguarduser, sfguardgroup, sfguardpermission от Syfony
- Имеет ли смысл использовать для этого архитектуру sfguard?
- Как я могу проверить, есть ли у конкретного пользователя специальные права на определенную группу?
2 ответа
Эй, это тебе немного поможет;)
Внутри действия:
class myAccountActions extends sfActions
{
public function executeDoThingsWithCredentials()
{
$user = $this->getUser();
// Check if the user has a credential
echo $user->hasCredential('foo'); => true
// Check if the user has both credentials
echo $user->hasCredential(array('foo', 'bar')); => true
// Check if the user has one of the credentials
echo $user->hasCredential(array('foo', 'bar'), false); => true
// Remove a credential
$user->removeCredential('foo');
echo $user->hasCredential('foo'); => false
// Remove all credentials (useful in the logout process)
$user->clearCredentials();
echo $user->hasCredential('bar'); => false
}
}
Внутри слоя:
<?php if ($sf_user->hasCredential('section3')): ?>
....
<?php endif; ?>
Вы можете рассмотреть возможность использования в дополнение:
if($user->hasGroup('SOME_GROUP'))
Источник: Symfony внутри слоя
Имеет ли смысл использовать для этого архитектуру sfguard?
Абсолютно, но вам нужно это немного исправить. По умолчанию Symfony хранит учетные данные в сеансе, что означает, что они не будут признаны недействительными, пока не истечет срок вашего сеанса. Это большая проблема, когда вы ожидаете увидеть немедленный эффект, добавив кого-либо в группу или предоставив ему разрешение.
Чтобы это исправить, вам нужно выполнить одно из следующих действий:
- Загружайте учетные данные при каждом запросе, а не при входе.
- Когда учетные данные пользователя изменяются, сделайте их недействительными либо через глобальную настройку кэша в APC (вы используете APC, верно?), Либо через настройку в профиле пользователя.
В любом случае вам придется ознакомиться с пользовательской системой Symfony и sfGuardDoctrine. Взгляни на sfGuardSecurityUser::signIn
так что вы знакомы с тем, как учетные данные работают по умолчанию.
Как я могу проверить, есть ли у конкретного пользователя специальные права на определенную группу?
Тристан довольно тщательно это осветил. Вы также захотите взглянуть на файл readme sfDoctrineGuard. Обратите внимание, что для любого решения, в котором изменения учетных данных происходят в реальном времени для вошедшего в систему пользователя, вам потребуется переопределить большинство, если не все методы, перечисленные Tristan, для выполнения какого-либо аннулирования.
Кроме того, проверьте этот связанный вопрос, это может быть полезно.