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))
|
||||
{
|
||||
var table = db.GetCollection<Vehicle>(tableName);
|
||||
table.Upsert(vehicle);
|
||||
var result = table.Upsert(vehicle);
|
||||
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)
|
||||
{
|
||||
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 bool SaveVehicle(Vehicle vehicle);
|
||||
public Vehicle GetLastInsertedVehicle();
|
||||
public bool DeleteVehicle(int vehicleId);
|
||||
public List<Vehicle> GetVehicles();
|
||||
public Vehicle GetVehicleById(int vehicleId);
|
||||
|
||||
@@ -39,7 +39,8 @@ namespace CarCareTracker.Middleware
|
||||
var appIdentity = new ClaimsIdentity("Custom");
|
||||
var userIdentity = new List<Claim>
|
||||
{
|
||||
new(ClaimTypes.Name, "admin")
|
||||
new(ClaimTypes.Name, "admin"),
|
||||
new(ClaimTypes.Role, nameof(UserData.IsRootUser))
|
||||
};
|
||||
appIdentity.AddClaims(userIdentity);
|
||||
AuthenticationTicket ticket = new AuthenticationTicket(new ClaimsPrincipal(appIdentity), this.Scheme.Name);
|
||||
@@ -64,7 +65,8 @@ namespace CarCareTracker.Middleware
|
||||
if (splitString.Count() != 2)
|
||||
{
|
||||
return AuthenticateResult.Fail("Invalid credentials");
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
var userData = _loginLogic.ValidateUserCredentials(new LoginModel { UserName = splitString[0], Password = splitString[1] });
|
||||
if (userData.Id != default)
|
||||
@@ -78,6 +80,10 @@ namespace CarCareTracker.Middleware
|
||||
{
|
||||
userIdentity.Add(new(ClaimTypes.Role, nameof(UserData.IsAdmin)));
|
||||
}
|
||||
if (userData.IsRootUser)
|
||||
{
|
||||
userIdentity.Add(new(ClaimTypes.Role, nameof(UserData.IsRootUser)));
|
||||
}
|
||||
appIdentity.AddClaims(userIdentity);
|
||||
AuthenticationTicket ticket = new AuthenticationTicket(new ClaimsPrincipal(appIdentity), this.Scheme.Name);
|
||||
return AuthenticateResult.Success(ticket);
|
||||
@@ -114,6 +120,10 @@ namespace CarCareTracker.Middleware
|
||||
{
|
||||
userIdentity.Add(new(ClaimTypes.Role, nameof(UserData.IsAdmin)));
|
||||
}
|
||||
if (authCookie.UserData.IsRootUser)
|
||||
{
|
||||
userIdentity.Add(new(ClaimTypes.Role, nameof(UserData.IsRootUser)));
|
||||
}
|
||||
appIdentity.AddClaims(userIdentity);
|
||||
AuthenticationTicket ticket = new AuthenticationTicket(new ClaimsPrincipal(appIdentity), this.Scheme.Name);
|
||||
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<IUserRecordDataAccess, UserRecordDataAccess>();
|
||||
builder.Services.AddSingleton<ITokenRecordDataAccess, TokenRecordDataAccess>();
|
||||
builder.Services.AddSingleton<IUserAccessDataAccess, UserAccessDataAccess>();
|
||||
|
||||
//configure helpers
|
||||
builder.Services.AddSingleton<IFileHelper, FileHelper>();
|
||||
|
||||
Reference in New Issue
Block a user