Files
CodingSandbox/UserPermissionTest_CS_WinForms/MainForm.cs
T
2026-05-31 15:54:46 +03:00

168 lines
6.6 KiB
C#

using System;
using System.Drawing;
using System.Windows.Forms;
namespace UserPermissionTest_CS_WinForms
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
// Subscribe to session state change notifications
SessionManager.SessionStateChanged += UpdateSessionUi;
// Trigger initial UI update
UpdateSessionUi();
}
private void UpdateSessionUi()
{
if (this.InvokeRequired)
{
this.Invoke(new Action(UpdateSessionUi));
return;
}
var user = SessionManager.CurrentUser;
if (user == null)
{
// Signed Out State
lblStatusBadge.Text = "SIGNED OUT";
lblStatusBadge.BackColor = Color.FromArgb(239, 68, 68); // Red
lblUsernameValue.Text = "Not Logged In";
lblUsernameValue.ForeColor = Color.FromArgb(100, 116, 139); // Slate-400
lblFullNameValue.Text = "-";
lstUserPermissions.Items.Clear();
lstUserPermissions.Items.Add("(Sign in to view permissions)");
btnLogin.Enabled = true;
btnLogout.Enabled = false;
// Authorization: Lock directory when not logged in
btnUsers.Enabled = false;
btnUsers.Text = "🔒 Manage Users";
btnUsers.BackColor = Color.FromArgb(241, 245, 249);
}
else
{
// Signed In State
lblStatusBadge.Text = "SIGNED IN";
lblStatusBadge.BackColor = Color.FromArgb(16, 185, 129); // Green
lblUsernameValue.Text = user.Username;
lblUsernameValue.ForeColor = Color.FromArgb(15, 23, 42); // Navy-900
lblFullNameValue.Text = user.FullName;
lstUserPermissions.Items.Clear();
if (user.Permissions.Count == 0)
{
lstUserPermissions.Items.Add("(No permissions assigned)");
}
else
{
foreach (var permissionId in user.Permissions)
{
var permObj = SessionManager.AvailablePermissions.FirstOrDefault(p => p.Id == permissionId);
string permName = permObj != null ? permObj.Name : $"Unknown (ID: {permissionId})";
lstUserPermissions.Items.Add("✓ " + permName);
}
}
btnLogin.Enabled = false;
btnLogout.Enabled = true;
// Authorization: Check if user has 'Manage Users' or 'Full Control'
var manageUsersPerm = SessionManager.AvailablePermissions.FirstOrDefault(p => p.Name.Equals("Manage Users", StringComparison.OrdinalIgnoreCase));
var fullControlPerm = SessionManager.AvailablePermissions.FirstOrDefault(p => p.Name.Equals("Full Control", StringComparison.OrdinalIgnoreCase));
bool hasAccess = (manageUsersPerm != null && user.Permissions.Contains(manageUsersPerm.Id)) ||
(fullControlPerm != null && user.Permissions.Contains(fullControlPerm.Id));
if (hasAccess)
{
btnUsers.Enabled = true;
btnUsers.Text = "👥 Manage Users";
btnUsers.BackColor = Color.FromArgb(241, 245, 249);
}
else
{
btnUsers.Enabled = false;
btnUsers.Text = "🔒 Manage Users (Locked)";
btnUsers.BackColor = Color.FromArgb(241, 245, 249);
}
}
}
private void btnLogin_Click(object sender, EventArgs e)
{
using (var loginDialog = new LoginDialog())
{
if (loginDialog.ShowDialog(this) == DialogResult.OK)
{
MessageBox.Show(
$"Welcome back, {SessionManager.CurrentUser?.FullName}!",
"Sign In Successful",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
}
private void btnLogout_Click(object sender, EventArgs e)
{
if (SessionManager.CurrentUser != null)
{
string username = SessionManager.CurrentUser.Username;
SessionManager.Logout();
MessageBox.Show(
$"User '{username}' has been successfully logged out.",
"Signed Out",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
private void btnUsers_Click(object sender, EventArgs e)
{
var user = SessionManager.CurrentUser;
var manageUsersPerm = SessionManager.AvailablePermissions.FirstOrDefault(p => p.Name.Equals("Manage Users", StringComparison.OrdinalIgnoreCase));
var fullControlPerm = SessionManager.AvailablePermissions.FirstOrDefault(p => p.Name.Equals("Full Control", StringComparison.OrdinalIgnoreCase));
bool hasAccess = user != null && (
(manageUsersPerm != null && user.Permissions.Contains(manageUsersPerm.Id)) ||
(fullControlPerm != null && user.Permissions.Contains(fullControlPerm.Id))
);
if (!hasAccess)
{
MessageBox.Show(
"Security Exception: You do not possess the required credentials ('Manage Users' or 'Full Control') to access directory configuration.",
"Access Denied",
MessageBoxButtons.OK,
MessageBoxIcon.Stop);
return;
}
using (var userSettings = new UserSettings())
{
userSettings.ShowDialog(this);
}
// After closing settings, refresh the session UI (in case the current user's profile was changed)
UpdateSessionUi();
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
// Unsubscribe to prevent reference leaks
SessionManager.SessionStateChanged -= UpdateSessionUi;
base.OnFormClosing(e);
}
}
}