C # Логин поле с уровнями доступа - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь возиться с сайд-проектом, который я собирался завершить в течение некоторого времени, и только что вернулся к нему - только вспоминая, почему я вообще с этим справился.

Я создал систему входа в систему, подключенную к моей базе данных доступа.Все логины работают отлично, однако каждый логин имеет определенный уровень безопасности, который должен предоставлять им доступ к определенным кнопкам / элементам управления в зависимости от их уровня.У меня только 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;
}

enter image description here

EngineDesc просто получает данные изПользователь добавляет его в базу данных, такую ​​как модель двигателя, после чего он может создать подробную папку, связанную с ним, которая переходит к новой форме, которая содержит enginepec

enter image description here

Это - спецификация двигателя

Я называю это здесь

FrmMain main = new FrmMain();
EngineDesc engineDesc = new EngineDesc();
EngineSpec engineSpec = new EngineSpec();

1 Ответ

0 голосов
/ 28 сентября 2018

Вы можете попробовать создать в форме входа функцию, которая возвращает уровень доступа в строке.Затем вызовите свою функцию в главной форме.

Пример:

Создайте функцию в форме входа в систему:

public string accessLevel(string lblLevel)
{
   return lblLevel;
}

Затем вы можете вызвать функцию в главной форме, например:это:

LoginForm loginForm = new LoginForm();
string accessLevel = loginForm.accessLevel();

if(accessLevel == "10")
{
   //enter your code here
}

Вместо того, чтобы делать все сложные работы в вашей форме входа в систему, вы можете вместо этого попробовать проверку в основной форме.

Извините, если я не могу придумать лучшего решения, спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...