The Scratch Custom Claims Provider


Frequently, I find it useful to have a common starting point – what Raymond Chen describes as a “scratch program” (or a new scratch program, for those update-minded types). Within SharePoint, things are never that simple – a scratch SharePoint solution is an empty whiteboard, for better or for worse.

There are plenty of extensibility points within SharePoint that certainly offer up opportunities for scratch programs, though, and one place I find myself sharing – over and over again – my personal scratch implementation is with Custom Claims Providers. And so I submit for your approval, the SimpleClaimsProvider in all its favoriteColor issuing claim glory. This will serve as a starting point for future posts involving custom claims providers, and in the meantime might give a few of you the bits you need in order to make the details of Custom Claims Providers real. For a complete walkthrough, see Steve Peschka’s most excellent write up over on MSDN.

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 using Microsoft.SharePoint; 7 using Microsoft.SharePoint.WebControls; 8 using Microsoft.SharePoint.Administration; 9 using Microsoft.SharePoint.Administration.Claims; 10 11 namespace BryanPorter.SP.CCP 12 { 13 public class SimpleClaimsProvider 14 : SPClaimProvider 15 { 16 private static string m_claimValueType = Microsoft.IdentityModel.Claims.ClaimValueTypes.String; 17 private static string m_claimType = "http://schemas.bryanporter.com/favoriteColor"; 18 19 private string m_sharedState = null; 20 21 public SimpleClaimsProvider(string displayName) 22 : base(displayName) 23 { } 24 25 protected override void FillClaimTypes(List<string> claimTypes) 26 { 27 if (claimTypes == null) 28 throw new ArgumentNullException("claimTypes"); 29 30 claimTypes.Add(m_claimType); 31 } 32 33 protected override void FillClaimValueTypes(List<string> claimValueTypes) 34 { 35 if (claimValueTypes == null) 36 throw new ArgumentNullException("claimValueTypes"); 37 38 claimValueTypes.Add(m_claimValueType); 39 } 40 41 protected override void FillClaimsForEntity(Uri context, SPClaim entity, List<SPClaim> claims) 42 { 43 if (entity == null) 44 throw new ArgumentNullException("entity"); 45 46 if (claims == null) 47 throw new ArgumentNullException("claims"); 48 49 claims.Add(CreateClaim(m_claimType, "Blue", m_claimValueType)); 50 } 51 52 protected override void FillEntityTypes(List<string> entityTypes) 53 { 54 entityTypes.Add(SPClaimEntityTypes.FormsRole); 55 } 56 57 protected override void FillHierarchy(Uri context, string[] entityTypes, string hierarchyNodeID, int numberOfLevels, Microsoft.SharePoint.WebControls.SPProviderHierarchyTree hierarchy) 58 { 59 throw new NotImplementedException(); 60 } 61 62 protected override void FillResolve(Uri context, string[] entityTypes, SPClaim resolveInput, List<Microsoft.SharePoint.WebControls.PickerEntity> resolved) 63 { 64 if (!EntityTypesContain(entityTypes, SPClaimEntityTypes.FormsRole)) 65 return; 66 67 PickerEntity pe = CreatePickerEntity(); 68 pe.Claim = CreateClaim(m_claimType, "Blue", m_claimValueType); 69 pe.Description = Name + ":" + "Blue"; 70 pe.DisplayText = "Blue"; 71 pe.EntityData[PeopleEditorEntityDataKeys.DisplayName] = "Blue"; 72 pe.EntityType = SPClaimEntityTypes.FormsRole; 73 pe.IsResolved = true; 74 pe.EntityGroupName = "Favorite Color"; 75 76 resolved.Add(pe); 77 } 78 79 protected override void FillResolve(Uri context, string[] entityTypes, string resolveInput, List<Microsoft.SharePoint.WebControls.PickerEntity> resolved) 80 { 81 if (!EntityTypesContain(entityTypes, SPClaimEntityTypes.FormsRole)) 82 return; 83 84 if (resolveInput.ToUpper().Contains("BLUE")) 85 { 86 PickerEntity pe = CreatePickerEntity(); 87 pe.Claim = CreateClaim(m_claimType, "Blue", m_claimValueType); 88 pe.Description = Name + ":" + "Blue"; 89 pe.DisplayText = "Blue"; 90 pe.EntityData[PeopleEditorEntityDataKeys.DisplayName] = "Blue"; 91 pe.EntityType = SPClaimEntityTypes.FormsRole; 92 pe.IsResolved = true; 93 pe.EntityGroupName = "Favorite Color"; 94 95 resolved.Add(pe); 96 } 97 98 } 99 100 protected override void FillSchema(Microsoft.SharePoint.WebControls.SPProviderSchema schema) 101 { 102 schema.AddSchemaElement(new SPSchemaElement(PeopleEditorEntityDataKeys.DisplayName, "Display Name", SPSchemaElementType.Both)); 103 } 104 105 protected override void FillSearch(Uri context, string[] entityTypes, string searchPattern, string hierarchyNodeID, int maxCount, Microsoft.SharePoint.WebControls.SPProviderHierarchyTree searchTree) 106 { 107 if (!EntityTypesContain(entityTypes, SPClaimEntityTypes.FormsRole)) 108 return; 109 110 if (searchPattern.ToUpper().Contains("BLUE")) 111 { 112 PickerEntity pe = CreatePickerEntity(); 113 pe.Claim = CreateClaim(m_claimType, "Blue", m_claimValueType); 114 pe.Description = Name + ":" + "Blue"; 115 pe.DisplayText = "Blue"; 116 pe.EntityData[PeopleEditorEntityDataKeys.DisplayName] = "Blue"; 117 pe.EntityType = SPClaimEntityTypes.FormsRole; 118 pe.IsResolved = true; 119 pe.EntityGroupName = "Favorite Color"; 120 121 122 searchTree.AddEntity(pe); 123 } 124 } 125 126 public override string Name 127 { 128 get { return "SimpleCCP"; } 129 } 130 131 public override bool SupportsEntityInformation 132 { 133 get { return true; } 134 } 135 136 public override bool SupportsHierarchy 137 { 138 get { return false; } 139 } 140 141 public override bool SupportsResolve 142 { 143 get { return true; } 144 } 145 146 public override bool SupportsSearch 147 { 148 get { return true; } 149 } 150 } 151 }
Skip to main content