Archivo de la etiqueta: SPBasePermissions

Como cambiar los permisos a nivel del Aplicación Web en SharePoint 2010

Existe un nivel de permisos de usuario que se pueden especificar a nivel de Aplicación Web o Web Application, que afecta a todas las Colecciones de Sitio que se encuentren ahí alojadas. Este nivel de permisos es muy útil, si quieres restringir los permisos a nivel global, como por ejemplo, si hablamos de los My Site personales de los empleados de una empresa, aquí os dejo una captura de pantalla para aclarar a que funcionalidad me refiero, dentro de la Administración Central…

Para poder realizar estos cambios de permisos usando el modelo de objetos, he creado dos funciones las cuales se basan en el uso de la propiedad SPWebApplication.RightsMask, una primera función DesactivarPermisos() en la cual de todos los posibles permisos se han comentado los permisos que deseamos desactivar. En la segunda función ActivarPermisos(), lo que hago es volver a activar todos los permisos.

//funcion para desactivar los permisos del WebApplication de My Site
private static void DesactivarPermisos(string WebAppUrl)
{
  try
  {
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
      //instancia el objeto WebApplication
      SPWebApplication webApp = SPWebApplication.Lookup(new Uri(WebAppUrl));
      //definie los permisos del obejto WebApplication
      webApp.RightsMask =
        //============ List Permissions ============
        //SPBasePermissions.ManageLists |
        SPBasePermissions.CancelCheckout |
        SPBasePermissions.AddListItems |
        SPBasePermissions.EditListItems |
        SPBasePermissions.DeleteListItems |
        SPBasePermissions.ViewListItems |
        SPBasePermissions.ApproveItems |
        SPBasePermissions.OpenItems |
        SPBasePermissions.ViewVersions |
        SPBasePermissions.DeleteVersions |
        SPBasePermissions.CreateAlerts |
        SPBasePermissions.ViewFormPages |
        //============ Site Permissions ============
        //SPBasePermissions.ManagePermissions |
        //SPBasePermissions.ViewUsageData |
        //SPBasePermissions.ManageSubwebs |
        //SPBasePermissions.ManageWeb |
        //SPBasePermissions.AddAndCustomizePages |
        //SPBasePermissions.ApplyThemeAndBorder |
        //SPBasePermissions.ApplyStyleSheets |
        //SPBasePermissions.CreateGroups |
        SPBasePermissions.BrowseDirectories |
        SPBasePermissions.CreateSSCSite |
        SPBasePermissions.ViewPages |
        SPBasePermissions.EnumeratePermissions |
        SPBasePermissions.BrowseUserInfo |
        //SPBasePermissions.ManageAlerts |
        //SPBasePermissions.UseRemoteAPIs |
        //SPBasePermissions.UseClientIntegration |
        SPBasePermissions.Open |
        SPBasePermissions.EditMyUserInfo |
        //============ Personal Permissions ============
        SPBasePermissions.ManagePersonalViews;
      //SPBasePermissions.AddDelPrivateWebParts |
      //SPBasePermissions.UpdatePersonalWebParts;
      webApp.Update();
      Console.WriteLine("Permisos desactivados correctamente para: " + WebAppUrl);
    });
  }
  catch (Exception ex) { Console.WriteLine(string.Format("***ERROR*** {0}|{1}", ex.ToString(), ex.StackTrace)); }
}

//funcion para activar los permisos del WebApplication de My Site
private static void ActivarPermisos(string WebAppUrl)
{
  try
  {
    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
      //instancia el objeto WebApplication
      SPWebApplication webApp = SPWebApplication.Lookup(new Uri(WebAppUrl));
      //definie los permisos del obejto WebApplication
      webApp.RightsMask = SPBasePermissions.FullMask;
      webApp.Update();
      Console.WriteLine("Permisos activados correctamente para: " + WebAppUrl);
    });
  }
  catch (Exception ex) { Console.WriteLine(string.Format("***ERROR*** {0}|{1}", ex.ToString(), ex.StackTrace)); }
}

Uso de SPBasePermissions para verificar o establecer permisos en diversos objetos de SharePoint

