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

154 lines
5.4 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 permission in user.Permissions)
{
lstUserPermissions.Items.Add("✓ " + permission);
}
}
btnLogin.Enabled = false;
btnLogout.Enabled = true;
// Authorization: Check if user has 'Manage Users' or 'Full Control'
bool hasAccess = user.Permissions.Contains("Manage Users") || user.Permissions.Contains("Full Control");
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;
if (user == null || (!user.Permissions.Contains("Manage Users") && !user.Permissions.Contains("Full Control")))
{
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);
}
}
}