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;
            }));
        }
示例#2
0
        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);