ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计

简介: 原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(15)-用户登录详细错误和权限数据库模型设计    ASP.NET MVC+EF框架+EasyUI实现权限管系列   (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (...
原文: 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月前
|
SQL 数据库连接 数据库
你不知道ADo.Net中操作数据库的步骤【超详细整理】
你不知道ADo.Net中操作数据库的步骤【超详细整理】
16 0
|
1月前
|
SQL 数据库 C#
C# .NET面试系列十一:数据库SQL查询(附建表语句)
#### 第1题 用一条 SQL 语句 查询出每门课都大于80 分的学生姓名 建表语句: ```sql create table tableA ( name varchar(10), kecheng varchar(10), fenshu int(11) ) DEFAULT CHARSET = 'utf8'; ``` 插入数据 ```sql insert into tableA values ('张三', '语文', 81); insert into tableA values ('张三', '数学', 75); insert into tableA values ('李四',
65 2
C# .NET面试系列十一:数据库SQL查询(附建表语句)
|
2月前
|
开发框架 Oracle 关系型数据库
ASP.NET实验室LIS系统源码 Oracle数据库
LIS是HIS的一个组成部分,通过与HIS的无缝连接可以共享HIS中的信息资源,使检验科能与门诊部、住院部、财务科和临床科室等全院各部门之间协同工作。 
37 4
|
3月前
|
存储 NoSQL API
一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库
一个小巧、快速、轻量级的 .NET NoSQL 嵌入式数据库
137 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
41 0
|
1天前
|
前端开发 Java PHP
信息系统架构模型(1) MVC
信息系统架构模型(1) MVC
4 0
|
1月前
|
设计模式 前端开发 数据处理
MVC架构中,控制器和模型之间是如何交互的
MVC架构中,控制器和模型之间是如何交互的
10 0
|
1月前
|
存储 设计模式 前端开发
请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
【2月更文挑战第26天】【2月更文挑战第89篇】请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
|
1月前
|
SQL 存储 关系型数据库
C# .NET面试系列十:数据库概念知识
#### 1. 为什么要一定要设置主键? 设置主键是数据库设计中的一个重要概念,有几个主要原因: 1、唯一性 ```c# 主键必须保证表中的每一行都有唯一的标识。这样可以避免数据冗余和不一致性。如果没有主键或者主键不唯一,就可能出现数据混乱或错误。 ``` 2、查询性能 ```c# 数据库系统通常会使用主键来加速数据检索。主键通常会被索引,这样可以更快速地找到特定行的数据,提高查询效率。 ``` 3、关联性 ```c# 主键常常用于建立表与表之间的关系。在关系数据库中,一个表的主键通常与其他表中的外键建立关联,这种关系对于数据的一致性和完整性非常重要。 ``` 4、数据完
131 1
C# .NET面试系列十:数据库概念知识
|
3月前
|
关系型数据库 MySQL 数据库
Net Core备份MySQL数据库
Net Core备份MySQL数据库
31 2