64 lines
2.4 KiB
C#
64 lines
2.4 KiB
C#
using Distribution.Data;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace Distribution.Infra.Auth
|
|
{
|
|
public class ScopeAccessService : IScopeAccessService
|
|
{
|
|
private readonly AppDBContext _context;
|
|
|
|
public ScopeAccessService(AppDBContext context)
|
|
{
|
|
_context = context;
|
|
}
|
|
|
|
public async Task<bool> HasStoreScopeAsync(Guid userId, Guid storeId) =>
|
|
await _context.UserStoreScopes.AnyAsync(s => s.FK_UserId == userId && s.FK_StoreId == storeId && s.IsActive);
|
|
|
|
public async Task<bool> HasRouteScopeAsync(Guid userId, Guid routeId) =>
|
|
await _context.UserRouteScopes.AnyAsync(s => s.FK_UserId == userId && s.FK_RouteId == routeId && s.IsActive);
|
|
|
|
public async Task<bool> HasRegionScopeAsync(Guid userId, Guid regionId) =>
|
|
await _context.UserRegionScopes.AnyAsync(s => s.FK_UserId == userId && s.FK_RegionId == regionId && s.IsActive);
|
|
|
|
public async Task<List<Guid>> GetAccessibleStoreIdsAsync(Guid userId)
|
|
{
|
|
var directStoreIds = await _context.UserStoreScopes
|
|
.Where(s => s.FK_UserId == userId && s.IsActive)
|
|
.Select(s => s.FK_StoreId)
|
|
.ToListAsync();
|
|
|
|
var routeIds = await _context.UserRouteScopes
|
|
.Where(s => s.FK_UserId == userId && s.IsActive)
|
|
.Select(s => s.FK_RouteId)
|
|
.ToListAsync();
|
|
|
|
var regionIds = await _context.UserRegionScopes
|
|
.Where(s => s.FK_UserId == userId && s.IsActive)
|
|
.Select(s => s.FK_RegionId)
|
|
.ToListAsync();
|
|
|
|
var storeIdsViaRoute = await _context.Stores
|
|
.Where(s => routeIds.Contains(s.FK_RouteId) && s.IsActive)
|
|
.Select(s => s.Id)
|
|
.ToListAsync();
|
|
|
|
var routeIdsViaRegion = await _context.Routes
|
|
.Where(r => regionIds.Contains(r.FK_RegionId) && r.IsActive)
|
|
.Select(r => r.Id)
|
|
.ToListAsync();
|
|
|
|
var storeIdsViaRegion = await _context.Stores
|
|
.Where(s => routeIdsViaRegion.Contains(s.FK_RouteId) && s.IsActive)
|
|
.Select(s => s.Id)
|
|
.ToListAsync();
|
|
|
|
return directStoreIds
|
|
.Concat(storeIdsViaRoute)
|
|
.Concat(storeIdsViaRegion)
|
|
.Distinct()
|
|
.ToList();
|
|
}
|
|
}
|
|
}
|