2009-03-20 8 views
1

J'ai créé des fournisseurs de rôles et d'appartenances personnalisés. Les utilisateurs sont des clients appartenant à l'entreprise et j'utilise la société en tant que rôle.Rôles Fba avec des groupes d'utilisateurs SharePoint

Je voudrais créer un groupe SharePoint et y ajouter plus de sociétés (par exemple, le type d'industrie), puis faire de la redirection et de la sécurité par le groupe SPGroup.

Comment récupérer SPGroup pour l'utilisateur actuellement connecté?
Je voudrais cela dans ma page de connexion personnalisée donc un autre problème est comment puis-je récupérer SPUser ou SPGroup sachant nom de connexion?

C'est ce que j'ai maintenant:


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

Mais j'ai une coupe que je ne devrais pas avoir à le faire manuellement comme celui-ci. Comment l'audience cible fonctionnera-t-elle si seul le rôle est ajouté au groupe?

Répondre

2

Utilisez la propriété OwnedGroups de la classe SPUser pour renvoyer la collection de groupes appartenant à un utilisateur.

mise à jour mal compris la question:

  1. Obtenez le utilisateur actuellement connecté: SPContext.Current.Web.CurrentUser
  2. Ajouter cette utilisation à un groupe: SPGroup.Users.Add ([nom d'utilisateur] , [email], [nom], [notes]);

Mise à jour, trois fois le charme. Vous voulez donc savoir dans quel groupe se trouve l'utilisateur en fonction des rôles qu'il a? Il est un peu une combinaison des deux tentatives précédentes d'y répondre:

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

Note importante que la propriété des rôles ne fonctionnera pas dans la prochaine version de SharePoint! Personnellement, je pense que SPContext.Current.Web.CurrentUser.Groups serait un moyen plus facile de comprendre dans quels groupes l'utilisateur est, mais il ignore votre exigence de rôle.

+0

Merci d'avoir répondu, mais SPContext.Current.Web.CurrentUser.Roles ne fonctionne pas. Encore une fois, je ne fais pas tout cela sur la page de connexion de l'événement OnLoggedIn. –

Questions connexes