mirror of
https://github.com/bitwarden/server.git
synced 2025-06-30 15:42:48 -05:00
[AC-2084] Include Collection permissions for admin endpoints (#3793)
* [AC-2084] Add documentation to existing collection repository getters * [AC-2084] Add new CollectionAdminDetails model * [AC-2084] Add SQL and migration scripts * [AC-2084] Introduce new repository methods to include permission details for collections * [AC-2084] Add EF repository methods and integration tests * [AC-2084] Update CollectionsController and response models * [AC-2084] Fix failing SqlServer test * [AC-2084] Clean up admin endpoint response models - vNext endpoints should now always return CollectionDetailsResponse models - Update constructors in CollectionDetailsResponseModel to be more explicit and add named static constructors for additional clarity * [AC-2084] Fix failing tests * [AC-2084] Fix potential provider/member bug * [AC-2084] Fix broken collections controller * [AC-2084] Cleanup collection response model types and constructors * [AC-2084] Remove redundant authorization check * [AC-2084] Cleanup ambiguous model name * [AC-2084] Add GroupBy clause to sprocs * [AC-2084] Add GroupBy logic to EF repository * [AC-2084] Update collection repository tests * [AC-2084] Update migration script date * Update migration script date --------- Co-authored-by: Thomas Rittson <31796059+eliykat@users.noreply.github.com> Co-authored-by: kejaeger <138028972+kejaeger@users.noreply.github.com>
This commit is contained in:
@ -26,8 +26,15 @@ public class CollectionResponseModel : ResponseModel
|
||||
public string ExternalId { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Response model for a collection that is always assigned to the requesting user, including permissions.
|
||||
/// </summary>
|
||||
public class CollectionDetailsResponseModel : CollectionResponseModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Create a response model for when the user is assumed to be assigned to the collection with permissions.
|
||||
/// e.g. The collection details comes from a repository method that only returns collections the user is assigned to.
|
||||
/// </summary>
|
||||
public CollectionDetailsResponseModel(CollectionDetails collectionDetails)
|
||||
: base(collectionDetails, "collectionDetails")
|
||||
{
|
||||
@ -43,6 +50,27 @@ public class CollectionDetailsResponseModel : CollectionResponseModel
|
||||
|
||||
public class CollectionAccessDetailsResponseModel : CollectionResponseModel
|
||||
{
|
||||
/// <summary>
|
||||
/// Create a response model for when the requesting user is assumed not assigned to the collection.
|
||||
/// No user permissions are included.
|
||||
///
|
||||
/// Ideally, the CollectionAdminDetails constructor should be used instead wherever possible. This is only
|
||||
/// used in the case of MSPs where the Provider user will likely never be assigned to the collection.
|
||||
/// </summary>
|
||||
/// <param name="collection"></param>
|
||||
public CollectionAccessDetailsResponseModel(Collection collection)
|
||||
: base(collection, "collectionAccessDetails")
|
||||
{ }
|
||||
|
||||
/// <summary>
|
||||
/// Create a response model for when the requesting user is assumed not assigned to the collection. Includes
|
||||
/// the other groups and user relationships for the collection.
|
||||
/// No user permissions are included.
|
||||
/// </summary>
|
||||
/// <param name="collection"></param>
|
||||
/// <param name="groups"></param>
|
||||
/// <param name="users"></param>
|
||||
[Obsolete("Use the CollectionAdminDetails constructor instead.")]
|
||||
public CollectionAccessDetailsResponseModel(Collection collection, IEnumerable<CollectionAccessSelection> groups, IEnumerable<CollectionAccessSelection> users)
|
||||
: base(collection, "collectionAccessDetails")
|
||||
{
|
||||
@ -50,6 +78,21 @@ public class CollectionAccessDetailsResponseModel : CollectionResponseModel
|
||||
Users = users.Select(g => new SelectionReadOnlyResponseModel(g));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Create a response model for when the requesting user's assignment is available via CollectionAdminDetails.
|
||||
/// </summary>
|
||||
/// <param name="collection"></param>
|
||||
public CollectionAccessDetailsResponseModel(CollectionAdminDetails collection)
|
||||
: base(collection, "collectionAccessDetails")
|
||||
{
|
||||
Assigned = collection.Assigned;
|
||||
ReadOnly = collection.ReadOnly;
|
||||
HidePasswords = collection.HidePasswords;
|
||||
Manage = collection.Manage;
|
||||
Groups = collection.Groups?.Select(g => new SelectionReadOnlyResponseModel(g)) ?? Enumerable.Empty<SelectionReadOnlyResponseModel>();
|
||||
Users = collection.Users?.Select(g => new SelectionReadOnlyResponseModel(g)) ?? Enumerable.Empty<SelectionReadOnlyResponseModel>();
|
||||
}
|
||||
|
||||
public IEnumerable<SelectionReadOnlyResponseModel> Groups { get; set; }
|
||||
public IEnumerable<SelectionReadOnlyResponseModel> Users { get; set; }
|
||||
|
||||
@ -57,4 +100,8 @@ public class CollectionAccessDetailsResponseModel : CollectionResponseModel
|
||||
/// True if the acting user is explicitly assigned to the collection
|
||||
/// </summary>
|
||||
public bool Assigned { get; set; }
|
||||
|
||||
public bool ReadOnly { get; set; }
|
||||
public bool HidePasswords { get; set; }
|
||||
public bool Manage { get; set; }
|
||||
}
|
||||
|
Reference in New Issue
Block a user