ASP.NET MVC+EF框架+EasyUI實現權限管理系列(15)-用戶登錄詳細錯誤和權限數據庫模型設計


    ASP.NET MVC+EF框架+EasyUI實現權限管系列

  (開篇)   (1):框架搭建    (2):數據庫訪問層的設計Demo    (3):面向接口編程   (4 ):業務邏輯層的封裝 

    (5):前台Jquery easyUI實現    (6):EF上下文實例管理    (7):DBSession的封裝   (8):DBSession線程內唯一  

    (9):TT摸版的學習    (10):VSS源代碼管理   (11):驗證碼實現和底層修改  (12):實現用戶異步登錄和T4模板

    (13):權限設計  (14):主框架搭建   

   前言:已經很長一段時間沒有寫博客了,自從五一放假出去玩了一圈之后,回來就一直沒有心情,在這公司的事情也比較多,所以一直就沒有寫,現在我繼續開始寫我的這個系列,我一定要寫完這個系列,他一直在我的心里,所以我必須努力地寫完它,不能前功盡棄,前面我們已經寫了很多東西了,這篇博客我們開始講述標題上面的這些東西,下面我就進行詳細的描述。

1. 用戶登錄詳細錯誤顯示

  (1)首先我在前面的博客中本來已經實現了登錄信息的,但是就是說我登錄的時候如果寫錯用戶名或者密碼都會直接輸出用戶名密碼錯誤,而不會詳細的輸出錯誤信息,比如:用戶名輸入錯誤提示用戶名錯誤,密碼輸入錯誤提示密碼錯誤,當然現在我發現各大網站很少會有這樣的需求,但是有人在我的博客上面留言了說怎么實現這個功能,我覺得就是需求,所以下面我們來講述一下怎么能夠詳細的判斷用戶輸入的信息那個是錯的。

  (2)如果我們不詳細判斷用戶名密碼輸入錯誤的話,我們的SQL語句我相信大家都會寫,就是判斷用戶名和密碼是否等於輸入的密碼,如果想等則登錄成功,負責失敗,這是我前面的思路,下面我說一下顯示錯誤的詳細信息的思路。

