protected override void FillClaimsForEntity(Uri context, SPClaim entity, SPClaimProviderContext claimProviderContext, List <SPClaim> claims) { //base.FillClaimsForEntity(context, entity, claimProviderContext, claims); string provider = entity.OriginalIssuer.ToLower(); //if (entity.Value.Contains("zimbramembershipprovider") || entity.Value.Contains("zimbraroleprovider")) //if((entity.OriginalIssuer.Contains("ZimbraClaimProvider")) || (entity.Value.Contains("zimbramembershipprovider")) || (entity.Value.Contains("zimbraroleprovider"))) //if (provider.Contains("zimbramembershipprovider") || provider.Contains("zimbraroleprovider") || provider.Contains("zimbraclaimprovider") || provider.Contains("securitytokenservice")) if (provider.Contains("zimbraclaimprovider") || (provider.Contains("securitytokenservice") && entity.Value.Contains("zimbraclaimprovider"))) { //0#.f|zimbramembershipprovider|12073385 string identifier = entity.Value.Split('|').Last(); MembershipUser user; if (!string.IsNullOrWhiteSpace(identifier)) { user = Provider.GetUser(identifier, true); } else { user = Provider.GetUser(entity.Value, true); } ZimbraMembershipUser zuser = null; if (user != null && user.GetType() == typeof(ZimbraMembershipUser)) { zuser = user as ZimbraMembershipUser; } if (zuser != null) { Type tuser = zuser.GetType(); PropertyInfo[] properties = tuser.GetProperties(); IEnumerable <ZimbraClaim> zimbraClaims = ZimbraClaimsMapped.Claims.Where(x => x.ClaimTypeValue != null); foreach (ZimbraClaim claim in zimbraClaims) { PropertyInfo propertyInfo = properties.SingleOrDefault(p => p.Name == claim.Name); if (propertyInfo != null && propertyInfo.Name == claim.Name) { if (propertyInfo.PropertyType == typeof(string)) { string value = propertyInfo.GetValue(zuser) as string; if (!string.IsNullOrWhiteSpace(value)) { SPClaim spclaim = CreateClaim(claim.ClaimType, value, claim.ClaimTypeValue); if (!claims.Contains(spclaim)) { claims.Add(spclaim); } } } else { IList values = (IList)propertyInfo.GetValue(zuser); if (values != null) { foreach (string value in values) { if (!string.IsNullOrWhiteSpace(value)) { SPClaim spclaim = CreateClaim(claim.ClaimType, value, claim.ClaimTypeValue); if (!claims.Contains(spclaim)) { claims.Add(spclaim); } } } } } } } } } }
protected override void FillClaimsForEntity(Uri context, Microsoft.SharePoint.Administration.Claims.SPClaim entity, List <Microsoft.SharePoint.Administration.Claims.SPClaim> claims) { string provider = entity.OriginalIssuer.ToLower(); //if ((entity.OriginalIssuer.Contains("ZimbraClaimProvider")) || (entity.OriginalIssuer.Contains("ZimbraMembershipProvider")) || (entity.OriginalIssuer.Contains("ZimbraRoleProvider"))) //if (provider.Contains("zimbramembershipprovider") || provider.Contains("zimbraroleprovider") || provider.Contains("zimbraclaimprovider")) if (provider.Contains("zimbraclaimprovider")) { string identifier = entity.Value.Split('|').Last(); MembershipUser user; if (!string.IsNullOrWhiteSpace(identifier)) { user = Provider.GetUser(identifier, true); } else { user = Provider.GetUser(entity.Value, true); } ZimbraMembershipUser zuser = null; if (user != null && user.GetType() == typeof(ZimbraMembershipUser)) { zuser = user as ZimbraMembershipUser; } if (zuser != null) { Type tuser = zuser.GetType(); PropertyInfo[] properties = tuser.GetProperties(); IEnumerable <ZimbraClaim> zimbraClaims = ZimbraClaimsMapped.Claims.Where(x => x.ClaimTypeValue != null); foreach (ZimbraClaim claim in zimbraClaims) { PropertyInfo propertyInfo = properties.SingleOrDefault(p => p.Name == claim.Name); if (propertyInfo != null && propertyInfo.Name == claim.Name) { if (propertyInfo.PropertyType == typeof(string)) { string value = propertyInfo.GetValue(zuser) as string; if (!string.IsNullOrWhiteSpace(value)) { SPClaim spclaim = CreateClaim(claim.ClaimType, value, claim.ClaimTypeValue); if (!claims.Contains(spclaim)) { claims.Add(spclaim); } } } else { IList values = (IList)propertyInfo.GetValue(zuser); if (values != null) { foreach (string value in values) { if (!string.IsNullOrWhiteSpace(value)) { SPClaim spclaim = CreateClaim(claim.ClaimType, value, claim.ClaimTypeValue); if (!claims.Contains(spclaim)) { claims.Add(spclaim); } } } } } } } } } //throw new NotImplementedException(); }