c# - for - sharepoint jsom
Sharepoint UserProfileManager sin administrar perfiles de usuario correctos (4)
Tengo un problema que me está volviendo loco: usar UserProfileManager como usuario no autorizado.
El problema: el usuario no tiene los derechos de "Administrar perfiles de usuario", pero igual quiero usar UserProfileManager. La idea de utilizar SPSecurity.RunWithElevatedPrivileges no parece funcionar, ya que UserProfileManager autoriza contra el SSP como parece.
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(inputWeb.Site.ID))
{
ServerContext ctx = ServerContext.GetContext(site);
UserProfileManager upm = new UserProfileManager(ctx,true);
UserProfile u = upm.GetUserProfile(userLogin);
DepartmentName = u["Department"].Value as string;
}
});
Esto aún falla en la línea "nuevo UserProfileManager", con la excepción "Debe tener administradores de permisos de perfiles de usuario para usar el modo de administrador".
Por lo que yo entiendo, RunWithElevatedPrivileges revierte a la Identidad de AppPool. WindowsIdentity.GetCurrent (). Name devuelve "NT AUTHORITY / network service", y le he otorgado esa cuenta Administrar los perfiles de usuario: no tuve suerte.
site.RootWeb.CurrentUser.LoginName devuelve SHAREPOINT / system para el sitio creado en RunWithElevatedPrivileges, que no es una cuenta de Windows válida de c.
¿Hay incluso una manera de hacer eso? No quiero otorgar a todos los usuarios los derechos de "Administrar Perfiles de Usuario", pero solo quiero obtener algunos datos de los perfiles de usuario (Departamento, País, Informes Directos). ¿Algunas ideas?
El permiso que necesita establecerse realmente se encuentra en el proveedor de servicios compartidos.
- Navega a Central Admin
- Navega hacia el proveedor de servicios compartidos
- En Perfiles de usuario y Mis sitios, vaya a Permisos de servicios de personalización.
- Si la cuenta aún no existe, agregue la cuenta para la que se ejecuta el dominio de la aplicación de su sitio.
- Otorgue al usuario permiso Administrar perfiles de usuario .
Noto que está ejecutando el grupo de aplicaciones en la cuenta de servicio de red. Implementé una función idéntica en mi sitio; sin embargo, el grupo de aplicaciones estaba alojado bajo una cuenta de Windows. Sin embargo, no estoy seguro de por qué esto marcaría la diferencia.
Gracias por las respuestas. Una advertencia: si ejecuta el grupo de aplicaciones como "servicio de red" en lugar de una cuenta de dominio, está jodido.
Pero, de nuevo, se recomienda usar una cuenta de dominio de todos modos (en un servidor de prueba utilicé el servicio de red, pero después de cambiarlo a una cuenta de dominio funcionó).
Hay dos maneras en que logré lograr esto:
- Coloque el código que usa UserProfileManager detrás de una capa de servicios web. El servicio web debe usar una identidad de grupo de aplicaciones que tenga acceso a los servicios de perfil de usuario.
- Use la técnica de suplantación que se describe en el siguiente artículo: http://www.dotnetjunkies.com/WebLog/victorv/archive/2005/06/30/128890.aspx
Aquí está la respuesta. Es un error estúpido de Microsoft, y hay una revisión. Estoy descargando ahora para probarlo.