1
0
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:
Rui Tomé
2025-02-24 11:40:53 +00:00
committed by GitHub
parent b0c6fc9146
commit 2b1db97d5c
11 changed files with 645 additions and 12 deletions

View File

@ -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;