using Bit.Core.Context; using Bit.Core.Enums; using Bit.Core.Models.Data; namespace Bit.Api.AdminConsole.Authorization.Requirements; /// /// A base implementation of which will authorize Owners, Admins, Providers, /// and custom users with the permission specified by the permissionPicker constructor parameter. This is suitable /// for most requirements related to a custom permission. /// /// A function that returns a custom permission which will authorize the action. public abstract class BasePermissionRequirement(Func permissionPicker) : IOrganizationRequirement { public async Task AuthorizeAsync(CurrentContextOrganization? organizationClaims, Func> isProviderUserForOrg) => organizationClaims switch { { Type: OrganizationUserType.Owner } => true, { Type: OrganizationUserType.Admin } => true, { Type: OrganizationUserType.Custom } when permissionPicker(organizationClaims.Permissions) => true, _ => await isProviderUserForOrg() }; }