我有一个 symfony 项目,想添加社区功能。
每个人都可以以管理员身份打开社区并邀请人们加入社区。
管理员拥有比普通社区用户更多的权限。
问题是,我想使用 Syfony 的 sfguarduser、sfguardgroup、sfguardpermission
- 为此目的使用 sfguard 架构是否有意义?
- 如何检查特定用户是否对特定组具有特定权限?
我有一个 symfony 项目,想添加社区功能。
每个人都可以以管理员身份打开社区并邀请人们加入社区。
管理员拥有比普通社区用户更多的权限。
问题是,我想使用 Syfony 的 sfguarduser、sfguardgroup、sfguardpermission
嘿,这会对你有一点帮助;)
行动内部:
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 将凭据存储在会话中,这意味着在会话过期之前它们不会失效。当您希望通过将某人添加到组或授予他们权限来立即看到效果时,这是一个大问题。
要解决此问题,您需要执行以下操作之一:
无论哪种方式,您都必须熟悉 Symfony 和 sfGuardDoctrine 用户系统。看一下,sfGuardSecurityUser::signIn
以便您熟悉默认情况下凭据的工作方式。
如何检查特定用户是否对特定组具有特定权限?
特里斯坦非常彻底地介绍了这一点。您还需要查看sfDoctrineGuard 自述文件。请注意,对于为登录用户实时更改凭据的任何解决方案,您需要覆盖 Tristan 列出的大多数(如果不是全部)方法以执行某种失效。
另外,查看这个相关问题,它可能会有所帮助。