如何以编程方式确定SharePoint中网站的3个权限组访问者/成员/所有者?

如何以编程方式确定SharePoint中网站的3个权限组访问者/成员/所有者?,sharepoint,permissions,Sharepoint,Permissions,在SharePoint中,我们有3个预先确定的权限组: 来访者 成员 所有者 作为/_layouts/permsetup.aspx页面中的设置 (站点设置->人员和组->设置->设置组) 如何以编程方式获取这些组名 (页面逻辑被Microsoft混淆,因此在Reflector中无法执行任何操作)SPWeb类上有以下属性: SPWeb.AssociatedVisitorGroup SPWeb.AssociatedMemberGroup SPWeb.AssociatedOwnerGroup

在SharePoint中,我们有3个预先确定的权限组:

  • 来访者
  • 成员
  • 所有者
作为/_layouts/permsetup.aspx页面中的设置

(站点设置->人员和组->设置->设置组)

如何以编程方式获取这些组名


(页面逻辑被Microsoft混淆,因此在Reflector中无法执行任何操作)

SPWeb类上有以下属性:

  • SPWeb.AssociatedVisitorGroup
  • SPWeb.AssociatedMemberGroup
  • SPWeb.AssociatedOwnerGroup

嘿,我是凯文,我是微软SharePoint权限的PM

DJ的回答是完全正确的,但我要警告你,根据你所做的,这可能不是最可靠的方法。用户可能会将这些组吹走,而这些关联也会消失。我肯定会在你获取这些东西的过程中建立一些备份逻辑

我发现各种“关联…”属性通常为空。唯一可靠的方法是在SPWeb上使用属性包:

  • 访客:
    vti\U协会访客组
  • 成员:
    vti\U协会成员组
  • 所有者:
    vti\u协会所有者组
要将它们转换为SPGroup对象,可以使用:

int idOfGroup = Convert.ToInt32(web.Properties["vti_associatemembergroup"]);
SPGroup group = web.SiteGroups.GetByID(idOfGroup);
但是,由于关联可能丢失,这将在上述代码中引发异常。更好的方法是:

  • 通过确保您要查找的属性实际存在,检查是否在web上设置了关联

  • 检查属性给定ID的组是否实际存在。删除对SiteGroups.GetByID的调用,而是在SiteGroups中的每个SPGroup中循环查找ID

  • 更强大的解决方案:

    public static SPGroup GetMembersGroup(SPWeb web)
    {
        if (web.Properties["vti_associatemembergroup"] != null)
        {
            string idOfMemberGroup = web.Properties["vti_associatemembergroup"];
            int memberGroupId = Convert.ToInt32(idOfMemberGroup);
    
            foreach (SPGroup group in web.SiteGroups)
            {
                if (group.ID == memberGroupId)
                {
                    return group;
                }
            }
        }
        return null;
    }
    

    请注意,使用sharepoint 2007或2003标记是很好的,因为这与sharepoint 2007或2003相关。因为我无法确定这是针对2007的(我面前没有2003),所以我认为最好使用通用sharepoint标记。类似地,我也不会将我的c#问题标记为“c#v1.0”、“c#v2.0”等。没问题,这只会有助于给出答案。检查当前用户是否是成员的简单方法:SPContext.current.Web.AssociatedOwnerGroup.ContainesCurrentUsers谢谢,我完全错过了这些。嗨,凯文。我们有多个子站点,每个子站点上都有这3个自定义组,我们已经在提到的权限页面中设置了它们。这或多或少是我们为每个子站点管理不同权限(组)的唯一方法。我没有做任何关于修改实际设置的定制。目标是获得每个组中所有用户的列表,以建立邮件列表。在SharePoint中,人们利用其许可权利进行伤害和愚蠢行为的风险永远存在。