Compartir a través de


Ejemplo 1: Escritura de un proveedor de notificaciones

Última modificación: martes, 03 de agosto de 2010

Hace referencia a: SharePoint Foundation 2010

Ejemplo del proveedor de notificaciones

Para escribir un proveedor de notificaciones, el primer paso consiste en crear una clase derivada de la clase SPClaimProvider. En el siguiente ejemplo se muestra cómo escribir un proveedor de notificaciones. La implementación de este ejemplo no admite entidad, jerarquía, resolución o búsqueda. En este tema se asume que leyó el tema Procedimiento para implementar un proveedor de notificaciones.

Para obtener más información acerca de cómo crear un proveedor de notificaciones y para obtener un tutorial, vea el tutorial de notificaciones que explica cómo escribir un proveedor de notificaciones.

SugerenciaSugerencia

Para ver ejemplos de código adicionales y obtener más información sobre la clase SPClaimProvider y sus miembros, vea SPClaimProvider. Además, visite el blog del equipo de identidades en SharePoint (SPIdentity) y el blog Share-n-dipity regularmente para ver ejemplos adicionales y actualizaciones.

using System;
using System.Collections.Generic;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.Administration.Claims;
using Microsoft.SharePoint.Diagnostics;

namespace MySample.Sample.Server.SampleClaimsProvider
{
    /// <summary>
    /// The SampleNameIdClaimsProvider class is a claims provider for an security token service(STS).
    /// This claims provider inserts a NameIdentifier 
    /// (https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier)
    /// claim type in the SAML token issued by the STS.
    /// The value of this claim type is the SharePointID of the user requesting the SAML token.
    /// </summary>
    
    [Microsoft.SharePoint.Security.SharePointPermission(System.Security.Permissions.SecurityAction.Demand, ObjectModel = true)]
    [Microsoft.SharePoint.Security.SharePointPermission(System.Security.Permissions.SecurityAction.LinkDemand, ObjectModel = true)]    

public sealed class SampleNameIdClaimsProvider : SPClaimProvider
    {
        #region Constructor
        /// <summary>
        /// Constructor for the SampleNameIdClaimsProvider class. It sets the displayName
        /// of the claims provider, which is displayed in the Central Administration user interface for
        /// people picker name resolution.
        /// </summary>
        /// <param name="displayName">String that gets displayed in the Central Administration user interface 
        /// for people picker name resolution.</param>

        public SampleNameIdClaimsProvider (string displayName) : base(displayName)
        {          
        }

        #endregion Constructor

        #region Private Methods/Properties
        /// <summary>
        /// Returns the URI of the SampleNameIdClaimsProvider claim.
        /// </summary>
        
       /// <returns>String representing the URI for a claim that specifies the name of an entity.</returns>
        private static string SampleNameIdClaimType
        {
            get{ return "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"; }
        }

        /// <summary>
        /// Returns the value type of the SampleNameIdClaimsProvider claim.
        /// </summary>
        /// <returns>String representing the value type of the NameIdentifier claim.</returns>
        private static string SampleNameIdClaimValueType
        {
            get{ return Microsoft.IdentityModel.Claims.ClaimValueTypes.String; }
        }
     
       
        #endregion Private Methods/Properties 

        #region Protected Methods
        
        /// <summary>
        /// This is the main function of the SampleNameIdClaimsProvider.
        /// It creates a SampleNameId claim, sets SharePointID as its value,
        /// and then adds this claim to the SPClaim list claims.
        /// </summary>
        /// <param name="context">URI context of the request.</param>
        /// <param name="entity">SharePointID of the entity requesting the claim.</param>
        /// <param name="claims">SPClaim generic list where SampleNameId claim is added.</param>
        /// <returns>void</returns>
        protected override void FillClaimsForEntity(Uri context, SPClaim entity, List<SPClaim> claims)
        {
            
            if (null == entity)
            {
                throw new ArgumentNullException("entity");
            }
            if(null == claims)
            {                
               throw new ArgumentNullException("claims");
            }

            //Adding the SampleNameId claims to the claims list and setting SharePointID as its value.
                          
               claims.Add(CreateClaim(SampleNameIdClaimType, entity.Value, SampleNameIdClaimValueType));   

        }

        /// <summary>
        /// This function adds the claims types that will be added from this claims provider.
        /// </summary>        
        /// <param name="claimTypes">String generic list where claims URIs will be added.</param>
        /// <returns>void</returns>
        protected override void FillClaimTypes(List<string> claimTypes)
        {

            if(null == claimTypes)
            {              
                throw new ArgumentNullException("claimTypes");
            }
            
            // Add the claim types that will be added by this claims provider.          
                claimTypes.Add(SampleNameIdClaimType);
            
        }

