Mostrando entradas con la etiqueta RunWithElevatedPrivileges. Mostrar todas las entradas
Mostrando entradas con la etiqueta RunWithElevatedPrivileges. Mostrar todas las entradas

sábado, 26 de mayo de 2012

Tips/Info #23 Sharepoint 2010

1-Script de powershell para setear el mail de los access request de los sitios

$webapp = Get-SPWebApplication "nombre del web application"
foreach($site in $webapp.Sites){
    foreach($web in $site.AllWebs){
        if ($web.HasUniqueRoleDefinitions){
            if($web.RequestAccessEnabled){
                Write-Host $Web.URL
                Write-Host "---"

                Write-Host $Web.URL "Actualizando RequestAccessEmail"
                Write-Host "---"
                $web.RequestAccessEmail ="email@email.com"
                $web.Update()
            }
            else {
                Write-Host "Access Request no habilitado." $Web.URL
            }
        }
    }
}

2-Obtener los administradores de los sitios mediante powershell

$siteUrl = Read-Host "Enter Site URL"
$rootSite = New-Object Microsoft.SharePoint.SPSite($siteUrl)
$spWebApp = $rootSite.WebApplication

foreach($site in $spWebApp.Sites)
{
    foreach($siteAdmin in $site.RootWeb.SiteAdministrators)
    {
        Write-Host "$($siteAdmin.ParentWeb.Url) - $($siteAdmin.DisplayName)"
    }
    $site.Dispose()
}
3-Exportar los resultados de las encuestas en Sharepoint 2010

  • Ir a Acciones del sitio/Ver todo el contenido del sitio
  • Ir a la encuesta
  • Acciones/ Exportar a hoja de datos

    image


    4-Agregar la opción de Tags & Notes dentro de cualquier página con javascript

    <a title="Etiquetar pagina" id="TagsAndNotes_ctl00_ctl42" onclick="SafeRunFunction(function() { TagDialogOpener.Open('http:\u002f\u002fsharepoint2010a:45354\u002fen-us\u002fPages\u002fdefault.aspx', document.title, '0'); }, 'SocialData.js', 'TagDialogOpener');" href="javascript:;">Etiquetar página</a>



    5-Encontrar todas las alertas de una site collection mediante una query de SQL

     Add-PSSnapin microsoft.sharepoint.powershell

    $site = Get-SPSite "http://sitiosharepoint2010/sites/sitioalertas/"
    $alertResultsCollection = @()
    foreach ($web in $site.AllWebs)
    {
    foreach ($alert in $web.Alerts)
    {
    $alertURL = $web.URL + "/" + $alert.ListUrl
    $alertResult = New-Object PSObject
    $alertResult | Add-Member -type NoteProperty -name "URL DE LA LISTA" -value $alertURL

    $alertResult | Add-Member -type NoteProperty -name "TITULO DE LA ALERTA" -value $alert.Title
    $alertResult | Add-Member -type NoteProperty -name "TIPO DE ALERTA" -value $alert.AlertType

    $alertResult | Add-Member -type NoteProperty -name USUARIO SUBSCRIPTO
    " -value $alert.User
    $alertResultsCollection += $alertResult
    }

    $site.Dispose()
    $alertResultsCollection

    # Exportar a CSV
    #$alertResultsCollection | Export-CSV "
    Alertas.csv"
    6-Borrar un archivo mediante client object
    ClientContext cc = new ClientContext(url);
    Web w = cc.Web;
    List olist = w.Lists.GetByTitle("Libreria");
    cc.Load(olist);
    var files = olist.RootFolder.Files;
    FileCollection fc =files;
    cc.Load(fc);
    cc.ExecuteQuery();
    File Deleteimtefile = fc[1]; //borro el primer archivo
    Deleteimtefile.DeleteObject();
    cc.ExecuteQuery();
    7-Ocultar la papelera de reciclaje con css
    <style type=”text/css”>

    .ms-quicklaunchheader{

    display:none;}

    .ms-recyclebin{

    display:none;}

    </style>


    8-Error al ejecutar código que trata de consultar algo del Active directory: 

    “An operations error occurred at System.DirectoryServices.AccountManagement.ADStoreCtx.FindPrincipalByIdentRefHelper”

    Ejecute la sección de código fuente que llama al Active Directory con SPSecurity.RunWithElevatedPrivileges.


    9-Mostrar pantalla de procesamiento


    image

    protected void btnEvento_Click(object sender, EventArgs e)
    {
    //Operacion de tiempo extenso
    using (SPLongOperation longOperation = new SPLongOperation(this.Page))
    {
    //Mensaje custom que aparecerá con una rueda de procesamiento
    longOperation.LeadingHTML = "<div><h2>Procesando solicitud</h2></div>";
    longOperation.TrailingHTML = "<div><h3>Por favor espere mientras el procesamiento termina</h3></div>";

    //Inicia la operación con procesamiento extenso
    longOperation.Begin();

    //El codigo del procesamiento extenso va aca


    //termina la operación con procesamiento extenso
    string redirectURL = SPContext.Current.Web.Url + "/SitePages/default.aspx";
    longOperation.End(redirectURL);
    }
    }

    10-Opciones para EventLog
























    NivelDefinición
    NoneNo ocurre ningún logging
    CriticalEste tipo de mensaje indica un error grave que ha causado un gran fallo en la solución.
    ErrorEste tipo de mensaje indica una condición de urgencia. Todos los eventos de error debe ser investigados.
    WarningEste tipo de mensaje indica un problema potencial o problema que podría requerir atención. Los mensajes de advertencia deben ser revisados y analizados en el tiempo.
    InformationLos mensajes de información no requieren ninguna acción,pero pueden proporcionar datos valiosos para el seguimiento del estado de su solución.
    VerboseEste nivel de registro de eventos corresponde a eventos o mensajes.

    11-Opciones para TraceLog
























    LevelDefinition
    NoneNingún trace logs son escritos.
    UnexpectedEste nivel se utiliza para registrar los mensajes sobre eventos que hacen que las soluciones detienen su procesamiento.Cuando se establece a este nivel, el registro sólo incluye los eventos de este nivel.
    MonitorableEste nivel se utiliza para registrar mensajes acerca de eventos irrecuperables que limitan la funcionalidad de la solución, pero no detienen la aplicación. Cuando se establece a este nivel, el registro incluirá también los errores críticos (nivel inesperado).
    High

    Este nivel se usa para registrar los eventos que son inesperados, pero que no detendrá el procesamiento de una solución. Cuando se establece para acceder a este nivel, el registro incluirá advertencias, errores controlables (nivel) y los errores críticos (nivel inesperado).

    MediumCuando se establece en este nivel, el registro de seguimientoincluye todo excepto los mensajes detallados. Este nivel se utiliza para registrar toda la información de alto nivel acerca de las operaciones que se realizaron. En este nivel, hay suficiente detalle para generar el flujo de datos y la secuencia de operaciones. Este nivel de registro puede ser utilizado por los administradores o los profesionales de soporte técnico para solucionar problemas.
    VerboseCuando se establece para acceder a este nivel, el registroincluye mensajes en todos los otros niveles. Casi todas lasacciones que se realizan se registran cuando se utiliza este nivel. Detallado rastreo produce muchos mensajes de registro. Este nivel se utiliza normalmente sólo para la depuración en un entorno de desarrollo.

  • sábado, 25 de febrero de 2012

    Privilegios elevados en código de Sharepoint

    SharePoint utiliza impersonation  de ASP.Net para personalizar la plataforma basado en  el usuario actual autorizado. Objetos de SharePoint son conscientes de la identidad del usuario y muchas partes de SharePoint sacan provecho de esta capacidad. Por ejemplo, cuando llegue a las listas en un sitio a través de la API, que sólo ven los que el usuario actual tiene acceso.

    Si utiliza la autenticación de Windows y el código llama el modelo de objetos de SharePoint a partir de un proceso de trabajo de IIS, la solicitud debe suplantar la identidad del usuario que realiza la llamada. Sharepoint Foundation configura ASP.NET para suplantar al usuario que llama de forma automática, pero su código puede funcionar inesperadamente, o no, si se suspende la suplantación.  Más info: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsite.aspx

    Cuando usar RunWithElevatedPrivileges y cuando no

    RunWithElevatedPrivileges is a great way to solve the database connection problem, but often it can become somewhat of a Pandora’s box. It can become a go-to tool for every permission error encountered in SharePoint code. However, there are some issues that can occur with overuse of this style of programming, not least of which is that you lose some core SharePoint functionality inherent with impersonating the user.

    A StackOverflow discussion about the pitfalls of RunWithElevatedPrivilges is a good summary and starting point for reading on the subject. Also, I’ve included below 3 good references for further reading on the topic.

    A veces para suspender la impersonalización de usuario, es posible usar “SPSecurity.RunWithElevatedPrivileges”.

    RunWithElevatedPrivileges es una gran manera de resolver el problema de conexión de base de datos, pero a menudo puede llegar a ser algo así como una caja de Pandora.Puede convertirse en una herramienta de go-to para cada error de permiso encontrado en el código de SharePoint.Sin embargo, hay algunos problemas que pueden ocurrir con el uso excesivo de este estilo de programación, no menos importante de los cuales es que se pierde la funcionalidad de SharePoint básico inherente a suplantar al usuario.

    Mejores prácticas en el uso de RunWithElevatedPrivileges

    • Evite usar SPSecurity.RunwithElevatedPrivilege para acceder al modelo de objetos de Sharepoint. Use SPUserToken para impersonalización con SPSite.
    • Si usas SPSecurity.RunwithElevatedPrivilege, has un dispose de todos los objectos en el delegate. No pases objectos de SharePoint fuera del método RunwithElevatedPrivilege.
    • Sólo use SPSecurity.RunwithElevatedPrivilege para hacer llamadas externas bajo la identidad del app pool. No lo uses para elevar los privilegios de objectos de Sharepoint.
    • Siempre usa el constructor SPSite con una instancia de SPUserToken para crear un contexto de seguridad con privilegios elevados. Para impersonalizar el sistema, usa la propiedad SystemAccount.UserToken del actual contexto SPSite, ej:
      var site = new SPSite(SPContext.Current.Site.ID,  SPContext.Current.Site.SystemAccount.UserToken);
    • Evitar pasar objetos de Sharepoint entre diferentes contextos de seguridad (SPSiteinstances), con exception de SPUserToken. Un objeto SPUSer creado en un SPSite A no puede pasarse a un SPSite B. Esto puede ser fuente de oscuros bugs.
    • Restring que assemblis pueden usa privilegios elevados corriendo en minimal trust, evita el uso de la GAC, y has auditoria de cualquier CAS policies deployada.

    lunes, 30 de enero de 2012

    Método SPSecurity.RunWithElevatedPrivileges

    Executes the specified method with Full Control rights even if the user does not otherwise have Full Control. A delegate method that is to run with elevated rights. This method runs under the Application Pool identity, which has site collection administrator privileges on all site collections hosted by that application pool.

    If secureCode includes any write operations, then the call to RunWithElevatedPrivileges should be preceded by a call of either SPUtility.ValidateFormDigest orSPWeb.ValidateFormDigest

    Guid siteId = SPContext.Current.Site.ID;
    Guid webId = SPContext.Current.Web.ID;

    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        using (SPSite site = new SPSite(siteId))
        {
            using (SPWeb web = site.OpenWeb(webId))
            {
                // Your code here
            }
        }
    });