mirror of
https://github.com/bitwarden/server.git
synced 2026-01-31 14:13:18 +08:00
Add BuildCreateDefaultCollectionAction method to ICollectionRepository and implementations in CollectionRepository classes
- Introduced a new method in ICollectionRepository to build an action for creating a default collection with user access. - Implemented the method in both Dapper and Entity Framework CollectionRepository classes to handle collection creation and user access assignments. - Enhanced the functionality to support transaction execution for database operations.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using Bit.Core.Entities;
|
||||
using Bit.Core.Models.Data;
|
||||
using Bit.Core.OrganizationFeatures.OrganizationUsers.Interfaces;
|
||||
|
||||
#nullable enable
|
||||
|
||||
@@ -82,4 +83,11 @@ public interface ICollectionRepository : IRepository<Collection, Guid>
|
||||
/// <param name="defaultCollectionName">The encrypted string to use as the default collection name.</param>
|
||||
Task CreateDefaultCollectionsBulkAsync(Guid organizationId, IEnumerable<Guid> organizationUserIds, string defaultCollectionName);
|
||||
|
||||
/// <summary>
|
||||
/// Builds an action that creates a default collection with user access.
|
||||
/// </summary>
|
||||
/// <param name="collection">The collection entity to create</param>
|
||||
/// <param name="users">Collection access selections for users</param>
|
||||
/// <returns>An action that can be executed within a transaction</returns>
|
||||
OrganizationInitializationUpdateAction BuildCreateDefaultCollectionAction(Collection collection, IEnumerable<CollectionAccessSelection> users);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@ using Bit.Core.AdminConsole.OrganizationFeatures.Collections;
|
||||
using Bit.Core.Entities;
|
||||
using Bit.Core.Enums;
|
||||
using Bit.Core.Models.Data;
|
||||
using Bit.Core.OrganizationFeatures.OrganizationUsers.Interfaces;
|
||||
using Bit.Core.Repositories;
|
||||
using Bit.Core.Settings;
|
||||
using Bit.Core.Utilities;
|
||||
@@ -529,4 +530,21 @@ public class CollectionRepository : Repository<Collection, Guid>, ICollectionRep
|
||||
[DisallowNull]
|
||||
public DataTable? Users { get; set; }
|
||||
}
|
||||
|
||||
public OrganizationInitializationUpdateAction BuildCreateDefaultCollectionAction(Collection collection, IEnumerable<CollectionAccessSelection> users)
|
||||
{
|
||||
return async (SqlConnection? connection, SqlTransaction? transaction, object? context) =>
|
||||
{
|
||||
var collectionWithAccess = new CollectionWithGroupsAndUsers(
|
||||
collection,
|
||||
Enumerable.Empty<CollectionAccessSelection>(),
|
||||
users);
|
||||
|
||||
await connection!.ExecuteAsync(
|
||||
"[dbo].[Collection_CreateWithGroupsAndUsers]",
|
||||
collectionWithAccess,
|
||||
commandType: CommandType.StoredProcedure,
|
||||
transaction: transaction);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,11 @@
|
||||
using Bit.Core.AdminConsole.OrganizationFeatures.Collections;
|
||||
using Bit.Core.Enums;
|
||||
using Bit.Core.Models.Data;
|
||||
using Bit.Core.OrganizationFeatures.OrganizationUsers.Interfaces;
|
||||
using Bit.Core.Repositories;
|
||||
using Bit.Infrastructure.EntityFramework.Models;
|
||||
using Bit.Infrastructure.EntityFramework.Repositories.Queries;
|
||||
using Microsoft.Data.SqlClient;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
@@ -846,4 +848,30 @@ public class CollectionRepository : Repository<Core.Entities.Collection, Collect
|
||||
public Task CreateDefaultCollectionsBulkAsync(Guid organizationId, IEnumerable<Guid> organizationUserIds,
|
||||
string defaultCollectionName) =>
|
||||
CreateDefaultCollectionsAsync(organizationId, organizationUserIds, defaultCollectionName);
|
||||
|
||||
public OrganizationInitializationUpdateAction BuildCreateDefaultCollectionAction(Core.Entities.Collection collection, IEnumerable<CollectionAccessSelection> users)
|
||||
{
|
||||
return async (SqlConnection? _, SqlTransaction? _, object? context) =>
|
||||
{
|
||||
var dbContext = (DatabaseContext)context!;
|
||||
|
||||
var efCollection = Mapper.Map<Collection>(collection);
|
||||
await dbContext.Collections.AddAsync(efCollection);
|
||||
|
||||
foreach (var user in users)
|
||||
{
|
||||
var collectionUser = new CollectionUser
|
||||
{
|
||||
CollectionId = collection.Id,
|
||||
OrganizationUserId = user.Id,
|
||||
HidePasswords = user.HidePasswords,
|
||||
ReadOnly = user.ReadOnly,
|
||||
Manage = user.Manage
|
||||
};
|
||||
await dbContext.CollectionUsers.AddAsync(collectionUser);
|
||||
}
|
||||
|
||||
await dbContext.SaveChangesAsync();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user