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 { public GrantService(ILogger logger, SASGContext context, IGrantAuthentication 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 getValues(ulong permissionId, string grantName) { List grants = getNoAuthentication(x => x.permissionId == permissionId && x.name.StartsWith(grantName + ".")).ToList(); List 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 getStringValues(ulong permissionId, string grantName) { List values = getValues(permissionId, grantName); // Get rid of numbers values = values.Where(x => !Int32.TryParse(x, out int _)).ToList(); return values; } public List getIntValues(ulong permissionId, string grantName) { List values = getValues(permissionId, grantName); List intValues = []; Parallel.ForEach(values, x => { if (Int32.TryParse(x, out int parsed)) intValues.Add(parsed); }); return intValues; } public List getULongValues(ulong permissionId, string grantName) { List values = getValues(permissionId, grantName); List uLongValues = []; Parallel.ForEach(values, x => { if (UInt64.TryParse(x, out ulong parsed)) uLongValues.Add(parsed); }); return uLongValues; } } }