簡體   English   中英

sfguard的高級/動態權限-symfony

[英]advanced / dynamic permissions on sfguard - symfony

我有一個symfony項目,想添加社區功能。

每個人都可以以管理員身份打開社區,並邀請其他人加入社區。

管理員具有比普通社區用戶更多的權限。

問題是,我想使用Syfony的sfguarduser,sfguardgroup,sfguardpermission

  1. 為此目的使用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以便您熟悉憑據在默認情況下的工作方式。

如何檢查特定用戶是否對特定組具有特殊權限?

特里斯坦(Tristan)對此進行了詳盡的報道。 您還需要看一下sfDoctrineGuard自述文件 請注意,對於其中已針對登錄用戶實時進行憑據更改的任何解決方案,您都需要覆蓋Tristan列出的大多數方法(如果不是全部)來執行某種無效操作。

另外,查看此相關問題 ,可能會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM