Crear sitios con el modelo de objetos

03/02/2006 - 13:44 por Fran Ruiz | Informe spam
Hola, tengo una web part que genera sitios de primer nivel desde un área de
SPS.
El problema que he encontrado es que sólamente crea el sitio si el usuario
que accede a la página es administrador del servidor, da error de acceso
denegado aunque el usuario sea administrador del Portal.
¿Existe alguna forma de hacer esto con los permisos 'reales' del usuario? si
no es así, ¿alguien sabe cómo lo hace el propio SPS desde el directorio de
sitios?

Gracias de antemano, Fran

Preguntas similare

Leer las respuestas

#11 Fran Ruiz
08/02/2006 - 15:51 | Informe spam
Perdón por la posible repetición, pero no sé si el mensaje que mandé ayer ha
llegado bien, así que hayá va:
Hola a todos.
Lo primero agradecer tanto a Gustavo como a Tako las sugerencias aportadas,
así como la atención prestada a este problema que expuse.
Después de realizar muchas pruebas y revisar muchas muchas páginas web, me
he decidido por realizar una impersonación de usuario en el momento en el que
tenemos que generar el Top Level Site. Esta alternativa no me convencía entre
otros motivos porque implicaba (a mi entender) especificar un usuario y una
contraseña en el código (parametrizado o no) y eso podía suponer un problema
de seguridad.
Sin embargo he encontrado una manera de realizar la impersonación de forma
que utiliza el usuario del 'Application Pool' de Sharepoint en el IIS.
Básicamente lo que tengo que hacer es:
1.- Antes de instanciar el objeto 'SPGlobalAdmin' realizo la impersonación
así:
Dim ctx As WindowsImpersonationContext = Nothing
ctx = WindowsIdentity.Impersonate(System.IntPtr.Zero)
WindowsIdentity.GetCurrent().Impersonate() [1]
2.- Una vez que termino con o sin errores el proceso de alta del Top Level
Site, vuelvo al estado anterior así:
ctx.Undo()
WindowsIdentity.GetCurrent().Impersonate()

Tampoco sé muy bien por qué, pero si no especifico la línea [1] no funciona
correctamente.

Resumiendo: Si bien no he conseguido solucionar el error, he dado con un
'workaround' que en principio no me causaría problemas de seguridad.
Una vez más gracias a todos, si tenéis más información al respecto o alguna
duda sobre la solución, no tenéis más que pedirlo.
referencia:
http://www.bluedoglimited.com/Share...st.aspx?ID8


"Gustavo" wrote:

Hola Fran,
Por pura curiosidad, puedes intentar conseguir el usuario por medio del
contexto de SharePoint y no por medio de la pagina? Algo asi como:

SPWeb MySite = SPControl.GetContextWeb(Context);
string myLogin = MySite.CurrentUser.LoginName;

Supongo que dara lo mismo, pero uno nunca sabe con SPS...
Saludes,
Gustavo
http://www.gavd.net/servers/default.aspx


"Fran Ruiz" wrote:

> Hola Gustavo,
> comprobado el tema de los parámetros, en principio coge los valores
> correctamente. Primero obtengo 'strUsuario' de la variable de servidor
> LOGON_USER:
> strUsuario = Page.Request.ServerVariables("LOGON_USER").ToString
> y luego obtengo el resto de información del usuario con el Modelo de Objetos
> del SPS:
> SPUtility.GetNTFullNameandEmailfromLogin(siteWeb, strUsuario, strNombre,
> strCorreo)
> Este proceso lo tengo encapsulado en un try catch y no da errores. Por si
> acaso he revisado también en modo depuración los valores y los coge
> correctamente, en formato dominio\usuario...
>
>
> "Gustavo" wrote:
>
> > Hola Fran,
> > Has controlado que los parametros "strUsuario" y "strNombre" son correctos
> > en tu WebPart? recuerda que tienes que usar "dominio\usuario" en el
> > "strUruario".
> > Saludos,
> > Gustavo
> > http://www.gavd.net/servers/default.aspx
> >
> >
> > "Fran Ruiz" wrote:
> >
> > > Gracias por la sugerencia Tako, por desgracia parece que no se aplica, ya que
> > > he probado a dar al usuario permisos de administración sobre la Base de Datos
> > > y nada, el mismo problema. De hecho hasta he le he dado al usuario del ASPNET
> > > permisos de administración en la Base de Datos (por probar) y tampoco ha dado
> > > resultado.
> > >
> > > "Tako" wrote:
> > >
> > > >
> > > > No se si habrás visto esto:
> > > >
> > > > http://groups.google.com/group/micr...6b2cdb14f8
> > > >
> > > > Al menos es más o menos parecido, a ver si hay suerte y te vale.
> > > >
> > > > Fran Ruiz wrote:
> > > > > Hola de nuevo Gustavo;
> > > > > te cuento:
> > > > > El error que se produce es: "Access is denied."
> > > > > Con origen en: "Microsoft.SharePoint.Library"
> > > > > Te pego también la pila de llamada por si te aclara un poco más:
> > > > > at
> > > > > Microsoft.SharePoint.Library.SPRequestInternalClass.SetIISInstanceId(Int32
> > > > > lIISInstId)
> > > > > at Microsoft.SharePoint.Library.a.a(Int32 A_0)
> > > > > at Microsoft.SharePoint.Administration.SPVirtualServer.c()
> > > > > at Microsoft.SharePoint.Administration.SPVirtualServer.get_Url()
> > > > > at
> > > > > Microsoft.SharePoint.Administration.SPVirtualServer.MakeFullUrl(String
> > > > > strUrl) at
> > > > > Microsoft.SharePoint.Administration.SPSiteCollection.Add(String
> > > > > strSiteUrl, String strTitle, String strDescription, UInt32 nLCID,
> > > > > String strWebTemplate, String strOwnerLogin, String strOwnerName,
> > > > > String strOwnerEmail, String strSecondaryContactLogin, String
> > > > > strSecondaryContactName, String strSecondaryContactEmail) at
> > > > > Microsoft.SharePoint.Administration.SPSiteCollection.Add(String
> > > > > strSiteUrl, String strTitle, String strDescription, UInt32 nLCID,
> > > > > String strWebTemplate, String strOwnerLogin, String strOwnerName,
> > > > > String strOwnerEmail) at
> > > > > ListaSite.BarraHerramientas.button1_click(Object sender, EventArgs
> > > > > e)" String
> > > > >
> > > > > El código que está intentando ejecutar es:
> > > > > Dim virtualServer As SPVirtualServer > > > > > > globAdmin.OpenVirtualServer(uri) Dim siteCollections As
> > > > > SPSiteCollection = virtualServer.Sites
> > > > > Dim sitioCreado As SPSite = siteCollections.Add(siteUrl, siteTitle,
> > > > > siteDescription, Convert.ToUInt32(3082), plantillaSitio, strUsuario,
> > > > > strNombre, strCorreo)
> > > > > Las variables de esta última instrucción están todas inicializadas y
> > > > > con un valor correcto, y es en ésta justo en la que da el error de
> > > > > permisos.
> > > > >
> > > > > De nuevo gracias por tu ayuda, Fran.
> > > > >
> > > > > "Gustavo" wrote:
> > > > >
> > > > >> Hola Fran,
> > > > >> Tienes razon, si el usuario tiene derechos para crear el sitio desde
> > > > >> la interfase de SharePoint, tiene tambien derechos para crearlos
> > > > >> desde una WebPart, o lo que sea. Si ya has comprobado que entrando
> > > > >> al sistema, el usuario puede crear los sitios manualmente, y no con
> > > > >> la WebPart, me hace pensar que ese no sea el problema. Puedes mandar
> > > > >> el error que te genera el codigo?
> > > > >> Saludes,
> > > > >> Gustavo
> > > > >> http://www.gavd.net/servers/default.aspx
> > > > >>
> > > > >>
> > > > >> "Fran Ruiz" escribió:
> > > > >>
> > > > >>> Gracias por la respuesta Gustavo; el problema y lo que me hace
> > > > >>> intentar evitar la impersonación es que no se trata de generar
> > > > >>> áreas, sino sitios de primer nivel (top level sites)
> > > > >>> La idea es que si el usuario tiene privilegios para generar un
> > > > >>> sitio a
> > > > >>> través del directorio de sitios, entiendo que debería tenerlos
> > > > >>> también para generar estos sitios mediante la web part que
> > > > >>> comentaba en el correo anterior. ¿se os ocurre alguna alternativa?
> > > > >>>
> > > > >>> Muchas gracias de nuevo, Fran.
> > > > >>>
> > > > >>> "Gustavo" wrote:
> > > > >>>
> > > > >>>> Hola Fran,
> > > > >>>> Para hacer que usuarios "normales" puedan crear areas, tienes que
> > > > >>>> usar un impersonador, que le haga creer a SPS por un momento que
> > > > >>>> el usuario es un administrador, y luego siga con sus derechos
> > > > >>>> originales.
> > > > >>>> Por Internet puedes encontrar varias formas de impersonadores, por
> > > > >>>> ejemplo en http://www.15seconds.com/issue/040511.htm .
> > > > >>>> Saludes,
> > > > >>>> Gustavo
> > > > >>>> http://www.gavd.net/servers/default.aspx
> > > > >>>>
> > > > >>>>
> > > > >>>> "Fran Ruiz" wrote:
> > > > >>>>
> > > > >>>>> Hola, tengo una web part que genera sitios de primer nivel desde
> > > > >>>>> un área de SPS.
> > > > >>>>> El problema que he encontrado es que sólamente crea el sitio si
> > > > >>>>> el usuario que accede a la página es administrador del servidor,
> > > > >>>>> da error de acceso denegado aunque el usuario sea administrador
> > > > >>>>> del Portal.
> > > > >>>>> ¿Existe alguna forma de hacer esto con los permisos 'reales' del
> > > > >>>>> usuario? si no es así, ¿alguien sabe cómo lo hace el propio SPS
> > > > >>>>> desde el directorio de sitios?
> > > > >>>>>
> > > > >>>>> Gracias de antemano, Fran
> > > >
> > > >
> > > >
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida