原文: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模板
前言:已经很长一段时间没有写博客了,自从五一放假出去玩了一圈之后,回来就一直没有心情,在这公司的事情也比较多,所以一直就没有写,现在我继续开始写我的这个系列,我一定要写完这个系列,他一直在我的心里,所以我必须努力地写完它,不能前功尽弃,前面我们已经写了很多东西了,这篇博客我们开始讲述标题上面的这些东西,下面我就进行详细的描述。
1. 用户登录详细错误显示
(1)首先我在前面的博客中本来已经实现了登录信息的,但是就是说我登录的时候如果写错用户名或者密码都会直接输出用户名密码错误,而不会详细的输出错误信息,比如:用户名输入错误提示用户名错误,密码输入错误提示密码错误,当然现在我发现各大网站很少会有这样的需求,但是有人在我的博客上面留言了说怎么实现这个功能,我觉得就是需求,所以下面我们来讲述一下怎么能够详细的判断用户输入的信息那个是错的。
(2)如果我们不详细判断用户名密码输入错误的话,我们的SQL语句我相信大家都会写,就是判断用户名和密码是否等于输入的密码,如果想等则登录成功,负责失败,这是我前面的思路,下面我说一下显示错误的详细信息的思路。
2. 详细错误信息的实现
(1)首先我们要在公共类库里面添加一个枚举类型来列举出现的错误信息,代码如下:
namespace LYZJ.UserLimitMVC.Common { /// <summary> /// 枚举出当用户登录的时候出现的各种错误 /// </summary> public enum LoginResult { PwdError, //密码错误 UserNotExist, //用户不存在 UserIsNull, //用户名为空 PwdIsNUll, //密码为空 OK, //登录成功 } }
(2)然后我们就要去业务逻辑层去修改实现业务的代码,在这里我们将改掉我们以前定义的一些方法。代码如下:
//完成了对用户的校验 public LoginResult CheckUserInfo(BaseUser userInfo) { //首先判断用户名,密码是否为空 if (string.IsNullOrEmpty(userInfo.UserName)) { return LoginResult.UserIsNull; } if (string.IsNullOrEmpty(userInfo.UserPassword)) { return LoginResult.PwdIsNUll; } //如果不为空的话则去数据库中查询信息 //在这里会去数据库检查是否有数据,如果没有的话就会返回一个空值 var LoginUserInfoCheck = _DbSession.BaseUserRepository.LoadEntities(u => u.UserName == userInfo.UserName).FirstOrDefault(); //对返回的结果进行判断 if (LoginUserInfoCheck == null) { return LoginResult.UserNotExist; } if (LoginUserInfoCheck.UserPassword != userInfo.UserPassword) { return LoginResult.PwdError; } else { return LoginResult.OK; } }
(3)我在代码中写了详细的注释,如果大家不太懂得话,可以给我留言或者直接加我的QQ群来询问我,我就在这里不解释了。
(4)当我们将上面的两步进行完成之后,我们就可以去登录的控制其LoginController中书写判断登录页面信息是否正确的代码,因为代码里面我都写了非常详细的说明,所以我这里就不详细的说明了,代码如下:
//判断用户输入的信息是否正确 // [HttpPost] public ActionResult CheckUserInfo(string UserName, BaseUser userInfo, string Code) { //首先我们拿到系统的验证码 string sessionCode = this.TempData["ValidateCode"] == null ? new Guid().ToString() : this.TempData["ValidateCode"].ToString(); //然后我们就将验证码去掉,避免了暴力破解 this.TempData["ValidateCode"] = new Guid(); //判断用户输入的验证码是否正确 if (sessionCode != Code) { return Content("验证码输入不正确"); } //调用业务逻辑层(BLL)去校验用户是否正确,,,定义变量存取获取到的用户的错误信息 string UserInfoError = ""; var loginUserInfo = _userInfoService.CheckUserInfo(userInfo); switch (loginUserInfo) { case LoginResult.PwdError: UserInfoError = "密码输入错误"; break; case LoginResult.UserNotExist: UserInfoError = "用户名输入错误"; break; case LoginResult.UserIsNull: UserInfoError = "用户名不能为空"; break; case LoginResult.PwdIsNUll: UserInfoError = "密码不能为空"; break; case LoginResult.OK: UserInfoError = "OK"; break; default: UserInfoError = "未知错误,请您检查您的数据库"; break; } #region ----使用if else来判断信息---- //if (loginUserInfo == LoginResult.UserIsNull) //{ // UserInfoError = "用户名不能为空"; //} //else if (loginUserInfo == LoginResult.PwdIsNUll) //{ // UserInfoError = "密码不能为空"; //} //else if (loginUserInfo == LoginResult.UserNotExist) //{ // UserInfoError = "用户名输入错误"; //} //else if (loginUserInfo == LoginResult.PwdError) //{ // UserInfoError = "密码输入错误"; //} //else if (loginUserInfo == LoginResult.OK) //{ // UserInfoError = "OK"; //} //else //{ // UserInfoError = "未知错误,请您检查您的数据库"; //} #endregion return Content(UserInfoError); }
(5)这样我们上面的那个需求算是完成了,下面我们看一下效果图,不要震惊。
(6)这样我们就完成用户名密码输入错误的详细显示,如果大家不懂得话,可以联系我或者给我留言,或者直接去我的网站www.kencery.com下面找到MVC权限系统下面的博客留言,一般都会在当天解决。
3. 权限数据库模型介绍
(1)本来我前面设计了一个简单的数据库,但是后来吉日嘎啦给了我他的权限系统的数据库信息,所以我分析了一段时间之后将我的数据库模型改成他的模型,但是大致的思路还是不变的,因为权限的关系也就那样了,所以我在以前的基础上面加了很多限制的字段,也就是说为了项目的可扩展性吧,模型如图所示:
(2)上面就是我最新的数据库权限模型的设计图纸,至于字段都是什么意思,大致看一下,如图所示:
(3)如上图信息,数据库就是这样设计的,数据库我就不外发了,由于不是我自己的东西,所以希望大家理解,今天的东西我就写到这里了,明天我们继续写我们前台的一些实现。
4.小结
(1)从底层搭建完毕之后,我觉得要在详细的写前台的东西感觉不太可能,重点是前台太多太乱,所以我也只是大致的把一些东西列举出来并且有一些难点的话我会详细的来说明的,让我们把项目修改完成以后,然后我们将项目上传之后即可。
Kencery返回本系列开篇
相信自己,你就是下一个奇迹!