added "UserPermissionTesting_CS_WinForms" project
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace UserPermissionTest_CS_WinForms
|
||||
{
|
||||
public class JsonUserRepository : IUserRepository
|
||||
{
|
||||
private const string UsersFile = "users.json";
|
||||
private const string PermissionsFile = "permissions.json";
|
||||
|
||||
public List<User> LoadUsers()
|
||||
{
|
||||
if (!File.Exists(UsersFile))
|
||||
{
|
||||
var defaults = GetDefaultUsers();
|
||||
SaveUsers(defaults);
|
||||
return defaults;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
string json = File.ReadAllText(UsersFile);
|
||||
var users = JsonConvert.DeserializeObject<List<User>>(json);
|
||||
if (users == null) return GetDefaultUsers();
|
||||
|
||||
// Dynamic Migration: If any loaded user has a plain text password, hash it and re-save
|
||||
bool modified = false;
|
||||
foreach (var user in users)
|
||||
{
|
||||
if (user.Password.Length != 64 || !IsHexString(user.Password))
|
||||
{
|
||||
user.Password = PasswordHasher.HashPassword(user.Password);
|
||||
modified = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (modified)
|
||||
{
|
||||
SaveUsers(users);
|
||||
}
|
||||
|
||||
return users;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("Error reading users JSON, falling back to defaults: " + ex.Message);
|
||||
return GetDefaultUsers();
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsHexString(string str)
|
||||
{
|
||||
if (string.IsNullOrEmpty(str)) return false;
|
||||
foreach (char c in str)
|
||||
{
|
||||
if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')))
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void SaveUsers(List<User> users)
|
||||
{
|
||||
try
|
||||
{
|
||||
string json = JsonConvert.SerializeObject(users, Formatting.Indented);
|
||||
File.WriteAllText(UsersFile, json);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("Error writing users JSON: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
public List<string> LoadPermissions()
|
||||
{
|
||||
if (!File.Exists(PermissionsFile))
|
||||
{
|
||||
var defaults = GetDefaultPermissions();
|
||||
SavePermissions(defaults);
|
||||
return defaults;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
string json = File.ReadAllText(PermissionsFile);
|
||||
var permissions = JsonConvert.DeserializeObject<List<string>>(json);
|
||||
return permissions ?? GetDefaultPermissions();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("Error reading permissions JSON, falling back to defaults: " + ex.Message);
|
||||
return GetDefaultPermissions();
|
||||
}
|
||||
}
|
||||
|
||||
public void SavePermissions(List<string> permissions)
|
||||
{
|
||||
try
|
||||
{
|
||||
string json = JsonConvert.SerializeObject(permissions, Formatting.Indented);
|
||||
File.WriteAllText(PermissionsFile, json);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("Error writing permissions JSON: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private List<User> GetDefaultUsers()
|
||||
{
|
||||
return new List<User>
|
||||
{
|
||||
new User
|
||||
{
|
||||
Username = "admin",
|
||||
FullName = "System Administrator",
|
||||
Password = PasswordHasher.HashPassword("admin"),
|
||||
Permissions = GetDefaultPermissions()
|
||||
},
|
||||
new User
|
||||
{
|
||||
Username = "user",
|
||||
FullName = "Standard User",
|
||||
Password = PasswordHasher.HashPassword("user"),
|
||||
Permissions = new List<string> { "View Dashboard" }
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private List<string> GetDefaultPermissions()
|
||||
{
|
||||
return new List<string>
|
||||
{
|
||||
"View Dashboard",
|
||||
"Edit Settings",
|
||||
"Manage Users",
|
||||
"Full Control",
|
||||
"Delete Transactions"
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user