#nullable enable
using Bit.Core.AdminConsole.OrganizationFeatures.Policies.PolicyRequirements;
namespace Bit.Core.AdminConsole.OrganizationFeatures.Policies;
public interface IPolicyRequirementQuery
{
///
/// Get a policy requirement for a specific user.
/// The policy requirement represents how one or more policy types should be enforced against the user.
/// It will always return a value even if there are no policies that should be enforced.
/// This should be used for all policy checks.
///
/// The user that you need to enforce the policy against.
/// The IPolicyRequirement that corresponds to the policy you want to enforce.
Task GetAsync(Guid userId) where T : IPolicyRequirement;
///
/// Get a policy requirement for a specific organization.
/// This returns the policy requirement that represents the policy state for the entire organization.
/// It will always return a value even if there are no policies that should be enforced.
/// This should be used for organization-level policy checks.
///
/// The organization to check policies for.
/// The IPolicyRequirement that corresponds to the policy you want to enforce.
Task GetByOrganizationAsync(Guid organizationId) where T : IPolicyRequirement;
}