Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sharepoint:检查用户是否为组成员_Sharepoint_Usergroups - Fatal编程技术网

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

Sharepoint:检查用户是否为组成员,sharepoint,usergroups,Sharepoint,Usergroups,如何检查用户(不是当前登录的用户)是否是某个组的成员?试图从用户不是其成员的组中检索用户会导致SPEException,因此无法检查null 那么你将如何解决这个问题呢。目前,我考虑在SPGroup.Users.XML字符串中搜索用户名,或者迭代所有组成员并检查登录名 更新: 我忘了提到我想避免使用异常处理来检查用户的成员资格 你试过使用吗 两条路。SharePoint组具有一个选项,该选项仅允许组所有者查看成员资格详细信息,或允许所有人查看成员资格详细信息。如果每一个都被允许,您将不会获得安全

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

那么你将如何解决这个问题呢。目前,我考虑在SPGroup.Users.XML字符串中搜索用户名,或者迭代所有组成员并检查登录名

更新: 我忘了提到我想避免使用异常处理来检查用户的成员资格

你试过使用吗


两条路。SharePoint组具有一个选项,该选项仅允许组所有者查看成员资格详细信息,或允许所有人查看成员资格详细信息。如果每一个都被允许,您将不会获得安全限制,否则您需要以提升的权限运行,并确保在其中使用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;

    }

为了使SPSecurity.RunWith。。工作时,您需要有SPSite和/或SPWeb对象的新实例,并且不要使用上下文,否则它将无法工作


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

我使用LINQ编写了一个扩展方法。SPGroup继承自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);
}
创建一个:


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

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

在上找到详细的帖子。

不,这不会改变任何事情。索引器仍然抛出异常。这应该是注释而不是答案。。。您用另一个问题“回答”了。谢谢您的解决方案。虽然我不知道你说的“SPrac”是什么意思,但我为SPGroup类编写了一个扩展方法,用于检查用户登录名的SPGroup.Users.Xml属性。很抱歉,查找并替换出错。现已修复。请注意,除非用户已浏览网站,否则AllUsers集合可能不包含该成员。为什么不使用oUser.ID而不是UserToken?
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 user;
SPGroup group;
//...
bool isMember = user.InGroup(group);
bool userExsists = spUser.Groups.Cast<SPGroup>().Any(g => g.Name.ToLower() == spGroup.Name.ToLower());