Files
2026-05-31 15:54:46 +03:00

146 lines
4.6 KiB
C#

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<Permission> LoadPermissions()
{
if (!File.Exists(PermissionsFile))
{
var defaults = GetDefaultPermissions();
SavePermissions(defaults);
return defaults;
}
try
{
string json = File.ReadAllText(PermissionsFile);
var permissions = JsonConvert.DeserializeObject<List<Permission>>(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<Permission> 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 = new List<int> { 1, 2, 3, 4, 5 }
},
new User
{
Username = "user",
FullName = "Standard User",
Password = PasswordHasher.HashPassword("user"),
Permissions = new List<int> { 1 }
}
};
}
private List<Permission> GetDefaultPermissions()
{
return new List<Permission>
{
new Permission { Id = 1, Name = "View Dashboard" },
new Permission { Id = 2, Name = "Edit Settings" },
new Permission { Id = 3, Name = "Manage Users" },
new Permission { Id = 4, Name = "Full Control" },
new Permission { Id = 5, Name = "Delete Transactions" }
};
}
}
}