added user logic.

This commit is contained in:
DESKTOP-GENO133\IvanPlex
2024-01-13 16:34:39 -07:00
parent 8f3f71772b
commit 00fd499805
4 changed files with 76 additions and 9 deletions

View File

@@ -9,6 +9,9 @@ using System.Linq.Expressions;
using Microsoft.Extensions.Logging;
using CarCareTracker.Helper;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using System.Security.Claims;
using CarCareTracker.Logic;
namespace CarCareTracker.Controllers
{
@@ -17,17 +20,23 @@ namespace CarCareTracker.Controllers
{
private readonly ILogger<HomeController> _logger;
private readonly IVehicleDataAccess _dataAccess;
private readonly IFileHelper _fileHelper;
private readonly IUserLogic _userLogic;
private readonly IConfiguration _config;
public HomeController(ILogger<HomeController> logger, IVehicleDataAccess dataAccess, IFileHelper fileHelper, IConfiguration configuration)
public HomeController(ILogger<HomeController> logger,
IVehicleDataAccess dataAccess,
IUserLogic userLogic,
IConfiguration configuration)
{
_logger = logger;
_dataAccess = dataAccess;
_fileHelper = fileHelper;
_config = configuration;
_userLogic = userLogic;
}
private int GetUserID()
{
return int.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier));
}
public IActionResult Index(string tab = "garage")
{
return View(model: tab);
@@ -35,6 +44,10 @@ namespace CarCareTracker.Controllers
public IActionResult Garage()
{
var vehiclesStored = _dataAccess.GetVehicles();
if (!User.IsInRole(nameof(UserData.IsRootUser)))
{
vehiclesStored = _userLogic.FilterUserVehicles(vehiclesStored, GetUserID());
}
return PartialView("_GarageDisplay", vehiclesStored);
}
public IActionResult Settings()

51
Logic/UserLogic.cs Normal file
View File

@@ -0,0 +1,51 @@
using CarCareTracker.External.Interfaces;
using CarCareTracker.Models;
using Microsoft.AspNetCore.Mvc.Formatters;
namespace CarCareTracker.Logic
{
public interface IUserLogic
{
List<Vehicle> FilterUserVehicles(List<Vehicle> results, int userId);
bool UserCanAccessVehicle(int userId, int vehicleId);
bool UserCanEditVehicle(int userId, int vehicleId);
}
public class UserLogic: IUserLogic
{
private readonly IUserAccessDataAccess _userAccess;
public UserLogic(IUserAccessDataAccess userAccess) {
_userAccess = userAccess;
}
public List<Vehicle> FilterUserVehicles(List<Vehicle> results, int userId)
{
var accessibleVehicles = _userAccess.GetUserAccessByUserId(userId);
if (accessibleVehicles.Any())
{
var vehicleIds = accessibleVehicles.Select(x => x.VehicleId);
return results.Where(x => vehicleIds.Contains(x.Id)).ToList();
}
else
{
return new List<Vehicle>();
}
}
public bool UserCanAccessVehicle(int userId, int vehicleId)
{
var userAccess = _userAccess.GetUserAccessByVehicleAndUserId(userId, vehicleId);
if (userAccess != null)
{
return true;
}
return false;
}
public bool UserCanEditVehicle(int userId, int vehicleId)
{
var userAccess = _userAccess.GetUserAccessByVehicleAndUserId(userId, vehicleId);
if (userAccess != null && userAccess.AccessType == UserAccessType.Editor)
{
return true;
}
return false;
}
}
}

View File

@@ -74,7 +74,8 @@ namespace CarCareTracker.Middleware
var appIdentity = new ClaimsIdentity("Custom");
var userIdentity = new List<Claim>
{
new(ClaimTypes.Name, splitString[0])
new(ClaimTypes.Name, splitString[0]),
new(ClaimTypes.NameIdentifier, userData.Id.ToString())
};
if (userData.IsAdmin)
{
@@ -113,9 +114,10 @@ namespace CarCareTracker.Middleware
{
var appIdentity = new ClaimsIdentity("Custom");
var userIdentity = new List<Claim>
{
new(ClaimTypes.Name, authCookie.UserData.UserName)
};
{
new(ClaimTypes.Name, authCookie.UserData.UserName),
new(ClaimTypes.NameIdentifier, authCookie.UserData.Id.ToString())
};
if (authCookie.UserData.IsAdmin)
{
userIdentity.Add(new(ClaimTypes.Role, nameof(UserData.IsAdmin)));

View File

@@ -29,8 +29,9 @@ builder.Services.AddSingleton<IReminderHelper, ReminderHelper>();
builder.Services.AddSingleton<IReportHelper, ReportHelper>();
builder.Services.AddSingleton<IMailHelper, MailHelper>();
//configur logic
//configure logic
builder.Services.AddSingleton<ILoginLogic, LoginLogic>();
builder.Services.AddSingleton<IUserLogic, UserLogic>();
if (!Directory.Exists("data"))
{