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

时间:2009-09-17 08:19:18

标签: sharepoint permissions

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

  • 访客
  • 成员
  • 所有者

在/_layouts/permsetup.aspx页面中进行设置。

(网站设置 - >人员和群组 - >设置 - >设置群组)

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

(页面逻辑被Microsoft混淆,因此在Reflector中无法做到)

3 个答案:

答案 0 :(得分:9)

SPWeb类上有一些属性:

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

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.associatedmembergroup.aspx

答案 1 :(得分:5)

我发现各种“Associated ......”属性通常都是NULL。唯一可靠的方法是使用SPWeb上的属性包:

  • 访客: vti_associatevisitorgroup
  • 会员: vti_associatemembergroup
  • 所有者: vti_associateownergroup

要将它们转换为SPGroup对象,您可以使用:

int idOfGroup = Convert.ToInt32(web.Properties["vti_associatemembergroup"]);
SPGroup group = web.SiteGroups.GetByID(idOfGroup);

然而,作为Kevin mentions,关联可能会丢失,这会在上面的代码中抛出异常。更好的方法是:

  1. 通过确保您要查找的媒体确实存在,检查网络上是否已设置关联。

  2. 检查属性给出的ID实际存在的组。删除对SiteGroups.GetByID的调用,而是遍历SiteGroups中的每个SPGroup以查找ID。

  3. 更强大的解决方案:

    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;
    }
    

答案 2 :(得分:3)

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

DJ的答案是完全正确的,但我警告说,根据你正在做的事情,这可能不是最强大的使用方法。用户可以吹走这些组,这些关联将会丢失。我肯定会在你为它们提取的任何内容中构建一些备份逻辑。