        /// <summary>
        /// This method adds the valueTypes of the claimTypes that will be placed
        /// into the SAML token.
        /// Note: The claimValueTypes should be in the same order as the claimTypes.
        /// </summary>
        /// <param name="claimValueTypes>List where claim value types will be added.</param>
        /// <returns>void</returns>
        protected override void FillClaimValueTypes(List<string> claimValueTypes)
        {

            if(null == claimValueTypes)
            {              
                throw new ArgumentNullException("claimValueTypes");
            }
            
                //Adding the SampleNameId claim value type.
                claimValueTypes.Add(NameIdentifierClaimValueType);
            };

        #region Non-Implemented
        /// <summary>
        /// This function adds all the entity types that this claims provider will
        /// be supporting for people picker. In this example, this functionality is not supported.
        /// </summary>
        
        protected override void FillEntityTypes(List<string> entityTypes)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// This function adds the hierarchy to the hierarchy tree. This functionality is also
        /// used for people picker. In this example, this functionality is not supported.
        /// </summary>
        
        protected override void FillHierarchy(Uri context, string[] entityTypes, string hierarchyNodeID, int numberOfLevels, Microsoft.SharePoint.WebControls.SPProviderHierarchyTree hierarchy)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// This method is used to resolve multiple claims. This functionality is also
        /// used for people picker. In this example this functionality is not supported.        
        /// </summary>
        
        protected override void FillResolve(Uri context, string[] entityTypes, SPClaim resolveInput, List<Microsoft.SharePoint.WebControls.PickerEntity> resolved)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// This method is used to resolve multiple claims. This functionality is also
        /// used for people picker. In this example, this functionality is not supported.
        /// </summary>

        protected override void FillResolve(Uri context, string[] entityTypes, string resolveInput, List<Microsoft.SharePoint.WebControls.PickerEntity> resolved)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// This method is used to fill schema. This functionality is also
        /// used for people picker. In this example, this functionality is not supported.        
        /// </summary>

        protected override void FillSchema(Microsoft.SharePoint.WebControls.SPProviderSchema schema)
        {
            throw new NotImplementedException();
        }

        /// <summary>
        /// This method is used to enable search. This functionality is also
        /// used for people picker. In this example, this functionality is not supported.
        /// </summary>
        
        protected override void FillSearch(Uri context, string[] entityTypes, string searchPattern, string hierarchyNodeID, int maxCount, Microsoft.SharePoint.WebControls.SPProviderHierarchyTree searchTree)
        {
            throw new NotImplementedException();
        }
        #endregion NULL-Implementation
        #endregion Protected Methods


        #region Public Methods

        /// <summary>
        /// Returns the name of the claims provider. This name should be unique and you
        /// must ensure that this name does not clash with the existing claims provider.
        /// </summary>
        /// <returns>String containing unique name for the claims provider.</returns>

        public override string Name
        {
            get{ return SampleNameIdClaimProvider.SampleClaimProviderName; }
        }
        
        /// <summary>
        /// Returns the name of the claims provider. This name should be unique and you
        /// must ensure that this name does not clash with the existing claims provider.
        /// </summary>
        
        /// <returns>String containing unique name for the claim provider.</returns>
        internal static string SampleClaimProviderName
        {
            get{ return "SampleClaimsProvider"; }
        }

        /// <summary>
        /// Informs whether the claims provider supports entity information. The claims provider
        /// infrastructure adds the claims only if this SupportsEntityInformation property is true.
        /// </summary>
        
        /// <returns>true, representing entity information is supported.</returns>
        public override bool SupportsEntityInformation
        {
            get{ return true; }
        }

        /// <summary>
        /// Informs whether hierarchy is supported. This is used for people picker functionality.
        /// In this example, this functionality is not supported; therefore it is set to false.
        /// </summary>
        
        /// <returns>false, representing entity information is not supported.</returns>
        public override bool SupportsHierarchy
        {
            get{ return false; }
        }

        /// <summary>
        /// Informs whether resolve entity feature is supported. This is used for people picker functionality.
        /// In this example, this functionality is not supported; therefore it is set to false.
        /// </summary>
        /// <returns>false, representing entity information is not supported.</returns>
        public override bool SupportsResolve
        {
            get{ return false; }
        }

        /// <summary>
        /// Informs whether search functionality is supported on the basis of claims value.
        /// In this example, this functionality is not supported; therefore it is set to false.
        /// </summary>
        
        /// <returns>false, representing search is not supported.</returns>
        public override bool SupportsSearch
        {
            get{ return false; }
        }

       #endregion Public Methods
    }
}