2017-07-09 18 views
1

PRE 我使用的SQLExpress來存儲信息。如何檢查當前登錄的用戶安全級別,以便禁用功能?

我有我的應用程序一個非常基本的用戶設置。我有一個登錄表,只包含三個字段,分別是用戶名,密碼和安全級別。只有三個安全級別;高,中,低。

在我的登錄表單,我有下面的代碼保存被登錄到Settings.Default[]用戶,所以我以後可以讀取它。

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); 
    } 
} 

然後在主頁上,我有以下代碼來獲取值並在底部狀態欄中顯示當前登錄用戶。在頁面加載。

//Identify and display current logged in user 

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

我想做些什麼現在能夠做的是檢查用戶的安全級別進行記錄(用戶價值將主窗體保存在這裏「CurrentUser.Caption」)目前並能夠禁用像創建一個功能新用戶等

因此,我需要能夠讀取CurrentUser.Caption值,檢查對(SQL Express)[dbo]。[登錄]表,並根據結果查找用戶的安全級別和限制功能。

任何幫助,將不勝感激。

感謝

菲爾

+0

你知道如何從數據表'dt'檢索值嗎?如果是,那麼您應該從表中檢索SecurityLevel的值並將其存儲在默認設置中,並在任何需要的地方使用它。 –

+0

恐怕我還在學習。我將嘗試在登錄時取消安全值而不是主窗體,並將其顯示在用戶名旁邊的狀態欄上,然後對其進行調整。但我想我一直在考慮從特定用戶的數據庫中檢索該信息所需的代碼。我可以改變登錄按鈕代碼來拉這個值嗎?並將其設置爲默認設置? –

+0

是的...你可以做到這一點。 –

回答

0

您是否在尋找

SELECT CURRENT_USER; 

SELECT SUSER_NAME(); 

,並與表中的記錄檢查?

1

你基本上是在實現用戶的WebForms認證和授權。 「富OR 1 = 1」:

會在你的情況下,如果用戶鍵入下面的字符串輸入用戶名和密碼(不帶引號)發生什麼事?您不得連接數據庫CRUID操作中的字符串以防止SQL注入。

我會建議你使用FormsAuthentication和含有用戶角色加密的門票,而不是明文存儲密碼,甚至加密,但使用PBKDF2和加密鹽,而商店哈希值。但是你可能不關心生產環境,這可能只是一個學習的例子。在這種情況下,您仍然不想練習在實際應用程序中永遠不會使用的內容,即將用戶控件的值與存儲在表中的權限進行匹配。可以在客戶端(瀏覽器)更改值並欺騙系統。

獲取與FormsAuthentication夾具和使用User.Identity.IsInRole將是一個方式來進行,你可以檢查這個微軟文檔教程之一:https://support.microsoft.com/en-us/help/301240/how-to-implement-forms-based-authentication-in-your-asp.net-applicatio

我想你想獲得行業有效的技能實現認證和在asp.net網絡環境中進行授權。如果這是你問題背後的目標,那麼很可能需要你花時間學習所有這些,同時你需要學習asp.net標識,它可以爲你處理很多事情。

在這兩種情況下它會帶你很長的時間來開發你的應用程序,而無需使用實體框架,除非您使用Identity你必須去實現自己的安全特性,特別是高品質的一個很長的路要走。相信我,我一直在那裏,做到了。

將會有一個學習曲線,但前進的最好方法是使用EF爲您節省大量時間,還ASP.NET身份爲現今相關的技能,也爲您節省大量時間。值得比較Web窗體和MVC,MVC是動態全功能現代應用程序的更好選擇。

我希望能有一個簡單的回答你的問題,但解決這一問題,你打算的方式不會幫助你在所有的未來,它不會在實際應用中使用。

答案是主觀的,但在我看來,你可以重新開始使用MVC,EF和Identity,它需要你花時間學習正確的方式來做你現在打算做的事情,但它會爲您提供未來可以在生產環境中使用的技能,而且概念不僅限於ASP.NET。學習曲線。

+0

我不打算使用asp.net進行工作。我已經修改了一些我的代碼在登錄上使用組合框驗證用戶名,密碼和現在的安全級別。所以輸入「foo OR 1 = 1」而不用引號時,輸入用戶名和密碼時不會執行任何操作。但我確實看到你的來源,並計劃在未來學習更多,以更好地保護用戶數據。感謝您的幫助和建議。我會通讀鏈接。 –

相關問題