77 lines
1.9 KiB
C#

using API.Authentication.Interfaces;
using API.DTO.Base;
using DAL.Contexts;
using DAL.Models;
using DAL.Models.Audits;
namespace API.Services
{
public class GrantService : ServiceBase<GrantService, GrantDTO, Grant, AuditGrant, IYesAuthentication>
{
public GrantService(ILogger<GrantService> logger, SASGContext context, IYesAuthentication auth) : base(logger, context, auth)
{
}
public bool hasGrant(ulong permissionId, string grantName)
{
return getNoAuthentication(x => x.permissionId == permissionId && x.name.Equals(grantName)).Any();
}
public List<string> getValues(ulong permissionId, string grantName)
{
List<Grant> grants = getNoAuthentication(x => x.permissionId == permissionId && x.name.StartsWith(grantName + ".")).ToList();
List<string> values = [];
foreach (Grant grant in grants)
{
string value = grant.name.Substring(grantName.Length);
if (value.Contains('.'))
// Were not looking at a value and instead another grant
continue;
values.Add(value);
}
return values;
}
public List<string> getStringValues(ulong permissionId, string grantName)
{
List<string> values = getValues(permissionId, grantName);
// Get rid of numbers
values = values.Where(x => !Int32.TryParse(x, out int _)).ToList();
return values;
}
public List<int> getIntValues(ulong permissionId, string grantName)
{
List<string> values = getValues(permissionId, grantName);
List<int> intValues = [];
Parallel.ForEach(values, x =>
{
if (Int32.TryParse(x, out int parsed))
intValues.Add(parsed);
});
return intValues;
}
public List<ulong> getULongValues(ulong permissionId, string grantName)
{
List<string> values = getValues(permissionId, grantName);
List<ulong> uLongValues = [];
Parallel.ForEach(values, x =>
{
if (UInt64.TryParse(x, out ulong parsed))
uLongValues.Add(parsed);
});
return uLongValues;
}
}
}