added data access methods for user access.
This commit is contained in:
8
Enum/UserAccessType.cs
Normal file
8
Enum/UserAccessType.cs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
namespace CarCareTracker.Models
|
||||||
|
{
|
||||||
|
public enum UserAccessType
|
||||||
|
{
|
||||||
|
Viewer = 0,
|
||||||
|
Editor = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
91
External/Implementations/UserAccessDataAcces.cs
vendored
Normal file
91
External/Implementations/UserAccessDataAcces.cs
vendored
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
using CarCareTracker.External.Interfaces;
|
||||||
|
using CarCareTracker.Helper;
|
||||||
|
using CarCareTracker.Models;
|
||||||
|
using LiteDB;
|
||||||
|
|
||||||
|
namespace CarCareTracker.External.Implementations
|
||||||
|
{
|
||||||
|
public class UserAccessDataAccess : IUserAccessDataAccess
|
||||||
|
{
|
||||||
|
private static string dbName = StaticHelper.DbName;
|
||||||
|
private static string tableName = "useraccessrecords";
|
||||||
|
public UserAccess GetUserAccessByVehicleAndUserId(int vehicleId, int userId)
|
||||||
|
{
|
||||||
|
using (var db = new LiteDatabase(dbName))
|
||||||
|
{
|
||||||
|
var table = db.GetCollection<UserAccess>(tableName);
|
||||||
|
return table.FindOne(Query.And(
|
||||||
|
Query.EQ(nameof(UserAccess.VehicleId), vehicleId),
|
||||||
|
Query.EQ(nameof(UserAccess.UserId), userId)
|
||||||
|
));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Gets a list of vehicles user have access to.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public List<UserAccess> GetUserAccessByUserId(int userId)
|
||||||
|
{
|
||||||
|
using (var db = new LiteDatabase(dbName))
|
||||||
|
{
|
||||||
|
var table = db.GetCollection<UserAccess>(tableName);
|
||||||
|
return table.Find(Query.EQ(nameof(UserAccess.UserId), userId)).ToList();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
public List<UserAccess> GetUserAccessByVehicleId(int vehicleId)
|
||||||
|
{
|
||||||
|
using (var db = new LiteDatabase(dbName))
|
||||||
|
{
|
||||||
|
var table = db.GetCollection<UserAccess>(tableName);
|
||||||
|
return table.Find(Query.EQ(nameof(UserAccess.VehicleId), vehicleId)).ToList();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
public bool SaveUserAccess(UserAccess userAccess)
|
||||||
|
{
|
||||||
|
using (var db = new LiteDatabase(dbName))
|
||||||
|
{
|
||||||
|
var table = db.GetCollection<UserAccess>(tableName);
|
||||||
|
table.Upsert(userAccess);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
public bool DeleteUserAccess(int userAccessId)
|
||||||
|
{
|
||||||
|
using (var db = new LiteDatabase(dbName))
|
||||||
|
{
|
||||||
|
var table = db.GetCollection<UserAccess>(tableName);
|
||||||
|
table.Delete(userAccessId);
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Delete all access records when a vehicle is deleted.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="vehicleId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public bool DeleteAllAccessRecordsByVehicleId(int vehicleId)
|
||||||
|
{
|
||||||
|
using (var db = new LiteDatabase(dbName))
|
||||||
|
{
|
||||||
|
var table = db.GetCollection<UserAccess>(tableName);
|
||||||
|
table.DeleteMany(Query.EQ(nameof(UserAccess.VehicleId), vehicleId));
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Delee all access records when a user is deleted.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="userId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public bool DeleteAllAccessRecordsByUserId(int userId)
|
||||||
|
{
|
||||||
|
using (var db = new LiteDatabase(dbName))
|
||||||
|
{
|
||||||
|
var table = db.GetCollection<UserAccess>(tableName);
|
||||||
|
table.DeleteMany(Query.EQ(nameof(UserAccess.UserId), userId));
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
10
External/Implementations/VehicleDataAccess.cs
vendored
10
External/Implementations/VehicleDataAccess.cs
vendored
@@ -14,10 +14,18 @@ namespace CarCareTracker.External.Implementations
|
|||||||
using (var db = new LiteDatabase(dbName))
|
using (var db = new LiteDatabase(dbName))
|
||||||
{
|
{
|
||||||
var table = db.GetCollection<Vehicle>(tableName);
|
var table = db.GetCollection<Vehicle>(tableName);
|
||||||
table.Upsert(vehicle);
|
var result = table.Upsert(vehicle);
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
public Vehicle GetLastInsertedVehicle()
|
||||||
|
{
|
||||||
|
using (var db = new LiteDatabase(dbName))
|
||||||
|
{
|
||||||
|
var table = db.GetCollection<Vehicle>(tableName);
|
||||||
|
return table.FindOne(Query.All(Query.Descending));
|
||||||
|
};
|
||||||
|
}
|
||||||
public bool DeleteVehicle(int vehicleId)
|
public bool DeleteVehicle(int vehicleId)
|
||||||
{
|
{
|
||||||
using (var db = new LiteDatabase(dbName))
|
using (var db = new LiteDatabase(dbName))
|
||||||
|
|||||||
15
External/Interfaces/IUserAccessDataAccess.cs
vendored
Normal file
15
External/Interfaces/IUserAccessDataAccess.cs
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
using CarCareTracker.Models;
|
||||||
|
|
||||||
|
namespace CarCareTracker.External.Interfaces
|
||||||
|
{
|
||||||
|
public interface IUserAccessDataAccess
|
||||||
|
{
|
||||||
|
UserAccess GetUserAccessByVehicleAndUserId(int vehicleId, int userId);
|
||||||
|
List<UserAccess> GetUserAccessByUserId(int userId);
|
||||||
|
List<UserAccess> GetUserAccessByVehicleId(int vehicleId);
|
||||||
|
bool SaveUserAccess(UserAccess userAccess);
|
||||||
|
bool DeleteUserAccess(int userAccessId);
|
||||||
|
bool DeleteAllAccessRecordsByVehicleId(int vehicleId);
|
||||||
|
bool DeleteAllAccessRecordsByUserId(int userId);
|
||||||
|
}
|
||||||
|
}
|
||||||
1
External/Interfaces/IVehicleDataAccess.cs
vendored
1
External/Interfaces/IVehicleDataAccess.cs
vendored
@@ -5,6 +5,7 @@ namespace CarCareTracker.External.Interfaces
|
|||||||
public interface IVehicleDataAccess
|
public interface IVehicleDataAccess
|
||||||
{
|
{
|
||||||
public bool SaveVehicle(Vehicle vehicle);
|
public bool SaveVehicle(Vehicle vehicle);
|
||||||
|
public Vehicle GetLastInsertedVehicle();
|
||||||
public bool DeleteVehicle(int vehicleId);
|
public bool DeleteVehicle(int vehicleId);
|
||||||
public List<Vehicle> GetVehicles();
|
public List<Vehicle> GetVehicles();
|
||||||
public Vehicle GetVehicleById(int vehicleId);
|
public Vehicle GetVehicleById(int vehicleId);
|
||||||
|
|||||||
@@ -39,7 +39,8 @@ namespace CarCareTracker.Middleware
|
|||||||
var appIdentity = new ClaimsIdentity("Custom");
|
var appIdentity = new ClaimsIdentity("Custom");
|
||||||
var userIdentity = new List<Claim>
|
var userIdentity = new List<Claim>
|
||||||
{
|
{
|
||||||
new(ClaimTypes.Name, "admin")
|
new(ClaimTypes.Name, "admin"),
|
||||||
|
new(ClaimTypes.Role, nameof(UserData.IsRootUser))
|
||||||
};
|
};
|
||||||
appIdentity.AddClaims(userIdentity);
|
appIdentity.AddClaims(userIdentity);
|
||||||
AuthenticationTicket ticket = new AuthenticationTicket(new ClaimsPrincipal(appIdentity), this.Scheme.Name);
|
AuthenticationTicket ticket = new AuthenticationTicket(new ClaimsPrincipal(appIdentity), this.Scheme.Name);
|
||||||
@@ -64,7 +65,8 @@ namespace CarCareTracker.Middleware
|
|||||||
if (splitString.Count() != 2)
|
if (splitString.Count() != 2)
|
||||||
{
|
{
|
||||||
return AuthenticateResult.Fail("Invalid credentials");
|
return AuthenticateResult.Fail("Invalid credentials");
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
var userData = _loginLogic.ValidateUserCredentials(new LoginModel { UserName = splitString[0], Password = splitString[1] });
|
var userData = _loginLogic.ValidateUserCredentials(new LoginModel { UserName = splitString[0], Password = splitString[1] });
|
||||||
if (userData.Id != default)
|
if (userData.Id != default)
|
||||||
@@ -78,6 +80,10 @@ namespace CarCareTracker.Middleware
|
|||||||
{
|
{
|
||||||
userIdentity.Add(new(ClaimTypes.Role, nameof(UserData.IsAdmin)));
|
userIdentity.Add(new(ClaimTypes.Role, nameof(UserData.IsAdmin)));
|
||||||
}
|
}
|
||||||
|
if (userData.IsRootUser)
|
||||||
|
{
|
||||||
|
userIdentity.Add(new(ClaimTypes.Role, nameof(UserData.IsRootUser)));
|
||||||
|
}
|
||||||
appIdentity.AddClaims(userIdentity);
|
appIdentity.AddClaims(userIdentity);
|
||||||
AuthenticationTicket ticket = new AuthenticationTicket(new ClaimsPrincipal(appIdentity), this.Scheme.Name);
|
AuthenticationTicket ticket = new AuthenticationTicket(new ClaimsPrincipal(appIdentity), this.Scheme.Name);
|
||||||
return AuthenticateResult.Success(ticket);
|
return AuthenticateResult.Success(ticket);
|
||||||
@@ -114,6 +120,10 @@ namespace CarCareTracker.Middleware
|
|||||||
{
|
{
|
||||||
userIdentity.Add(new(ClaimTypes.Role, nameof(UserData.IsAdmin)));
|
userIdentity.Add(new(ClaimTypes.Role, nameof(UserData.IsAdmin)));
|
||||||
}
|
}
|
||||||
|
if (authCookie.UserData.IsRootUser)
|
||||||
|
{
|
||||||
|
userIdentity.Add(new(ClaimTypes.Role, nameof(UserData.IsRootUser)));
|
||||||
|
}
|
||||||
appIdentity.AddClaims(userIdentity);
|
appIdentity.AddClaims(userIdentity);
|
||||||
AuthenticationTicket ticket = new AuthenticationTicket(new ClaimsPrincipal(appIdentity), this.Scheme.Name);
|
AuthenticationTicket ticket = new AuthenticationTicket(new ClaimsPrincipal(appIdentity), this.Scheme.Name);
|
||||||
return AuthenticateResult.Success(ticket);
|
return AuthenticateResult.Success(ticket);
|
||||||
|
|||||||
10
Models/User/UserAccess.cs
Normal file
10
Models/User/UserAccess.cs
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
namespace CarCareTracker.Models
|
||||||
|
{
|
||||||
|
public class UserAccess
|
||||||
|
{
|
||||||
|
public int Id { get; set; }
|
||||||
|
public int UserId { get; set; }
|
||||||
|
public int VehicleId { get; set; }
|
||||||
|
public UserAccessType AccessType { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,6 +20,7 @@ builder.Services.AddSingleton<IReminderRecordDataAccess, ReminderRecordDataAcces
|
|||||||
builder.Services.AddSingleton<IUpgradeRecordDataAccess, UpgradeRecordDataAccess>();
|
builder.Services.AddSingleton<IUpgradeRecordDataAccess, UpgradeRecordDataAccess>();
|
||||||
builder.Services.AddSingleton<IUserRecordDataAccess, UserRecordDataAccess>();
|
builder.Services.AddSingleton<IUserRecordDataAccess, UserRecordDataAccess>();
|
||||||
builder.Services.AddSingleton<ITokenRecordDataAccess, TokenRecordDataAccess>();
|
builder.Services.AddSingleton<ITokenRecordDataAccess, TokenRecordDataAccess>();
|
||||||
|
builder.Services.AddSingleton<IUserAccessDataAccess, UserAccessDataAccess>();
|
||||||
|
|
||||||
//configure helpers
|
//configure helpers
|
||||||
builder.Services.AddSingleton<IFileHelper, FileHelper>();
|
builder.Services.AddSingleton<IFileHelper, FileHelper>();
|
||||||
|
|||||||
Reference in New Issue
Block a user