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); }
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); }
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(); }
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); }
/// <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); }