Я пытаюсь возиться с сайд-проектом, который я собирался завершить в течение некоторого времени, и только что вернулся к нему - только вспоминая, почему я вообще с этим справился.
Я создал систему входа в систему, подключенную к моей базе данных доступа.Все логины работают отлично, однако каждый логин имеет определенный уровень безопасности, который должен предоставлять им доступ к определенным кнопкам / элементам управления в зависимости от их уровня.У меня только 2 уровня на данный момент - 5 и 10. Если пользователю назначен уровень доступа 5, он перенесет их в основную форму, где определенные кнопки / элементы управления не будут доступны для них (Либо не будет там, ИЛИ неактивны),Если пользователь, которому назначен уровень доступа 10, войдет в систему, он перенаправит его в основную форму, где ему будут доступны ВСЕ кнопки / элементы управления.
Я попробовал следующее, однако не имеет значения, какой уровень доступа я назначил пользователю. Он по-прежнему дает всем пользователям доступ к использованию всех кнопок / элементов управления.
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.OleDb;
namespace CCCAutoEngineering
{
public partial class FormLogin : Form
{
//CREATES A CONNECTION TO THE DATABASE
private const string conString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source = C:/CCC/CCCDB.accdb;";
readonly OleDbConnection con = new OleDbConnection(conString);
OleDbCommand cmd;
FrmMain main = new FrmMain();
EngineDesc engineDesc = new EngineDesc();
EngineSpec engineSpec = new EngineSpec();
public FormLogin()
{
InitializeComponent();
}
private void BtnCancel_Click(object sender, EventArgs e)
{
DialogResult dialogResult = MessageBox.Show("Are you sure you want to leave?","Exit",MessageBoxButtons.YesNo);
if(dialogResult == DialogResult.Yes)
{
Application.Exit();
}
}
private void BtnLogin_Click(object sender, EventArgs e)
{
//SQL STMT
cmd = new OleDbCommand("select * from Login where Username=@username and Password=@password", con);
//ADD PARAMS
cmd.Parameters.AddWithValue("@username", txtuserName.Text);
cmd.Parameters.AddWithValue("@password", txtPassword.Text);
con.Open();
OleDbDataReader dataReader = default(OleDbDataReader);
dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
if (string.IsNullOrEmpty(txtuserName.Text))
{
MessageBox.Show("Please enter your username");
}
else if (string.IsNullOrEmpty(txtPassword.Text))
{
MessageBox.Show("Please enter your password");
}
else
{
while (dataReader.Read() == true)
{
lbluser.Text = dataReader["Username"].ToString();
lblpwd.Text = dataReader["Password"].ToString();
lblLevel.Text = dataReader["Level"].ToString();
if (txtuserName.Text.Trim() == lbluser.Text.Trim() || (txtPassword.Text.Trim() == lblpwd.Text.Trim()))
{
if (lblLevel.Text == "10")
{
MessageBox.Show("You have successfully logged in");
this.Hide();
main.ShowDialog();
this.Close();
}
else if(lblLevel.Text == "5")
{
MessageBox.Show("You have successfully logged in");
this.Hide();
engineDesc.Disable_controls();
engineSpec.Disable_controls();
main.Disable_controls();
main.ShowDialog();
this.Close();
}
}
else
{
MessageBox.Show("Invalid username and or password!");
txtuserName.Clear();
txtPassword.Clear();
txtuserName.Focus();
}
}
dataReader.Close();
con.Close();
}
}
}
}
Вы заметитеИспользуемая мной функция Disable_controls (), это просто пользовательская функция, которую я создал, см. Ниже:
public void Disable_controls() {
addToolStripMenuItem.Enabled = false;
updateToolStripMenuItem.Enabled = false;
deleteToolStripMenuItem.Enabled = false;
}
EngineDesc просто получает данные изПользователь добавляет его в базу данных, такую как модель двигателя, после чего он может создать подробную папку, связанную с ним, которая переходит к новой форме, которая содержит enginepec
Это - спецификация двигателя
Я называю это здесь
FrmMain main = new FrmMain();
EngineDesc engineDesc = new EngineDesc();
EngineSpec engineSpec = new EngineSpec();