@ -1,7 +1,6 @@
@@ -1,7 +1,6 @@
using System.Linq.Expressions ;
using AutoMapper ;
using Bit.Core.Enums ;
using Bit.Core.SecretsManager.Models.Data ;
using Bit.Core.SecretsManager.Repositories ;
using Bit.Infrastructure.EntityFramework.Repositories ;
using Bit.Infrastructure.EntityFramework.SecretsManager.Models ;
@ -28,31 +27,6 @@ public class ProjectRepository : Repository<Core.SecretsManager.Entities.Project
@@ -28,31 +27,6 @@ public class ProjectRepository : Repository<Core.SecretsManager.Entities.Project
}
}
public async Task < ProjectPermissionDetails > GetPermissionDetailsByIdAsync ( Guid id , Guid userId )
{
using var scope = ServiceScopeFactory . CreateScope ( ) ;
var dbContext = GetDatabaseContext ( scope ) ;
var project = await dbContext . Project
. Where ( c = > c . Id = = id & & c . DeletedDate = = null )
. Select ( p = > new ProjectPermissionDetails
{
Id = p . Id ,
OrganizationId = p . OrganizationId ,
Name = p . Name ,
CreationDate = p . CreationDate ,
RevisionDate = p . RevisionDate ,
DeletedDate = p . DeletedDate ,
Read = p . UserAccessPolicies . Any ( ap = > ap . OrganizationUser . User . Id = = userId & & ap . Read )
| | p . GroupAccessPolicies . Any ( ap = >
ap . Group . GroupUsers . Any ( gu = > gu . OrganizationUser . User . Id = = userId & & ap . Read ) ) ,
Write = p . UserAccessPolicies . Any ( ap = > ap . OrganizationUser . User . Id = = userId & & ap . Write ) | |
p . GroupAccessPolicies . Any ( ap = >
ap . Group . GroupUsers . Any ( gu = > gu . OrganizationUser . User . Id = = userId & & ap . Write ) ) ,
} ) . FirstOrDefaultAsync ( ) ;
return project ;
}
public async Task < IEnumerable < Core . SecretsManager . Entities . Project > > GetManyByOrganizationIdAsync ( Guid organizationId , Guid userId , AccessClientType accessType )
{
using var scope = ServiceScopeFactory . CreateScope ( ) ;
@ -182,4 +156,37 @@ public class ProjectRepository : Repository<Core.SecretsManager.Entities.Project
@@ -182,4 +156,37 @@ public class ProjectRepository : Repository<Core.SecretsManager.Entities.Project
await dbContext . SaveChangesAsync ( ) ;
return projects ;
}
public async Task < ( bool Read , bool Write ) > AccessToProjectAsync ( Guid id , Guid userId , AccessClientType accessType )
{
using var scope = ServiceScopeFactory . CreateScope ( ) ;
var dbContext = GetDatabaseContext ( scope ) ;
var projectQuery = dbContext . Project
. Where ( s = > s . Id = = id ) ;
var query = accessType switch
{
AccessClientType . NoAccessCheck = > projectQuery . Select ( _ = > new { Read = true , Write = true } ) ,
AccessClientType . User = > projectQuery . Select ( p = > new
{
Read = p . UserAccessPolicies . Any ( ap = > ap . OrganizationUser . User . Id = = userId & & ap . Read )
| | p . GroupAccessPolicies . Any ( ap = >
ap . Group . GroupUsers . Any ( gu = > gu . OrganizationUser . User . Id = = userId & & ap . Read ) ) ,
Write = p . UserAccessPolicies . Any ( ap = > ap . OrganizationUser . User . Id = = userId & & ap . Write ) | |
p . GroupAccessPolicies . Any ( ap = >
ap . Group . GroupUsers . Any ( gu = > gu . OrganizationUser . User . Id = = userId & & ap . Write ) ) ,
} ) ,
AccessClientType . ServiceAccount = > projectQuery . Select ( p = > new
{
Read = p . ServiceAccountAccessPolicies . Any ( ap = > ap . ServiceAccountId = = userId & & ap . Read ) ,
Write = p . ServiceAccountAccessPolicies . Any ( ap = > ap . ServiceAccountId = = userId & & ap . Write ) ,
} ) ,
_ = > projectQuery . Select ( _ = > new { Read = false , Write = false } ) ,
} ;
var policy = await query . FirstOrDefaultAsync ( ) ;
return ( policy . Read , policy . Write ) ;
}
}