public virtual IEnumerable <Claim> Collect(ICollectPass collectPass) { IEnumerable <BedrockClaimModel> returnValueModels; var resourceTypeProperty = StringHelper.Current.Lookup(StringSecurity.ResourceType); if (ApplicationConfig.ClaimCollection.IsCacheEnabled) { var expiry = new TimeSpan(0, ApplicationConfig.ClaimCollection.CacheExpiry, 0); var key = StringHelper.Current.Lookup(StringCacheKey.UserPermissions, collectPass.SubjectId, collectPass.Application.ToString().ToLower()); returnValueModels = collectPass.Cache.Get(key, expiry, () => CollectClaims(collectPass)); } else { returnValueModels = CollectClaims(collectPass); } return(returnValueModels.Select(cm => { var claim = new Claim ( cm.Type, cm.Value, cm.ValueType, cm.Issuer, cm.OriginalIssuer ); claim.Properties.Add(resourceTypeProperty, cm.ResourceType); return claim; })); }
protected override IEnumerable <BedrockClaimModel> CollectClaims(ICollectPass collectPass) { var subject = Guid.Parse(collectPass.SubjectId); var result = AsyncHelper.RunSync(() => SharedSecurityClientAdmin.LoadPermissionsByApplicationAndUserGlobalKey(collectPass.Application, subject)); var userPermissions = result.ResponseMessage.IsSuccessStatusCode ? result.ResponseValue : Enumerable.Empty <BedrockClaimModel>(); return(userPermissions .Select(up => new BedrockClaimModel { Issuer = up.Issuer, OriginalIssuer = up.OriginalIssuer, Type = up.Type, Value = up.Value, ValueType = up.ValueType, ResourceType = up.ResourceType, Application = up.Application }).ToList()); }
protected abstract IEnumerable <BedrockClaimModel> CollectClaims(ICollectPass collectPass);