Etiquetas

, ,


En algunos casos tendremos la necesidad de validar si un usuario que accede a una aplicación de SharePoint pertenece o no a un perfil en específico, esta tarea se vuelve más compleja cuando no agregamos a los perfiles de SharePoint usuarios directamente sino grupos del directorio activo lo cual es bastante común, pues con el método que dejo más abajo se puede validar si un usuario tiene un perfil en concreto ya sea que este otorgado directamente al incluirlo en un perfil en la aplicación o que pertenezca a un grupo de directorio activo que está incluido en algún perfil.


public bool UsuarioTienePermisos(string url, string nombregrupo, string NombreUsuario)
{
bool reachedMax = false;
bool TienePermisos= false;
SPSecurity.RunWithElevatedPrivileges(delegate
{
try
{
using (SPSite site = new SPSite(url))
{
using (SPWeb web = site.OpenWeb())
{
SPGroup grupo = site.RootWeb.SiteGroups[NombreUsuario];
foreach (SPUser usuario in grupo.Users)
{
if (!usuario.IsDomainGroup)
{
if (user.LoginName.ToUpper().Equals(NombreUsuario))
{

TienePermisos = true;
return;
}
}
else
{
if (IsUserInADGroup(web, usuario.LoginName,
NombreUsuario, out reachedMax))
{ TienePermisos = true;
return;
}
}
}
}
}
}
catch (Exception ex)
{
}
});
return TienePermisos ;
} private static bool ValidarUsuarioDirectoiroActivo(SPWeb web, string nombregrupo,
string nombreUsuario, out bool reachedMax)
{
SPPrincipalInfo[] principals =
SPUtility.GetPrincipalsInGroup(web, nombregrupo, 500, out reachedMax);

if (principals == null || principals.Length == 0)
{
return false;
}
else
{
foreach (SPPrincipalInfo principal in principals)
{

if (!principal.IsSharePointGroup && principal.PrincipalType
!= SPPrincipalType.SecurityGroup &&
principal.DisplayName.ToUpper() != “SYSTEM ACCOUNT”)
{
if (principal.LoginName.ToUpper() == nombreUsuario.ToUpper())
{
return true;
}
}
else if (principal.PrincipalType == SPPrincipalType.SecurityGroup)
{
if (ValidarUsuarioDirectoiroActivo(web, principal.LoginName, nombreUsuario, out reachedMax))
{
return true;
}
}
}
return false;
}
}
}