mirror of
https://github.com/bitwarden/server.git
synced 2025-07-02 16:42:50 -05:00
[PM-18085] Add Manage property to UserCipherDetails (#5390)
* Add Manage permission to UserCipherDetails and CipherDetails_ReadByIdUserId * Add Manage property to CipherDetails and UserCipherDetailsQuery * Add integration test for CipherRepository Manage permission rules * Update CipherDetails_ReadWithoutOrganizationsByUserId to include Manage permission * Refactor UserCipherDetailsQuery to include detailed permission and organization properties * Refactor CipherRepositoryTests to improve test organization and readability - Split large test method into smaller, focused methods - Added helper methods for creating test data and performing assertions - Improved test coverage for cipher permissions in different scenarios - Maintained existing test logic while enhancing code structure * Refactor CipherRepositoryTests to consolidate cipher permission tests - Removed redundant helper methods for permission assertions - Simplified test methods for GetCipherPermissionsForOrganizationAsync, GetManyByUserIdAsync, and GetByIdAsync - Maintained existing test coverage for cipher manage permissions - Improved code readability and reduced code duplication * Add integration test for CipherRepository group collection manage permissions - Added new test method GetCipherPermissionsForOrganizationAsync_ManageProperty_RespectsCollectionGroupRules - Implemented helper method CreateCipherInOrganizationCollectionWithGroup to support group-based collection permission testing - Verified manage permissions are correctly applied based on group collection access settings * Add @Manage parameter to Cipher stored procedures - Updated CipherDetails_Create, CipherDetails_CreateWithCollections, and CipherDetails_Update stored procedures - Added @Manage parameter with comment "-- not used" - Included new stored procedure implementations in migration script - Consistent with previous work on adding Manage property to cipher details * Update UserCipherDetails functions to reorder Manage and ViewPassword columns * Reorder Manage and ViewPassword properties in cipher details queries * Bump date in migration script
This commit is contained in:
@ -50,11 +50,49 @@ public class UserCipherDetailsQuery : IQuery<CipherDetails>
|
||||
|
||||
where (cu == null ? (Guid?)null : cu.CollectionId) != null || (cg == null ? (Guid?)null : cg.CollectionId) != null
|
||||
|
||||
select c;
|
||||
select new
|
||||
{
|
||||
c.Id,
|
||||
c.UserId,
|
||||
c.OrganizationId,
|
||||
c.Type,
|
||||
c.Data,
|
||||
c.Attachments,
|
||||
c.CreationDate,
|
||||
c.RevisionDate,
|
||||
c.DeletedDate,
|
||||
c.Favorites,
|
||||
c.Folders,
|
||||
Edit = cu == null ? (cg != null && cg.ReadOnly == false) : cu.ReadOnly == false,
|
||||
ViewPassword = cu == null ? (cg != null && cg.HidePasswords == false) : cu.HidePasswords == false,
|
||||
Manage = cu == null ? (cg != null && cg.Manage == true) : cu.Manage == true,
|
||||
OrganizationUseTotp = o.UseTotp,
|
||||
c.Reprompt,
|
||||
c.Key
|
||||
};
|
||||
|
||||
var query2 = from c in dbContext.Ciphers
|
||||
where c.UserId == _userId
|
||||
select c;
|
||||
select new
|
||||
{
|
||||
c.Id,
|
||||
c.UserId,
|
||||
c.OrganizationId,
|
||||
c.Type,
|
||||
c.Data,
|
||||
c.Attachments,
|
||||
c.CreationDate,
|
||||
c.RevisionDate,
|
||||
c.DeletedDate,
|
||||
c.Favorites,
|
||||
c.Folders,
|
||||
Edit = true,
|
||||
ViewPassword = true,
|
||||
Manage = true,
|
||||
OrganizationUseTotp = false,
|
||||
c.Reprompt,
|
||||
c.Key
|
||||
};
|
||||
|
||||
var union = query.Union(query2).Select(c => new CipherDetails
|
||||
{
|
||||
@ -68,11 +106,12 @@ public class UserCipherDetailsQuery : IQuery<CipherDetails>
|
||||
RevisionDate = c.RevisionDate,
|
||||
DeletedDate = c.DeletedDate,
|
||||
Favorite = _userId.HasValue && c.Favorites != null && c.Favorites.ToLowerInvariant().Contains($"\"{_userId}\":true"),
|
||||
FolderId = GetFolderId(_userId, c),
|
||||
Edit = true,
|
||||
FolderId = GetFolderId(_userId, new Cipher { Id = c.Id, Folders = c.Folders }),
|
||||
Edit = c.Edit,
|
||||
Reprompt = c.Reprompt,
|
||||
ViewPassword = true,
|
||||
OrganizationUseTotp = false,
|
||||
ViewPassword = c.ViewPassword,
|
||||
Manage = c.Manage,
|
||||
OrganizationUseTotp = c.OrganizationUseTotp,
|
||||
Key = c.Key
|
||||
});
|
||||
return union;
|
||||
|
Reference in New Issue
Block a user