2. 詳細錯誤信息的實現

  (1)首先我們要在公共類庫里面添加一個枚舉類型來列舉出現的錯誤信息,代碼如下:

 1 namespace LYZJ.UserLimitMVC.Common
 2 
 3 {
 4 
 5     /// <summary>
 6 
 7     /// 枚舉出當用戶登錄的時候出現的各種錯誤
 8 
 9     /// </summary>
10 
11     public enum LoginResult
12 
13     {
14 
15         PwdError,       //密碼錯誤
16 
17         UserNotExist,   //用戶不存在
18 
19         UserIsNull,     //用戶名為空
20 
21         PwdIsNUll,      //密碼為空
22 
23         OK,             //登錄成功
24 
25     }
26 
27 }

  (2)然后我們就要去業務邏輯層去修改實現業務的代碼,在這里我們將改掉我們以前定義的一些方法。代碼如下:

 1   //完成了對用戶的校驗
 2 
 3         public LoginResult CheckUserInfo(BaseUser userInfo)
 4 
 5         {
 6 
 7             //首先判斷用戶名,密碼是否為空
 8 
 9             if (string.IsNullOrEmpty(userInfo.UserName))
10 
11             {
12 
13                 return LoginResult.UserIsNull;
14 
15             }
16 
17             if (string.IsNullOrEmpty(userInfo.UserPassword))
18 
19             {
20 
21                 return LoginResult.PwdIsNUll;
22 
23             }
24 
25             //如果不為空的話則去數據庫中查詢信息
26 
27             //在這里會去數據庫檢查是否有數據,如果沒有的話就會返回一個空值
28 
29             var LoginUserInfoCheck = _DbSession.BaseUserRepository.LoadEntities(u => u.UserName == userInfo.UserName).FirstOrDefault();
30 
31             //對返回的結果進行判斷
32 
33             if (LoginUserInfoCheck == null)
34 
35             {
36 
37                 return LoginResult.UserNotExist;
38 
39             }
40 
41             if (LoginUserInfoCheck.UserPassword != userInfo.UserPassword)
42 
43             {
44 
45                 return LoginResult.PwdError;
46 
47             }
48 
49             else
50 
51             {
52 
53                 return LoginResult.OK;
54 
55             }
56 
57         }

  (3)我在代碼中寫了詳細的注釋,如果大家不太懂得話,可以給我留言或者直接加我的QQ群來詢問我,我就在這里不解釋了。

  (4)當我們將上面的兩步進行完成之后,我們就可以去登錄的控制其LoginController中書寫判斷登錄頁面信息是否正確的代碼,因為代碼里面我都寫了非常詳細的說明,所以我這里就不詳細的說明了,代碼如下:

  1 //判斷用戶輸入的信息是否正確
  2 
  3        // [HttpPost]
  4 
  5         public ActionResult CheckUserInfo(string UserName, BaseUser userInfo, string Code)
  6 
  7         {
  8 
  9             //首先我們拿到系統的驗證碼
 10 
 11             string sessionCode = this.TempData["ValidateCode"] == null
 12 
 13                                      ? new Guid().ToString()
 14 
 15                                      : this.TempData["ValidateCode"].ToString();
 16 
 17             //然后我們就將驗證碼去掉,避免了暴力破解
 18 
 19             this.TempData["ValidateCode"] = new Guid();
 20 
 21             //判斷用戶輸入的驗證碼是否正確
 22 
 23             if (sessionCode != Code)
 24 
 25             {
 26 
 27                 return Content("驗證碼輸入不正確");
 28 
 29             }
 30 
 31             //調用業務邏輯層(BLL)去校驗用戶是否正確,,,定義變量存取獲取到的用戶的錯誤信息
 32 
 33             string UserInfoError = "";
 34 
 35             var loginUserInfo = _userInfoService.CheckUserInfo(userInfo);
 36 
 37             switch (loginUserInfo)
 38 
 39             {
 40 
 41                 case LoginResult.PwdError:
 42 
 43                     UserInfoError = "密碼輸入錯誤";
 44 
 45                     break;
 46 
 47                 case LoginResult.UserNotExist:
 48 
 49                     UserInfoError = "用戶名輸入錯誤";
 50 
 51                     break;
 52 
 53                 case LoginResult.UserIsNull:
 54 
 55                     UserInfoError = "用戶名不能為空";
 56 
 57                     break;
 58 
 59                 case LoginResult.PwdIsNUll:
 60 
 61                     UserInfoError = "密碼不能為空";
 62 
 63                     break;
 64 
 65                 case LoginResult.OK:
 66 
 67                     UserInfoError = "OK";
 68 
 69                     break;
 70 
 71                 default:
 72 
 73                     UserInfoError = "未知錯誤,請您檢查您的數據庫";
 74 
 75                     break;
 76 
 77             }
 78 
 79             #region ----使用if else來判斷信息----
 80 
 81             //if (loginUserInfo == LoginResult.UserIsNull)
 82 
 83             //{
 84 
 85             //    UserInfoError = "用戶名不能為空";
 86 
 87             //}
 88 
 89             //else if (loginUserInfo == LoginResult.PwdIsNUll)
 90 
 91             //{
 92 
 93             //    UserInfoError = "密碼不能為空";
 94 
 95             //}
 96 
 97             //else if (loginUserInfo == LoginResult.UserNotExist)
 98 
 99             //{
100 
101             //    UserInfoError = "用戶名輸入錯誤";
102 
103             //}
104 
105             //else if (loginUserInfo == LoginResult.PwdError)
106 
107             //{
108 
109             //    UserInfoError = "密碼輸入錯誤";
110 
111             //}
112 
113             //else if (loginUserInfo == LoginResult.OK)
114 
115             //{
116 
117             //    UserInfoError = "OK";
118 
119             //}
120 
121             //else
122 
123             //{
124 
125             //    UserInfoError = "未知錯誤,請您檢查您的數據庫";
126 
127             //}
128 
129             #endregion
130 
131             return Content(UserInfoError);
132 
133         }

  (5)這樣我們上面的那個需求算是完成了,下面我們看一下效果圖,不要震驚。

         

    

  (6)這樣我們就完成用戶名密碼輸入錯誤的詳細顯示,如果大家不懂得話,可以聯系我或者給我留言,或者直接去我的網站www.kencery.com下面找到MVC權限系統下面的博客留言,一般都會在當天解決。

3. 權限數據庫模型介紹

  (1)本來我前面設計了一個簡單的數據庫,但是后來吉日嘎啦給了我他的權限系統的數據庫信息,所以我分析了一段時間之后將我的數據庫模型改成他的模型,但是大致的思路還是不變的,因為權限的關系也就那樣了,所以我在以前的基礎上面加了很多限制的字段,也就是說為了項目的可擴展性吧,模型如圖所示:

   

  (2)上面就是我最新的數據庫權限模型的設計圖紙,至於字段都是什么意思,大致看一下,如圖所示:

   

  (3)如上圖信息,數據庫就是這樣設計的,數據庫我就不外發了,由於不是我自己的東西,所以希望大家理解,今天的東西我就寫到這里了,明天我們繼續寫我們前台的一些實現。

4.小結

  (1)從底層搭建完畢之后,我覺得要在詳細的寫前台的東西感覺不太可能,重點是前台太多太亂,所以我也只是大致的把一些東西列舉出來並且有一些難點的話我會詳細的來說明的,讓我們把項目修改完成以后,然后我們將項目上傳之后即可。

  Kencery返回本系列開篇

 

源碼下載

 

   (1):完整源碼下載

 

                    

相信自己,你就是下一個奇跡!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM