mirror of
https://github.com/bitwarden/server.git
synced 2025-07-02 00:22:50 -05:00

* [AC-1174] Introduce BulkAuthorizationHandler.cs * [AC-1174] Introduce CollectionUserAuthorizationHandler * [AC-1174] Add CreateForNewCollection CollectionUser requirement * [AC-1174] Add some more details to CollectionCustomization * [AC-1174] Formatting * [AC-1174] Add CollectionGroupOperation.cs * [AC-1174] Introduce CollectionGroupAuthorizationHandler.cs * [AC-1174] Cleanup CollectionFixture customization Implement and use re-usable extension method to support seeded Guids * [AC-1174] Introduce WithValueFromList AutoFixtureExtensions Modify CollectionCustomization to use multiple organization Ids for auto generated test data * [AC-1174] Simplify CollectionUserAuthorizationHandler.cs Modify the authorization handler to only perform authorization logic. Validation logic will need to be handled by any calling commands/controllers instead. * [AC-1174] Introduce shared CollectionAccessAuthorizationHandlerBase A shared base authorization handler was created for both CollectionUser and CollectionGroup resources, as they share the same underlying management authorization logic. * [AC-1174] Update CollectionUserAuthorizationHandler and CollectionGroupAuthorizationHandler to use the new CollectionAccessAuthorizationHandlerBase class * [AC-1174] Formatting * [AC-1174] Cleanup typo and redundant ToList() call * [AC-1174] Add check for provider users * [AC-1174] Reduce nested loops * [AC-1174] Introduce ICollectionAccess.cs * [AC-1174] Remove individual CollectionGroup and CollectionUser auth handlers and use base class instead * [AC-1174] Tweak unit test to fail minimally * [AC-1174] Reorganize authorization handlers in Core project * [AC-1174] Introduce new AddCoreAuthorizationHandlers() extension method * [AC-1174] Move CollectionAccessAuthorizationHandler into Api project * [AC-1174] Move CollectionFixture to Vault folder * [AC-1174] Rename operation to CreateUpdateDelete * [AC-1174] Require single organization for collection access authorization handler - Add requirement that all target collections must belong to the same organization - Simplify logic related to multiple organizations - Update tests and helpers - Use ToHashSet to improve lookup time * [AC-1174] Fix null reference exception * [AC-1174] Throw bad request exception when collections belong to different organizations * [AC-1174] Switch to CollectionAuthorizationHandler instead of CollectionAccessAuthorizationHandler to reduce complexity
55 lines
2.2 KiB
C#
55 lines
2.2 KiB
C#
using System.Linq.Expressions;
|
|
using AutoFixture.Dsl;
|
|
|
|
namespace Bit.Core.Test.AutoFixture;
|
|
|
|
public static class AutoFixtureExtensions
|
|
{
|
|
/// <summary>
|
|
/// Registers that a writable Guid property should be assigned a random value that is derived from the given seed.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// This can be used to generate random Guids that are deterministic based on the seed and thus can be re-used for
|
|
/// different entities that share the same identifiers. e.g. Collections, CollectionUsers, and CollectionGroups can
|
|
/// all have the same Guids generate for their "collection id" properties.
|
|
/// </remarks>
|
|
/// <param name="composer"></param>
|
|
/// <param name="propertyPicker">The Guid property to register</param>
|
|
/// <param name="seed">The random seed to use for random Guid generation</param>
|
|
public static IPostprocessComposer<T> WithGuidFromSeed<T>(this IPostprocessComposer<T> composer, Expression<Func<T, Guid>> propertyPicker, int seed)
|
|
{
|
|
var rnd = new Random(seed);
|
|
return composer.With(propertyPicker, () =>
|
|
{
|
|
// While not as random/unique as Guid.NewGuid(), this is works well enough for testing purposes.
|
|
var bytes = new byte[16];
|
|
rnd.NextBytes(bytes);
|
|
return new Guid(bytes);
|
|
});
|
|
}
|
|
|
|
/// <summary>
|
|
/// Registers that a writable property should be assigned a value from the given list.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// The value will be assigned in the order that the list is enumerated. Values will wrap around to the beginning
|
|
/// should the end of the list be reached.
|
|
/// </remarks>
|
|
/// <param name="composer"></param>
|
|
/// <param name="propertyPicker"></param>
|
|
/// <param name="values"></param>
|
|
public static IPostprocessComposer<T> WithValueFromList<T, TValue>(
|
|
this IPostprocessComposer<T> composer,
|
|
Expression<Func<T, TValue>> propertyPicker,
|
|
ICollection<TValue> values)
|
|
{
|
|
var index = 0;
|
|
return composer.With(propertyPicker, () =>
|
|
{
|
|
var value = values.ElementAt(index);
|
|
index = (index + 1) % values.Count;
|
|
return value;
|
|
});
|
|
}
|
|
}
|