Exemplo n.º 1
0
    public async Task Multiple_And_Simple_State_Check_Should_Be_Prevent_Multiple_Checks()
    {
        var myStateEntities = new SimpleStateCheckerTestBase.MyStateEntity[]
        {
            new SimpleStateCheckerTestBase.MyStateEntity()
            {
                CreationTime = DateTime.Parse("2022-01-01", CultureInfo.InvariantCulture)
            },

            new SimpleStateCheckerTestBase.MyStateEntity()
            {
                CreationTime = DateTime.Parse("2020-01-01", CultureInfo.InvariantCulture),
            }
        };

        myStateEntities[0].AddSimpleStateChecker(new MySimpleBatchStateChecker());
        myStateEntities[1].AddSimpleStateChecker(new MySimpleStateChecker());

        var result = await SimpleStateCheckerManager.IsEnabledAsync(myStateEntities);

        result.Count.ShouldBe(2);

        result[myStateEntities[0]].ShouldBeTrue();
        result[myStateEntities[1]].ShouldBeFalse();

        myStateEntities[0].CheckCount.ShouldBe(0);
        myStateEntities[0].GlobalCheckCount.ShouldBe(0);
        myStateEntities[0].MultipleCheckCount.ShouldBe(1);
        myStateEntities[0].MultipleGlobalCheckCount.ShouldBe(0);

        myStateEntities[1].CheckCount.ShouldBe(1);
        myStateEntities[1].GlobalCheckCount.ShouldBe(0);
        myStateEntities[1].MultipleCheckCount.ShouldBe(0);
        myStateEntities[1].MultipleGlobalCheckCount.ShouldBe(0);
    }
Exemplo n.º 2
0
    public async Task Multiple_State_Check_Should_Be_Works()
    {
        var checker = new MySimpleBatchStateChecker();

        var myStateEntities = new MyStateEntity[]
        {
            new MyStateEntity()
            {
                CreationTime         = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture),
                LastModificationTime = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture)
            },

            new MyStateEntity()
            {
                CreationTime         = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture),
                LastModificationTime = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture)
            }
        };

        foreach (var myStateEntity in myStateEntities)
        {
            myStateEntity.AddSimpleStateChecker(checker);
        }

        (await SimpleStateCheckerManager.IsEnabledAsync(myStateEntities)).ShouldAllBe(x => x.Value);

        foreach (var myStateEntity in myStateEntities)
        {
            myStateEntity.CreationTime = DateTime.Parse("2001-01-01", CultureInfo.InvariantCulture);
        }

        (await SimpleStateCheckerManager.IsEnabledAsync(myStateEntities)).ShouldAllBe(x => !x.Value);
    }
Exemplo n.º 3
0
    public async Task Multiple_Global_State_Check_Should_Be_Works()
    {
        var myStateEntity = new MyStateEntity()
        {
            CreationTime = DateTime.Parse("2021-01-01", CultureInfo.InvariantCulture)
        };

        (await SimpleStateCheckerManager.IsEnabledAsync(myStateEntity)).ShouldBeFalse();

        myStateEntity.LastModificationTime = DateTime.Parse("2001-01-01", CultureInfo.InvariantCulture);

        (await SimpleStateCheckerManager.IsEnabledAsync(myStateEntity)).ShouldBeTrue();
    }
Exemplo n.º 4
0
        protected virtual async Task <MultiplePermissionWithGrantedProviders> GetInternalAsync(PermissionDefinition[] permissions, string providerName, string providerKey)
        {
            var permissionNames = permissions.Select(x => x.Name).ToArray();
            var multiplePermissionWithGrantedProviders = new MultiplePermissionWithGrantedProviders(permissionNames);

            var neededCheckPermissions = new List <PermissionDefinition>();

            foreach (var permission in permissions
                     .Where(x => x.IsEnabled)
                     .Where(x => x.MultiTenancySide.HasFlag(CurrentTenant.GetMultiTenancySide()))
                     .Where(x => !x.Providers.Any() || x.Providers.Contains(providerName)))
            {
                if (await SimpleStateCheckerManager.IsEnabledAsync(permission))
                {
                    neededCheckPermissions.Add(permission);
                }
            }

            if (!neededCheckPermissions.Any())
            {
                return(multiplePermissionWithGrantedProviders);
            }

            foreach (var provider in ManagementProviders)
            {
                permissionNames = neededCheckPermissions.Select(x => x.Name).ToArray();
                var multiplePermissionValueProviderGrantInfo = await provider.CheckAsync(permissionNames, providerName, providerKey);

                foreach (var providerResultDict in multiplePermissionValueProviderGrantInfo.Result)
                {
                    if (providerResultDict.Value.IsGranted)
                    {
                        var permissionWithGrantedProvider = multiplePermissionWithGrantedProviders.Result
                                                            .First(x => x.Name == providerResultDict.Key);

                        permissionWithGrantedProvider.IsGranted = true;
                        permissionWithGrantedProvider.Providers.Add(new PermissionValueProviderInfo(provider.Name, providerResultDict.Value.ProviderKey));
                    }
                }
            }

            return(multiplePermissionWithGrantedProviders);
        }
Exemplo n.º 5
0
        public virtual async Task SetAsync(string permissionName, string providerName, string providerKey, bool isGranted)
        {
            var permission = PermissionDefinitionManager.Get(permissionName);

            if (!permission.IsEnabled || !await SimpleStateCheckerManager.IsEnabledAsync(permission))
            {
                //TODO: BusinessException
                throw new ApplicationException($"The permission named '{permission.Name}' is disabled!");
            }

            if (permission.Providers.Any() && !permission.Providers.Contains(providerName))
            {
                //TODO: BusinessException
                throw new ApplicationException($"The permission named '{permission.Name}' has not compatible with the provider named '{providerName}'");
            }

            if (!permission.MultiTenancySide.HasFlag(CurrentTenant.GetMultiTenancySide()))
            {
                //TODO: BusinessException
                throw new ApplicationException($"The permission named '{permission.Name}' has multitenancy side '{permission.MultiTenancySide}' which is not compatible with the current multitenancy side '{CurrentTenant.GetMultiTenancySide()}'");
            }

            var currentGrantInfo = await GetInternalAsync(permission, providerName, providerKey);

            if (currentGrantInfo.IsGranted == isGranted)
            {
                return;
            }

            var provider = ManagementProviders.FirstOrDefault(m => m.Name == providerName);

            if (provider == null)
            {
                //TODO: BusinessException
                throw new AbpException("Unknown permission management provider: " + providerName);
            }

            await provider.SetAsync(permissionName, providerKey, isGranted);
        }
Exemplo n.º 6
0
        protected virtual async Task <PermissionWithGrantedProviders> GetInternalAsync(PermissionDefinition permission, string providerName, string providerKey)
        {
            var result = new PermissionWithGrantedProviders(permission.Name, false);

            if (!permission.IsEnabled)
            {
                return(result);
            }

            if (!await SimpleStateCheckerManager.IsEnabledAsync(permission))
            {
                return(result);
            }

            if (!permission.MultiTenancySide.HasFlag(CurrentTenant.GetMultiTenancySide()))
            {
                return(result);
            }

            if (permission.Providers.Any() && !permission.Providers.Contains(providerName))
            {
                return(result);
            }

            foreach (var provider in ManagementProviders)
            {
                var providerResult = await provider.CheckAsync(permission.Name, providerName, providerKey);

                if (providerResult.IsGranted)
                {
                    result.IsGranted = true;
                    result.Providers.Add(new PermissionValueProviderInfo(provider.Name, providerResult.ProviderKey));
                }
            }

            return(result);
        }