168 lines
6.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|