async Task <string> IMultiTenantIamProvider <TTenantKey> .GetRequiredClaim(string policyName, TTenantKey tenantId, IMultiTenantIamProviderCache <TTenantKey> cache)
        {
            string ret = cache.GetClaim(policyName, tenantId);

            if (string.IsNullOrEmpty(ret))
            {
                var policyId = await CreateOrGetPolicy(policyName);

                var policy = await _context.IamPolicyClaims
                             .AsNoTracking()
                             .FirstOrDefaultAsync(x => x.PolicyId.Equals(policyId) && x.TenantId.Equals(tenantId));

                ret = policy?.Claim;

                if (policy != null)
                {
                    cache.AddOrUpdateClaim(policyName, tenantId, ret);
                }
            }

            return(ret);
        }
        async Task IMultiTenantIamProvider <TTenantKey> .AddClaim(string policyName, TTenantKey tenantId, string claimValue, IMultiTenantIamProviderCache <TTenantKey> cache)
        {
            if (string.IsNullOrEmpty(cache.GetClaim(policyName, tenantId)))
            {
                var policyId = await CreateOrGetPolicy(policyName);

                if (!(await _context.IamPolicyClaims.AnyAsync(x => x.PolicyId.Equals(policyId) && x.Claim == claimValue && x.TenantId.Equals(tenantId))))
                {
                    var policyClaim = new Model.MultiTenantPolicyClaim <TKey, TTenantKey>()
                    {
                        PolicyId = policyId,
                        TenantId = tenantId,
                        Claim    = claimValue
                    };

                    _context.IamPolicyClaims.Add(policyClaim);

                    await _context.SaveChangesAsync();

                    cache.AddOrUpdateClaim(policyName, tenantId, claimValue);
                }
            }
        }
        Task <string> IMultiTenantIamProvider <TTenantKey> .GetRequiredClaim(string policyName, TTenantKey tenantId, IMultiTenantIamProviderCache <TTenantKey> cache)
        {
            var ret = cache.GetClaim(policyName, tenantId);

            return(Task.FromResult(ret));
        }
Beispiel #4
0
        public void AddOrUpdateClaimTest()
        {
            cache.AddOrUpdateClaim("resouce:operation", tenantId, "resouce:operation");

            Assert.AreEqual("resouce:operation", cache.GetClaim("resouce:operation", tenantId));
        }