代码之家  ›  专栏  ›  技术社区  ›  Flo

Sharepoint:检查用户是否是组的成员

  •  17
  • Flo  · 技术社区  · 16 年前

    我如何检查用户(不是当前登录的用户)是否是某个组的成员?试图从一个用户不是其成员的组中检索用户会导致SPEException,因此无法检查null。

    6 回复  |  直到 8 年前
        1
  •  6
  •   Alex Angas Colin    16 年前

    创建 Extension class for SPUser and static method :

    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);
    
        2
  •  17
  •   Anatoly Mironov    14 年前

    principal 参数:

    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);
    }
    
        3
  •  4
  •   Alex Angas Colin    16 年前

    有几种方法。SharePoint组有一个选项,可以只允许组所有者查看成员资格详细信息,也可以允许每个人查看成员资格细节。如果每一个都被允许,您将不会得到安全限制,否则您需要运行WithElevatedPrivileges,并确保获得SPSite和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;
    
        }
    
        4
  •  1
  •   cjuk    16 年前

    你试过用吗 RunWithElevatedPrivileges ?

    SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                 //put your code here to get the group and test for the user
            });
    
        5
  •  0
  •   Robin Meuré    16 年前

    为了确保安全生产。跑步。.work,您需要有一个SPSite和/或SPWeb对象的新实例,并且不要使用上下文,否则它将无法工作。

    您有SPUser对象要使用吗?如果是这样,您可以使用SPUser。组集合。

        6
  •  0
  •   user21394    12 年前

    我已经实现了一种简单的方法来检查特定SharePoint组中是否存在特定用户。在SPUser对象上使用linq的简单语句。

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

    查看详细帖子 SharePoint Core Solutions .