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クレデンシャルがデフォルトでどのように機能するかを理解するために、を見てください。

特定のユーザーが特定のグループに対して特定の権限を持っているかどうかを確認するにはどうすればよいですか?

トリスタンはこれをかなり徹底的にカバーしました。また、 sfDoctrineGuardreadmeも確認する必要があります。サインインしたユーザーに対してクレデンシャルの変更がライブで行われるソリューションでは、ある種の無効化を実行するために、Tristanによってリストされたすべてではないにしてもほとんどのメソッドをオーバーライドする必要があることに注意してください。

また、この関連する質問をチェックしてください、それは役に立つかもしれません。

于 2010-11-19T00:37:11.397 に答える