1

我有一个 symfony 项目,想添加社区功能。

每个人都可以以管理员身份打开社区并邀请人们加入社区。

管理员拥有比普通社区用户更多的权限。

问题是,我想使用 Syfony 的 sfguarduser、sfguardgroup、sfguardpermission

  1. 为此目的使用 sfguard 架构是否有意义?
  2. 如何检查特定用户是否对特定组具有特定权限?
4

2 回答 2

3

嘿,这会对你有一点帮助;)

行动内部:

  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

于 2010-11-18T03:19:11.467 回答
2

为此目的使用 sfguard 架构是否有意义?

绝对可以,但是您需要稍微修复一下。默认情况下,Symfony 将凭据存储在会话中,这意味着在会话过期之前它们不会失效。当您希望通过将某人添加到组或授予他们权限来立即看到效果时,这是一个大问题。

要解决此问题,您需要执行以下操作之一:

  • 在每个请求上加载凭据,而不是在登录时加载。
  • 当用户的凭据更改时,通过 APC 中的全局缓存设置(您正在使用 APC,对吗?)或用户配置文件中的设置使它们无效。

无论哪种方式,您都必须熟悉 Symfony 和 sfGuardDoctrine 用户系统。看一下,sfGuardSecurityUser::signIn以便您熟悉默认情况下凭据的工作方式。

如何检查特定用户是否对特定组具有特定权限?

特里斯坦非常彻底地介绍了这一点。您还需要查看sfDoctrineGuard 自述文件。请注意,对于为登录用户实时更改凭据的任何解决方案,您需要覆盖 Tristan 列出的大多数(如果不是全部)方法以执行某种失效。

另外,查看这个相关问题,它可能会有所帮助。

于 2010-11-19T00:37:11.397 回答