2017-07-09 8 views
1

PRE Ich verwende SQLExpress, um Informationen zu speichern.Wie kann ich eine aktuell angemeldete Benutzersicherheit überprüfen, damit ich Funktionen deaktivieren kann?

Ich habe eine sehr einfache Benutzer-Setup in meiner App. Ich habe eine Login-Tabelle, die nur drei Felder enthält, das sind Benutzername, Passwort und Sicherheitsstufe. Es gibt nur drei Sicherheitsstufen; Hoch, Mittel und Niedrig.

Auf meinem Login-Formular habe ich den folgenden Code, um den Benutzer zu speichern, der sich in einem Settings.Default[] anmeldet, damit ich es später lesen kann.

private void Loginbtn_Click(object sender, EventArgs e) 
{ 
    SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;Initial Catalog=MySupportHub;Integrated Security=True"); 
    SqlDataAdapter sda = new SqlDataAdapter(@"SELECT * FROM [dbo].[Login] Where Username='" + usernameTextBox.Text + "' and Password='" + passwordTextBox.Text + "'", con); 
    DataTable dt = new DataTable(); 
    sda.Fill(dt); 
    if (dt.Rows.Count == 1) 
    { 
     Settings.Default["CurrentUserName"] = usernameTextBox.Text; 
     Settings.Default.Save(); 

     this.Hide(); 
     Home home = new Home(); 
     home.Show(); 
    } 
    else 
    { 
     MessageBox.Show("Invalid Username and/or Password..!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     Clearbtn_Click(sender, e); 
    } 
} 

dann auf der Homepage habe ich den folgenden Code, um den Wert zu erhalten und den aktuellen Benutzers in der unteren Statusleiste protokolliert anzuzeigen. Beim Laden der Seite.

//Identify and display current logged in user 

CurrentUser.Caption = Settings.Default["CurrentUserName"].ToString(); 

Was würde ich jetzt in der Lage sein mag zu tun ist, um den Strom in den Benutzern Sicherheitsstufe angemeldet überprüfen (User-Wert gespeichert hier „CurrentUser.Caption“ auf dem Hauptformular würde) und in der Lage sein, Funktionen zu deaktivieren, wie eine Erstellung neuer Benutzer usw.

Also müsste ich in der Lage sein, den CurrentUser.Caption Wert zu lesen, überprüfen Sie das gegen die (SQL Express) [dbo]. [Login] Tabelle und finden Sie die Sicherheitsstufe des Benutzers und begrenzen Sie Funktionen basierend auf dem Ergebnis .

Jede Hilfe wäre willkommen.

Dank

Phil

+0

Sie wissen, wie Sie den Wert von der Datentabelle 'dt' abrufen können? Wenn ja, sollten Sie den Wert von "SecurityLevel" aus der Tabelle abrufen und in den Standardeinstellungen speichern und dort verwenden, wo Sie möchten. –

+0

Ich fürchte, ich lerne immer noch. Ich wollte versuchen, den Sicherheitswert bei der Anmeldung anstelle des Hauptformulars zu ziehen und es in der Statusleiste neben dem Benutzernamen anzuzeigen und dann darauf zu konditionieren. Aber ich glaube, ich überlege mir, welchen Code ich brauche, um diese Informationen aus der Datenbank für diesen bestimmten Benutzer abzurufen. Kann ich den Login-Tastencode ändern, um diesen Wert zu ziehen? und setze es als Standardeinstellung? –

+0

Ja ... Sie können das tun. –

Antwort

0

Suchen Sie

SELECT CURRENT_USER; 

oder

SELECT SUSER_NAME(); 

und überprüfen Sie mit Ihrem Tabellensätze?

1

Sie implementieren im Wesentlichen die Benutzerauthentifizierung und -autorisierung in WebForms.

Was würde in Ihrem Szenario passieren, wenn ein Benutzer die folgende Zeichenfolge für einen Benutzernamen und ein Kennwort (ohne die Anführungszeichen) eingibt: "foo OR 1 = 1"? Sie dürfen keine Strings in CRUID-Operationen der Datenbank verketten, um SQL-Injektionen zu verhindern.

Ich könnte Ihnen raten, FormsAuthentication und verschlüsselte Tickets mit Benutzerrollen zu verwenden und Passwörter nicht im Klartext oder sogar verschlüsselt zu speichern, sondern speichern Hashes mit PBKDF2 und kryptografischen Salzen. Aber Sie sind möglicherweise nicht besorgt über eine Produktionsumgebung und dies könnte nur ein Lernbeispiel sein. In diesem Fall möchten Sie immer noch nicht das üben, was Sie nie in einer realen Anwendung verwenden werden, nämlich den Wert eines Benutzersteuerelements zu verwenden, um es mit den in einer Tabelle gespeicherten Berechtigungen abzugleichen. Man kann den Wert am Client (Browser) ändern und das System tricksen.

in den Griff FormsAuthentication und zu den User.Identity.IsInRole verwenden würde ein Weg sein, um fortzufahren, können Sie dies überprüfen, auf einem von Microsoft Docs Tutorials: https://support.microsoft.com/en-us/help/301240/how-to-implement-forms-based-authentication-in-your-asp.net-applicatio

Ich gehe davon würden Sie gewinnen möchten Authentifizierungs Industrie gültige Fähigkeiten für die Umsetzung und Autorisierung in einer asp.net Web-Umgebung.Wenn dies das Ziel hinter Ihrer Frage ist, würden Sie wahrscheinlich die Zeit nehmen, all dies zu lernen, während Sie lernen würden, asp.net Identity zu lernen, die viele Dinge für Sie erledigt.

In beiden Szenarien dauert es lange, bis Sie Ihre App entwickeln, ohne das Entity Framework zu verwenden. Wenn Sie Identity nicht verwenden, müssen Sie Ihre eigenen Sicherheitsfunktionen, insbesondere von hoher Qualität, implementieren. Vertrau mir, ich war dort, habe das getan.

Es wird eine Lernkurve geben, aber der beste Weg nach vorne ist es, EF zu verwenden, um Ihnen eine Menge Zeit zu sparen, auch ASP.NET Identity für heutzutage relevante Fähigkeiten und auch Ihnen viel Zeit zu sparen. Es lohnt sich auch Web Forms und MVC zu vergleichen. MVC ist die bessere Wahl für eine dynamische, voll ausgestattete moderne Anwendung.

Ich wünschte, es gäbe eine einfachere Antwort auf Ihre Frage, aber dieses Problem so zu lösen, wie Sie es beabsichtigen, wird Ihnen in Zukunft überhaupt nicht helfen und es wird nicht in einer realen Anwendung verwendet werden.

Die Antwort ist subjektiv, aber meiner Meinung nach können Sie mit MVC, EF und Identity einen Neuanfang machen, es wird Sie die gleiche Zeit brauchen, um den richtigen Weg zu finden, was Sie jetzt tun wollen, aber es wird geben Sie Fähigkeiten, die Sie in Zukunft in einer Produktionsumgebung verwenden können, und auch Konzepte, die nicht nur auf ASP.NET beschränkt sind. Nimm die Lernkurve.

+0

Ich plane nicht arbeiten mit asp.net. Ich habe etwas von meinem Code auf dem Login geändert, um Benutzername, Passwort und jetzt Sicherheitsstufe mit Combobox zu authentifizieren. Wenn Sie also "foo OR 1 = 1" ohne Anführungszeichen eingeben, wird nichts in Benutzername und Passwort eingegeben. Aber ich sehe, woher du kommst und plane, in Zukunft mehr zu lernen, um Userdata besser zu sichern. Danke für Ihre Hilfe und Vorschläge. Ich werde den Link lesen. –

Verwandte Themen