added user logic.
This commit is contained in:
@@ -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
51
Logic/UserLogic.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)));
|
||||
|
||||
@@ -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"))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user