Как программно определить 3 группы разрешений «Посетители / Участники / Владельцы» для веб-сайтов в SharePoint? - PullRequest
4 голосов
/ 17 сентября 2009

В SharePoint у нас есть 3 предопределенные группы разрешений:

  • Посетители
  • Пользователи
  • Владельцы

Как настроено на странице /_layouts/permsetup.aspx.

(Настройки сайта-> Люди и группы-> Настройки-> Группы настройки)

Как получить эти имена групп программно?

(Логика страницы запутана Microsoft, поэтому в Reflector этого делать нельзя)

Ответы [ 3 ]

9 голосов
/ 17 сентября 2009

В классе SPWeb есть свойства:

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

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

5 голосов
/ 11 августа 2010

Я обнаружил, что различные свойства "Associated ..." часто имеют значение NULL. Единственный надежный способ - использовать пакет свойств на SPWeb:

  • Посетители: vti_associatevisitorgroup
  • Участники: vti_associatemembergroup
  • Владельцы: vti_associateownergroup

Чтобы преобразовать их в объект SPGroup, вы можете использовать:

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

Однако, как Кевин упоминает , ассоциации могут быть потеряны, что вызовет исключения в приведенном выше коде. Лучший подход заключается в следующем:

  1. Убедитесь, что в сети установлены ассоциации, убедившись, что свойство, которое вы ищете, действительно существует.

  2. Убедитесь, что группа с идентификатором, заданным свойством, действительно существует. Удалите вызов SiteGroups.GetByID и вместо этого переберите каждую SPGroup в SiteGroups в поисках идентификатора.

Более надежное решение:

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;
}
3 голосов
/ 18 сентября 2009

Привет, меня зовут Кевин, я - менеджер по разрешениям для SharePoint в Microsoft.

Диджейский ответ полностью верен, но я предупреждаю, что в зависимости от того, что вы делаете, это не самая надежная вещь для использования. Пользователи могут сдуть эти группы, и эти ассоциации будут потеряны. Я определенно хотел бы встроить некоторую логику резервного копирования во что бы вы ни брали их.

...