1
0
mirror of https://github.com/bitwarden/server.git synced 2025-07-03 00:52:49 -05:00
Files
bitwarden/src/Infrastructure.EntityFramework/Repositories/Queries/UserBumpAccountRevisionDateByCipherIdQuery.cs
2022-08-29 16:06:55 -04:00

52 lines
2.2 KiB
C#

using Bit.Core.Entities;
using Bit.Core.Enums;
using User = Bit.Infrastructure.EntityFramework.Models.User;
namespace Bit.Infrastructure.EntityFramework.Repositories.Queries;
public class UserBumpAccountRevisionDateByCipherIdQuery : IQuery<User>
{
private readonly Cipher _cipher;
public UserBumpAccountRevisionDateByCipherIdQuery(Cipher cipher)
{
_cipher = cipher;
}
public IQueryable<User> Run(DatabaseContext dbContext)
{
var query = from u in dbContext.Users
join ou in dbContext.OrganizationUsers
on u.Id equals ou.UserId
join collectionCipher in dbContext.CollectionCiphers
on _cipher.Id equals collectionCipher.CipherId into cc_g
from cc in cc_g.DefaultIfEmpty()
join collectionUser in dbContext.CollectionUsers
on cc.CollectionId equals collectionUser.CollectionId into cu_g
from cu in cu_g.DefaultIfEmpty()
where ou.AccessAll &&
cu.OrganizationUserId == ou.Id
join groupUser in dbContext.GroupUsers
on ou.Id equals groupUser.OrganizationUserId into gu_g
from gu in gu_g.DefaultIfEmpty()
where cu.CollectionId == null &&
!ou.AccessAll
join grp in dbContext.Groups
on gu.GroupId equals grp.Id into g_g
from g in g_g.DefaultIfEmpty()
join collectionGroup in dbContext.CollectionGroups
on cc.CollectionId equals collectionGroup.CollectionId into cg_g
from cg in cg_g.DefaultIfEmpty()
where !g.AccessAll &&
cg.GroupId == gu.GroupId
where ou.OrganizationId == _cipher.OrganizationId &&
ou.Status == OrganizationUserStatusType.Confirmed &&
(cu.CollectionId != null ||
cg.CollectionId != null ||
ou.AccessAll ||
g.AccessAll)
select u;
return query;
}
}