17

ユーザー(現在ログインしているユーザーではない)が特定のグループのメンバーであるかどうかを確認するにはどうすればよいですか?メンバーではないグループからユーザーを取得しようとすると、SPExceptionが発生するため、nullをチェックすることはできません。

では、この問題をどのように解決しますか。現時点では、SPGroup.Users.XML文字列でユーザー名を検索するか、すべてのグループメンバーを繰り返し処理してログイン名を確認することを検討しています。

更新: ユーザーのメンバーシップをチェックするために例外処理を使用しないようにしたいことを忘れました。

4

6 に答える 6

19

SPUserと静的メソッドの拡張クラスを作成します。

public static class SPUserExtension {
   public static bool InGroup(this SPUser user, SPGroup group)
      {
        return user.Groups.Cast<SPGroup>()
          .Any(g => g.ID == group.ID);
      }
   }
}

次に、SPUserオブジェクトで次のメソッドを呼び出します。

SPUser user;
SPGroup group;
//...
bool isMember = user.InGroup(group);
于 2011-12-01T15:39:14.510 に答える
6

これは、LINQを使用して拡張メソッドを作成することで実現しました。principalSPGroupはSPPrincipalから継承するため、パラメーターに渡すことができるはずです。

public static bool Contains(this SPRoleAssignmentCollection rac, SPPrincipal principal)
{
    XElement racXml = XElement.Parse(rac.Xml);
    return racXml.Elements("permission").Any(vw => (int)vw.Attribute("memberid") == principal.ID);
}
于 2009-07-01T09:00:54.707 に答える
4

いくつかの方法。SharePointグループには、グループ所有者のみがメンバーシップの詳細を表示できるようにするか、全員がメンバーシップの詳細を表示できるようにするオプションがあります。すべてが許可されている場合はセキュリティ制限を取得できません。それ以外の場合は、RunWithElevatedPrivilegesを取得し、その中で使用するSPSiteとSPWebの新しいインスタンスを取得する必要があります。

以下はオプションであると言われています:

private Boolean isUserInGroup(SPGroup oGroupToTestFor,String sUserLoginName)
    {   
        Boolean bUserIsInGroup = false;
        try
        {
            SPUser x = oGroupToTestFor.Users[sUserLoginName];
            bUserIsInGroup = true;
        }
        catch (SPException)
        {
            bUserIsInGroup = false;
        }
        return bUserIsInGroup;

    }

別の方法は

private Boolean isUserInGroup(SPGroup oGroupToTestFor, String sUserLoginName)
    {   
        Boolean bUserIsInGroup = false;

            SPUser oUser =null;
            try{
                oUser = SPContext.Current.Web.AllUsers[sUserLoginName];
                }
            catch{}
            if(oUser!=null){
            foreach (SPUser item in oGroupToTestFor.Users)
            {
                if (item.UserToken == oUser.UserToken)
                {
                    bUserIsInGroup = true;
                    break;
                }                    
            }
            }

        return bUserIsInGroup;

    }
于 2009-06-30T16:00:18.620 に答える
1

RunWithElevatedPrivilegesを使用してみましたか?

SPSecurity.RunWithElevatedPrivileges(delegate()
        {
             //put your code here to get the group and test for the user
        });
于 2009-06-30T14:35:16.863 に答える
0

SPSecurity.RunWith ..を機能させるには、SPSiteおよび/またはSPWebオブジェクトの新しいインスタンスが必要であり、コンテキストを使用しないでください。そうしないと機能しません。

使用するSPUserオブジェクトはありますか?その場合は、SPUser.Groupsコレクションを使用できます。

于 2009-07-01T05:50:26.860 に答える
0

特定のユーザーが特定のSharePointグループに存在するかどうかを確認する簡単な方法を実装しました。SPUserオブジェクトに対するlinqを使用した単純なステートメント。

bool userExsists = spUser.Groups.Cast<SPGroup>().Any(g => g.Name.ToLower() == spGroup.Name.ToLower());

SharePointCoreSolutionsの詳細な投稿を見つけてください。

于 2013-12-17T09:28:59.100 に答える