En este post, añado una lista de algunas de las propiedades y métodos que devuelven el enumerador  SPBasePermissions, y algunos métodos que toman como parámetro SPBasePermissions para comprobar si un usuario tiene ciertos derechos sobre un objeto en SharePoint.

Los siguientes son algunos de los componentes más comunes de SharePoint que se puede utilizar para obtener o establecer los permisos, o comprobar si son eficaces ciertos permisos para un usuario sobre el objeto:

Obtener o establecer los permisos de la base de una definición de función en un objeto SPWeb:

  • SPWeb.RoleDefinitions.BasePermissions 

Obtener los permisos del usuario actual o especificado tiene los permisos especificados sobre un objeto:

  • SPSite.EffectiveBasePermissions
  • SPSite.GetEffectiveRightsForAcl (SPReusableAcl)
  • SPWeb.EffectiveBasePermissions 
  • SPWeb.GetUserEffectivePermissions (Nombre de usuario String)
  • SPList.EffectiveBasePermissions 
  • SPList.EffectiveFolderPermissions 
  • SPList.GetUserEffectivePermissions (Nombre de usuario String)
  • SPFolder.EffectiveRawPermissions 
  • SPFile.EffectiveRawPermissions 
  • SPListItem.EffectiveBasePermissions 
  • SPListItem.GetUserEffectivePermissions (Nombre de usuario String)

Comprobar si el usuario actual o especificado tiene los permisos especificados y lanza UnauthorizedAccessException si no:

  • SPSite.CheckForPermissions (SPReusableAcl, SPBasePermissions) 
  • SPWeb.CheckPermissions (SPBasePermissions) 
  • SPList.CheckPermissions (SPBasePermissions) 
  • SPListItem.CheckPermissions (SPBasePermissions)

Devuelve verdadero/falso indicando si el usuario tiene el permisos específicos:

  • SPSite.DoesUserHavePermissions (SPReusableAcl, SPBasePermissions) 
  • SPSite.DoesUserHavePermissions (SPReusableAcl, SPBasePermissions, SPWeb) 
  • SPWeb.DoesUserHavePermissions (SPBasePermissions) 
  • SPWeb.DoesUserHavePermissions (String, SPBasePermissions) 
  • SPList.DoesUserHavePermissions (SPBasePermissions) 
  • SPList.DoesUserHavePermissions (SPUser, SPBasePermissions) 
  • SPListItem.DoesUserHavePermissions (SPBasePermissions) 
  • SPListItem.DoesUserHavePermissions (SPUser, SPBasePermissions) 

Diseño de páginas base – Permisos necesarios para acceder a una LayoutPageBase

  • LayoutsPageBase.RightsRequired 
  • LayoutsPageBase.DefaultLayoutsRights 

Recortar contenido de una página (Obtener o establecer permisos)

  • SPSecurityTrimmedControl.Permissions 

Permisos base asociados a un objeto SPPermission

  • SPPermission.BasePermissions 

Obtener los permisos base necesarios para utilizar un objeto o ConsoleAction ConsoleNode

  • ConsoleAction.UserRights 
  • ConsoleNode.UserRights 

Obtener los permisos necesarios para ver el Panel de Control de desarrolladores

  • SPDeveloperDashboardSettings.RequiredPermissions 

Obtener o establecer los permisos para una Aplicación Web

  • SPWebApplication.RightsMask 
  • SPSite.ApplicationRightsMask 

Permisos necesarios para acceder a una página móvil

  • SPMobilePage.RightsRequired 

Botón de la barra de menú

  • ToolBarMenuButton.CallbackVisibilityPermission 

Otros:

  • SPSecurableObject.GetUserEffectivePermissions (Nombre de usuario String) 
  • SPRibbon.Permissions 
  • MenuItemTemplate.Permissions 
  • SPUserCustomAction.Rights
De una forma gráfica, una manera de entender las dependencias de permisos que maneja SharePoint por defecto, es esta (pincha sobre ella para verla en grande):
Muy al hilo de esta información, creo que es de recomendada lectura el siguiente articulo de Microsoft: User permissions and permission levels (SharePoint Server 2010), donde se trata el tema de los permisos mas a fondo.