diff --git a/src/Api/AdminConsole/Controllers/OrganizationUsersController.cs b/src/Api/AdminConsole/Controllers/OrganizationUsersController.cs index 240079a2de..d3f1f18a35 100644 --- a/src/Api/AdminConsole/Controllers/OrganizationUsersController.cs +++ b/src/Api/AdminConsole/Controllers/OrganizationUsersController.cs @@ -6,7 +6,6 @@ using Bit.Api.Vault.AuthorizationHandlers.Collections; using Bit.Core; using Bit.Core.AdminConsole.Enums; using Bit.Core.AdminConsole.Models.Data.Organizations.Policies; -using Bit.Core.AdminConsole.OrganizationFeatures.Organizations.Authorization; using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.Authorization; using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.Interfaces; using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.RestoreUser.v1; @@ -91,7 +90,8 @@ public class OrganizationUsersController : Controller IFeatureService featureService, IPricingClient pricingClient, IConfirmOrganizationUserCommand confirmOrganizationUserCommand, - IRestoreOrganizationUserCommand restoreOrganizationUserCommand) + IRestoreOrganizationUserCommand restoreOrganizationUserCommand, + IInitPendingOrganizationCommand initPendingOrganizationCommand) { _organizationRepository = organizationRepository; _organizationUserRepository = organizationUserRepository; @@ -118,6 +118,7 @@ public class OrganizationUsersController : Controller _pricingClient = pricingClient; _confirmOrganizationUserCommand = confirmOrganizationUserCommand; _restoreOrganizationUserCommand = restoreOrganizationUserCommand; + _initPendingOrganizationCommand = initPendingOrganizationCommand; } [HttpGet("{id}")] @@ -315,18 +316,7 @@ public class OrganizationUsersController : Controller throw new UnauthorizedAccessException(); } - var authorizationResult = await _authorizationService.AuthorizeAsync(User, new OrganizationScope(orgId), OrganizationOperations.Update); - if (!authorizationResult.Succeeded) - { - throw new NotFoundException(); - } - - var commandResult = await _initPendingOrganizationCommand.InitPendingOrganizationAsync(user.Id, orgId, organizationUserId, model.Keys.PublicKey, model.Keys.EncryptedPrivateKey, model.CollectionName); - if (commandResult.HasErrors) - { - throw new BadRequestException(string.Join(", ", commandResult.ErrorMessages)); - } - + await _initPendingOrganizationCommand.InitPendingOrganizationAsync(user.Id, orgId, organizationUserId, model.Keys.PublicKey, model.Keys.EncryptedPrivateKey, model.CollectionName); await _acceptOrgUserCommand.AcceptOrgUserByEmailTokenAsync(organizationUserId, user, model.Token, _userService); await _confirmOrganizationUserCommand.ConfirmUserAsync(orgId, organizationUserId, model.Key, user.Id); } diff --git a/src/Core/AdminConsole/OrganizationFeatures/Organizations/Authorization/OrganizationAuthorizationHandler.cs b/src/Core/AdminConsole/OrganizationFeatures/Organizations/Authorization/OrganizationAuthorizationHandler.cs deleted file mode 100644 index 6d41e5ed98..0000000000 --- a/src/Core/AdminConsole/OrganizationFeatures/Organizations/Authorization/OrganizationAuthorizationHandler.cs +++ /dev/null @@ -1,47 +0,0 @@ -#nullable enable -using Bit.Core.AdminConsole.OrganizationFeatures.Shared.Authorization; -using Bit.Core.Context; -using Microsoft.AspNetCore.Authorization; - -namespace Bit.Core.AdminConsole.OrganizationFeatures.Organizations.Authorization; - -public class OrganizationAuthorizationHandler - : AuthorizationHandler -{ - private readonly ICurrentContext _currentContext; - - public OrganizationAuthorizationHandler(ICurrentContext currentContext) - { - _currentContext = currentContext; - } - - protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, - OrganizationOperationRequirement requirement, OrganizationScope organizationScope) - { - var authorized = false; - - switch (requirement) - { - case not null when requirement.Name == nameof(OrganizationOperations.Update): - authorized = await CanUpdateAsync(organizationScope); - break; - } - - if (authorized) - { - context.Succeed(requirement!); - } - } - - private async Task CanUpdateAsync(Guid organizationId) - { - var organization = _currentContext.GetOrganization(organizationId); - if (organization != null) - { - return true; - } - - // Allow provider users to update organization data if they are a provider for the target organization - return await _currentContext.ProviderUserForOrgAsync(organizationId); - } -} diff --git a/src/Core/AdminConsole/OrganizationFeatures/Organizations/Authorization/OrganizationOperation.cs b/src/Core/AdminConsole/OrganizationFeatures/Organizations/Authorization/OrganizationOperation.cs deleted file mode 100644 index 1a58e15b57..0000000000 --- a/src/Core/AdminConsole/OrganizationFeatures/Organizations/Authorization/OrganizationOperation.cs +++ /dev/null @@ -1,10 +0,0 @@ -using Microsoft.AspNetCore.Authorization.Infrastructure; - -namespace Bit.Core.AdminConsole.OrganizationFeatures.Organizations.Authorization; - -public class OrganizationOperationRequirement : OperationAuthorizationRequirement; - -public static class OrganizationOperations -{ - public static OrganizationOperationRequirement Update = new() { Name = nameof(Update) }; -} diff --git a/src/Core/AdminConsole/OrganizationFeatures/Organizations/InitPendingOrganizationCommand.cs b/src/Core/AdminConsole/OrganizationFeatures/Organizations/InitPendingOrganizationCommand.cs index d5a2c622fe..3f6eb94c07 100644 --- a/src/Core/AdminConsole/OrganizationFeatures/Organizations/InitPendingOrganizationCommand.cs +++ b/src/Core/AdminConsole/OrganizationFeatures/Organizations/InitPendingOrganizationCommand.cs @@ -2,7 +2,6 @@ using Bit.Core.Enums; using Bit.Core.Models.Commands; using Bit.Core.Models.Data; -using Bit.Core.OrganizationFeatures.OrganizationUsers.Interfaces; using Bit.Core.Repositories; using Bit.Core.Services; diff --git a/src/Core/OrganizationFeatures/OrganizationServiceCollectionExtensions.cs b/src/Core/OrganizationFeatures/OrganizationServiceCollectionExtensions.cs index cf37b9a3d8..59cfdace65 100644 --- a/src/Core/OrganizationFeatures/OrganizationServiceCollectionExtensions.cs +++ b/src/Core/OrganizationFeatures/OrganizationServiceCollectionExtensions.cs @@ -9,7 +9,6 @@ using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationConnections.Interfa using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationDomains; using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationDomains.Interfaces; using Bit.Core.AdminConsole.OrganizationFeatures.Organizations; -using Bit.Core.AdminConsole.OrganizationFeatures.Organizations.Authorization; using Bit.Core.AdminConsole.OrganizationFeatures.Organizations.Interfaces; using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers; using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.Authorization; @@ -174,7 +173,6 @@ public static class OrganizationServiceCollectionExtensions services.AddScoped(); services.AddScoped(); - services.AddScoped(); services.AddScoped(); }