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