コード例 #1
0
        public async Task EnableFeatureForTenantAsync_Enable_Test()
        {
            CreateTenantDto createTenantDto = new CreateTenantDto()
            {
                TenancyName      = "TestTenant",
                Name             = "TestTenant",
                AdminPhoneNumber = "13851400000",
                IsActive         = true
            };
            var tenantDto = await _tenantAppService.CreateAsync(createTenantDto);

            EnableFeatureDto enableFeatureDto = new EnableFeatureDto()
            {
                TenantId     = tenantDto.Id,
                FeatureNames = new List <string>()
                {
                    "SmartPassFeature"
                }
            };

            bool result = await _featureAppService.EnableFeatureForTenantAsync(enableFeatureDto);

            result.ShouldBeTrue();

            var features = await _featureAppService.ListAllFeaturesInTenantAsync(tenantDto.Id);

            features.Count.ShouldBe(1);

            var permissions = await _featureAppService.GetTenantPermissionsAsync(tenantDto.Id);

            permissions.Items.Count.ShouldBe(83);
        }
コード例 #2
0
        public async Task EnableFeatureForTenantAsync_Disable_Test()
        {
            CreateTenantDto createTenantDto = new CreateTenantDto()
            {
                TenancyName      = "TestTenant",
                Name             = "TestTenant",
                AdminPhoneNumber = "13851400000",
                IsActive         = true
            };
            var tenantDto = await _tenantAppService.CreateAsync(createTenantDto);

            var permissions0 = await _featureAppService.GetTenantPermissionsAsync(tenantDto.Id);

            permissions0.Items.Count.ShouldBe(2);

            // Enable two features.
            EnableFeatureDto enableFeature1Dto = new EnableFeatureDto()
            {
                TenantId     = tenantDto.Id,
                FeatureNames = new List <string>()
                {
                    "SmartPassFeature", "SmartSecurityFeature"
                }
            };

            bool result1 = await _featureAppService.EnableFeatureForTenantAsync(enableFeature1Dto);

            result1.ShouldBeTrue();

            var features1 = await _featureAppService.ListAllFeaturesInTenantAsync(tenantDto.Id);

            features1.Count.ShouldBe(2);

            var permissions1 = await _featureAppService.GetTenantPermissionsAsync(tenantDto.Id);

            permissions1.Items.Count.ShouldBe(84);

            // Reset feature to remain one left
            EnableFeatureDto enableFeature2Dto = new EnableFeatureDto()
            {
                TenantId     = tenantDto.Id,
                FeatureNames = new List <string>()
                {
                    "SmartSecurityFeature"
                }
            };

            bool result2 = await _featureAppService.EnableFeatureForTenantAsync(enableFeature2Dto);

            result2.ShouldBeTrue();

            var features2 = await _featureAppService.ListAllFeaturesInTenantAsync(tenantDto.Id);

            features2.Count.ShouldBe(1);

            var permissions2 = await _featureAppService.GetTenantPermissionsAsync(tenantDto.Id);

            permissions2.Items.Count.ShouldBe(3);
        }
コード例 #3
0
        private async Task SetTenantFeatureAsync(EnableFeatureDto input, Tenant tenant)
        {
            await _tenantManager.ResetAllFeaturesAsync(tenant.Id);

            await CurrentUnitOfWork.SaveChangesAsync();

            await _tenantManager.SetFeatureValuesAsync(tenant.Id,
                                                       input.FeatureNames.Select(f => new NameValue(f, "true")).ToArray());

            await CurrentUnitOfWork.SaveChangesAsync();
        }
コード例 #4
0
        public async Task <bool> EnableFeatureForTenantAsync(EnableFeatureDto input)
        {
            var tenant = await _tenantManager.GetByIdAsync(input.TenantId);

            if (tenant == null)
            {
                return(false);
            }

            var allFeatures = _featureManager.GetAll();

            foreach (var feature in allFeatures)
            {
                if (input.FeatureNames.Contains(feature.Name))
                {
                    await _tenantManager.SetFeatureValueAsync(tenant.Id, feature.Name, "true");
                }
                else
                {
                    await _tenantManager.SetFeatureValueAsync(tenant.Id, feature.Name, "false");
                }
            }

            await CurrentUnitOfWork.SaveChangesAsync();

            using (CurrentUnitOfWork.SetTenantId(tenant.Id))
            {
                // Grant all permissions to admin role
                var adminRole = _roleManager.Roles.Single(r => r.Name == StaticRoleNames.Tenants.Admin);

                using (var featureDependencyContext = _iocManager.ResolveAsDisposable <FeatureDependencyContext>())
                {
                    var featureDependencyContextObject = featureDependencyContext.Object;
                    featureDependencyContextObject.TenantId = tenant.Id;

                    var permissions = PermissionManager.GetAllPermissions(adminRole.GetMultiTenancySide())
                                      .Where(permission =>
                                             permission.FeatureDependency == null ||
                                             permission.FeatureDependency.IsSatisfied(featureDependencyContextObject)
                                             ).ToList();

                    await _roleManager.SetGrantedPermissionsAsync(adminRole, permissions);
                }
            }

            return(true);
        }
コード例 #5
0
        /// <summary>
        /// 开通租户的权限包
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <bool> EnableFeatureForTenantAsync(EnableFeatureDto input)
        {
            var tenant = await _tenantManager.GetByIdAsync(input.TenantId);

            if (tenant == null)
            {
                throw new UserFriendlyException(L("UnknownTenantId{0}", input.TenantId));
            }

            await SetTenantFeatureAsync(input, tenant);

            using (CurrentUnitOfWork.SetTenantId(tenant.Id))
            {
                await _roleManager.GrantAllPermissionToAdminRoleInTenant(tenant);
            }

            return(true);
        }