Роли FBA с группами пользователей SharePoint

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

Я хотел бы создать группу SharePoint и добавить в нее больше компаний (например, тип отрасли), а затем выполнить перенаправление и безопасность с помощью SPGroup.

Как мне получить SPGroup для текущего пользователя, вошедшего в систему?
Я хотел бы сделать это на моей пользовательской странице входа, поэтому другая проблема заключается в том, как получить SPUser или SPGroup, зная имя входа?

Вот что у меня сейчас:


private List GetGroupsForUser(List roleAccounts)
{
    List groups = new List();
    SPSecurity.RunWithElevatedPrivileges(
     delegate()
     {
         using (SPSite site = new SPSite(SPContext.Current.Web.Site.ID))
         {
             SPUserCollection users = site.RootWeb.SiteUsers;
             foreach (string account in roleAccounts)
             {
                 SPGroupCollection accGroups = users[account].Groups;
                 foreach (SPGroup spg in groups)
                 {
                     groups.Add(spg);
                 }
             }
         }
     }
     );

    return groups;

}

private string GetRoleManagerName()
{
    foreach (KeyValuePair setting in SPContext.Current.Site.WebApplication.IisSettings)
    {
        if (string.IsNullOrEmpty(setting.Value.RoleManager) == false)
            return setting.Value.RoleManager.ToLower();
    }
    return null;
}

private List GetSpAccounts()
{
    List roleAccounts = new List();
    string roleProviderName = GetRoleManagerName();
    foreach (string role in Roles.GetRolesForUser(login.UserName))
    {
        roleAccounts.Add(roleProviderName + ":" + role.ToLower());
    }

    return roleAccounts;
}


// and now I can use it
List roleAccounts = GetSpAccounts();
List groups = GetGroupsForUser(roleAccounts);

Но я чувствую, что мне не нужно делать это вручную вот так. Как будет работать Целевая аудитория, если в группу добавлена ​​только роль?


person Robert Vuković    schedule 20.03.2009    source источник


Ответы (1)


Используйте свойство OwnedGroups класса SPUser, чтобы вернуть коллекцию групп, принадлежащих пользователю.

Обновление неправильно понял вопрос:

  1. Получите текущего пользователя, вошедшего в систему: SPContext.Current.Web.CurrentUser
  2. Добавьте это использование в группу: SPGroup.Users.Add ([имя пользователя], [адрес электронной почты], [имя], [примечания]);

Обновление, третий раз прелесть. Итак, вы хотите узнать, в какой группе находится пользователь, в зависимости от ролей, которые у него есть? Это что-то вроде комбинации двух вышеперечисленных попыток ответить на него:

var matched = from r in SPContext.Current.Web.CurrentUser.Roles
              where r.Name = [Role]
              select r.Groups;

Важное примечание: свойство Roles не будет работать в следующей версии SharePoint! Лично я думаю, что SPContext.Current.Web.CurrentUser.Groups был бы более простым способом выяснить, в каких группах находится пользователь, но он игнорирует требования вашей роли.

person Robert MacLean    schedule 20.03.2009
comment
Спасибо за ответ, но SPContext.Current.Web.CurrentUser.Roles показывает исключение. Еще одно не то, что я делаю все это на странице входа в систему в событии OnLoggedIn. - person Robert Vuković; 20.03.2009