private async Task <Dictionary <string, AuthorizationPolicy> > GetDynamicAuthorizationPoliciesFromPlatformPermissions()
        {
            var cacheKey = CacheKey.With(GetType(), "GetDynamicAuthorizationPoliciesFromPlatformPermissions");
            var result   = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) =>
            {
                cacheEntry.AddExpirationToken(SecurityCacheRegion.CreateChangeToken());

                var resultLookup = new Dictionary <string, AuthorizationPolicy>();
                foreach (var permission in await _platformSecurityApi.GetPermissionsAsync())
                {
                    resultLookup[permission.Id] = new AuthorizationPolicyBuilder().AddRequirements(new PermissionAuthorizationRequirement {
                        Permission = permission.Id
                    }).Build();
                }

                //Register storefront permissions
                foreach (var permission in SecurityConstants.Permissions.AllPermissions)
                {
                    resultLookup[permission] = new AuthorizationPolicyBuilder().AddRequirements(new PermissionAuthorizationRequirement {
                        Permission = permission
                    }).Build();
                }

                return(resultLookup);
            });

            return(result);
        }
 private static User PrepareUserResult(ICacheEntry cacheEntry, AutoRestClients.PlatformModuleApi.Models.ApplicationUserExtended userDto)
 {
     if (userDto != null)
     {
         cacheEntry.SetAbsoluteExpiration(TimeSpan.FromMinutes(1));
         cacheEntry.AddExpirationToken(SecurityCacheRegion.CreateChangeToken(userDto.Id));
         return(userDto.ToUser());
     }
     return(null);
 }
 private User PrepareUserResult(MemoryCacheEntryOptions options, AutoRestClients.PlatformModuleApi.Models.ApplicationUserExtended userDto)
 {
     if (userDto != null)
     {
         var user = userDto.ToUser();
         options.AddExpirationToken(new PollingApiUserChangeToken(_platformSecurityApi, _options.ChangesPollingInterval));
         options.AddExpirationToken(SecurityCacheRegion.CreateChangeToken(userDto.Id));
         return(user);
     }
     return(null);
 }
Example #4
0
        public override async Task <User> FindByLoginAsync(string loginProvider, string providerKey)
        {
            var cacheKey = CacheKey.With(GetType(), "FindByLoginAsync", loginProvider, providerKey);

            return(await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) =>
            {
                var userDto = await _commerceCoreApi.GetUserByLoginAsync(loginProvider, providerKey);
                if (userDto != null)
                {
                    cacheEntry.AddExpirationToken(SecurityCacheRegion.CreateChangeToken(userDto.Id));
                    return userDto.ToUser();
                }
                return null;
            }, cacheNullValue : false));
        }
        private async Task <User> PrepareUserResultAsync(MemoryCacheEntryOptions options, AutoRestClients.PlatformModuleApi.Models.ApplicationUserExtended userDto)
        {
            if (userDto != null)
            {
                var user = userDto.ToUser();
                var orderSearchResult = await _orderModule.SearchAsync(new CustomerOrderSearchCriteria()
                {
                    CustomerId = user.Id,
                    Take       = 0,
                    Skip       = 0,
                });

                user.IsFirstTimeBuyer = orderSearchResult.TotalCount == 0;

                options.AddExpirationToken(new PollingApiUserChangeToken(_platformSecurityApi, _options.ChangesPollingInterval));
                options.AddExpirationToken(SecurityCacheRegion.CreateChangeToken(userDto.Id));

                return(user);
            }
            return(null);
        }
        public async Task <User> FindByIdAsync(string userId, CancellationToken cancellationToken)
        {
            var cacheKey = CacheKey.With(GetType(), "FindByIdAsync", userId);
            var result   = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) =>
            {
                var userDto = await _platformSecurityApi.GetUserByIdAsync(userId);
                if (userDto != null)
                {
                    cacheEntry.AddExpirationToken(SecurityCacheRegion.CreateChangeToken(userDto.Id));
                    return(userDto.ToUser());
                }
                return(null);
            }, cacheNullValue : false);

            //Load user associated contact
            if (result != null && result.ContactId != null)
            {
                result.Contact = await _memberService.GetContactByIdAsync(result.ContactId);
            }
            return(result);
        }