接6.1

首先在~/Areas/Admin/Models文件夹添加管理员模型Administrator.cs

  1. using System.ComponentModel.DataAnnotations;
  2.  
  3. namespace Ninesky.Areas.Admin.Models
  4. {
  5. /// <summary>
  6. /// 管理员模型
  7. /// </summary>
  8. public class Administrator
  9. {
  10. [Key]
  11. public int AdministratorId { get; set; }
  12. [Display(Name = "系统账号")]
  13. [Required(ErrorMessage = "×")]
  14. public bool IsPreset { get; set; }
  15. [Display(Name="用户名",Description="(必填) 4-20个字符。")]
  16. [Required(ErrorMessage="×")]
  17. [StringLength(20,MinimumLength=4,ErrorMessage="×")]
  18. public string AdminName { get; set; }
  19. [Display(Name = "密码", Description = "(必填) 6-20个字符。")]
  20. [Required(ErrorMessage = "×")]
  21. [StringLength(256, MinimumLength = 6, ErrorMessage = "×")]
  22. public string PassWord { get; set; }
  23. [Display(Name = "姓名", Description = "填写姓名可以更容易识别管理员。")]
  24. [StringLength(20, ErrorMessage = "×")]
  25. public string Name { get; set; }
  26. [Display(Name = "电子邮件", Description = "(必填) 不多于255个字符。")]
  27. [Required(ErrorMessage = "×")]
  28. [EmailAddress()]
  29. [StringLength(256, ErrorMessage = "×")]
  30. public string Email { get; set; }
  31. }
  32. }

在~/Areas/Admin/Repository文件夹 添加接口IAdministrator(为的实现所谓的Repository模式)

接口中有管理员的添加、删除、修改、查找、验证等。基本上就这些差不多了。

  1. using Ninesky.Areas.Admin.Models;
  2. using System.Collections.Generic;
  3.  
  4. namespace Ninesky.Areas.Admin.Repository
  5. {
  6. public interface IAdministrator
  7. {
  8. /// <summary>
  9. /// 添加管理员
  10. /// </summary>
  11. /// <param name="admin">管理员</param>
  12. /// <returns></returns>
  13. bool Add(Administrator admin);
  14. /// <summary>
  15. /// 更改管理员信息
  16. /// </summary>
  17. /// <param name="admin">管理员</param>
  18. bool Modify(Administrator admin);
  19. /// <summary>
  20. /// 删除管理员
  21. /// </summary>
  22. /// <param name="adminId">管理员Id</param>
  23. bool Delete(int adminId);
  24. /// <summary>
  25. /// 删除管理员
  26. /// </summary>
  27. /// <param name="admin">管理员</param>
  28. bool Delete(Administrator admin);
  29. /// <summary>
  30. /// 验证管理员账号、密码【返回值-1此管理员不存在,0密码错误,1验证通过】
  31. /// </summary>
  32. /// <param name="adminName">用户名</param>
  33. /// <param name="passWord">密码【加密】</param>
  34. int Authentication(string userName, string passWord);
  35. /// <summary>
  36. /// 查找管理员
  37. /// </summary>
  38. /// <param name="adminId">管理员Id</param>
  39. Administrator Find(int adminId);
  40. /// <summary>
  41. /// 查找管理员
  42. /// </summary>
  43. /// <param name="adminName">管理员名称</param>
  44. /// <returns></returns>
  45. Administrator Find(string adminName);
  46. /// <summary>
  47. /// 查找全部管理员
  48. /// </summary>
  49. List<Administrator> Find();
  50. }
  51. }

再添加接口的实现类AdministratorRepository.cs

  1. using Ninesky.Areas.Admin.Models;
  2. using Ninesky.Repository;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5.  
  6. namespace Ninesky.Areas.Admin.Repository
  7. {
  8. public class AdministratorRepository:IAdministrator
  9. {
  10. private NineskyContext db;
  11. public bool Add(Administrator admin)
  12. {
  13. using (db = new NineskyContext())
  14. {
  15. if (db.Administrators.Any(a => a.AdminName == admin.AdminName)) return false;
  16. db.Administrators.Add(admin);
  17. return db.SaveChanges() > 0;
  18. }
  19.  
  20. }
  21. public int Authentication(string adminName, string passWord)
  22. {
  23. using (db = new NineskyContext())
  24. {
  25. if (db.Administrators.Any(a => a.AdminName == adminName))
  26. {
  27. var _admin = db.Administrators.SingleOrDefault(a => a.AdminName == adminName);
  28. if (_admin.PassWord == passWord) return 1;
  29. else return 0;
  30. }
  31. else return -1;
  32. }
  33. }
  34. public bool Delete(int adminId)
  35. {
  36. using (db = new NineskyContext())
  37. {
  38. db.Administrators.Remove(db.Administrators.SingleOrDefault(a => a.AdministratorId == adminId));
  39. return db.SaveChanges() > 0;
  40. }
  41. }
  42. public bool Delete(Administrator admin)
  43. {
  44. using (db = new NineskyContext())
  45. {
  46. db.Administrators.Remove(admin);
  47. return db.SaveChanges() > 0;
  48. }
  49. }
  50. public Administrator Find(int adminId)
  51. {
  52. using (db = new NineskyContext())
  53. {
  54. return db.Administrators.SingleOrDefault(a => a.AdministratorId == adminId);
  55. }
  56. }
  57. public Administrator Find(string adminName)
  58. {
  59. using (db = new NineskyContext())
  60. {
  61. return db.Administrators.SingleOrDefault(a => a.AdminName == adminName);
  62. }
  63. }
  64. public List<Administrator> Find()
  65. {
  66. using (db = new NineskyContext())
  67. {
  68. return db.Administrators.ToList();
  69. }
  70. }
  71. public bool Modify(Administrator admin)
  72. {
  73. using (db = new NineskyContext())
  74. {
  75. db.Administrators.Attach(admin);
  76. db.Entry<Administrator>(admin).State = System.Data.EntityState.Modified;
  77. return db.SaveChanges() > 0;
  78. }
  79. }
  80. }
  81. }

在~/Areas/Admin/Controllers文件夹添加管理员控制器【AdministratorController】

  1. using Ninesky.Areas.Admin.Extensions;
  2. using Ninesky.Areas.Admin.Models;
  3. using Ninesky.Areas.Admin.Repository;
  4. using Ninesky.Models;
  5. using System.Linq;
  6. using System.Web.Mvc;
  7.  
  8. namespace Ninesky.Areas.Admin.Controllers
  9. {
  10. public class AdministratorController : Controller
  11. {
  12. private IAdministrator adminRsy;
  13. public AdministratorController()
  14. {
  15. adminRsy = new AdministratorRepository();
  16. }
  1. }
  1. }

这里用Repository模式。其实就是先声明接口IAdministrator adminRsy,然后在初始化函数中具体实例化(new AdministratorRepository(); )。

为了方便使用,再写两个静态变量AdminName与AdminInfo。

AdminName—获取设置登录的管理员名称

AdminInfo—获取登录的管理员信息。

代码如下:

  1. #region 静态属性
  2. /// <summary>
  3. /// 管理员登录名
  4. /// </summary>
  5. public static string AdminName
  6. {
  7. get
  8. {
  9. string _adminName = string.Empty;
  10. if (System.Web.HttpContext.Current.Session["AdminName"] != null) _adminName = System.Web.HttpContext.Current.Session["AdminName"].ToString();
  11. return _adminName;
  12. }
  13. set
  14. {
  15. if (string.IsNullOrEmpty(value)) System.Web.HttpContext.Current.Session.Remove("AdminName");
  16. else
  17. {
  18. System.Web.HttpContext.Current.Session.Timeout = 60;
  19. System.Web.HttpContext.Current.Session.Add("AdminName", value);
  20. }
  21. }
  22. }
  23. /// <summary>
  24. /// 管理员信息
  25. /// </summary>
  26. public static Administrator AdminInfo
  27. {
  28. get
  29. {
  30. AdministratorRepository _adminRsy = new AdministratorRepository();
  31. return _adminRsy.Find(AdministratorController.AdminName);
  32. }
  33. }
  34. #endregion
  35. }

再写一个管理员是否登录的Attribute。

这个比较简单,继承自AuthorizeAttribute。需要重写两个函数:

1、AuthorizeCore函数,通过检查AdminName属性是否为空,来判断管理员是否登录。

2、HandleUnauthorizedRequest函数,失败后跳转到的页面。

先在~/Areas/Admin/添加Extensions文件夹,然后在文件夹内添加类AdminAuthorizeAttribute.cs。内容如下:

  1. using Ninesky.Areas.Admin.Controllers;
  2. using System.Web;
  3. using System.Web.Mvc;
  4. using System.Web.Routing;
  5.  
  6. namespace Ninesky.Areas.Admin.Extensions
  7. {
  8. /// <summary>
  9. /// 管理员权限验证
  10. /// </summary>
  11. public class AdminAuthorizeAttribute:AuthorizeAttribute
  12. {
  13. protected override bool AuthorizeCore(HttpContextBase httpContext)
  14. {
  15. if (string.IsNullOrEmpty(AdministratorController.AdminName)) return false;
  16. else return true;
  17. }
  18. protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
  19. {
  20. filterContext.Result = new RedirectToRouteResult("Admin_default", new RouteValueDictionary(new { controller = "Administrator", action = "Login" }));
  21. }
  22. }
  23. }

 

到这差不多了,明天具体写Controller和view。 待续!

学用MVC4做网站六后台管理:6.1管理员(续)的更多相关文章

  1. 学用MVC4做网站六:后台管理(续)

    关于后台的说明: 后台将会用easyui + ajax模式. 这里涉及两个问题,一个是使用easyui如何在前台验证模型的问题,另一个是ajax提交后返回数据. 一.Easyui验证 前台验证采用ea ...

  2. 学用MVC4做网站六后台管理:6.1.3管理员修改密码

    6.1.3修改密码 需要两个action.一个是点击修改密码的链接要显示修改密码的分部视图(对话框形式):另一个是提交的处理action. 1.打开[AdministratorController]添 ...

  3. 学用MVC4做网站六后台管理:6.1.1管理员登录、6.1.2退出

    1.管理员登录 在6.1中已添加控制器[AdministratorController] 在控制器中添加[Login()]action,用来显示登录页面 /// <summary> /// ...

  4. MVC4做网站六后台管理:6.2网站信息设置

    用来实现网站标题.名称.关键字.描述.版权等信息的设置. 模型字段: 网站的设置信息前后台都要用到,所以要把模型方式Ninesky/Models文件夹中,代码如下: ///////////////// ...

  5. MVC4做网站六后台管理:6.1.4管理员列表、添加及删除

    一.管理员列表 1.首先[AdministratorController]中添加返回分部视图的public PartialViewResult Index() /// <summary> ...

  6. 慕学在线网0.4_xadmin后台管理

    admin是基于Django开发的后台管理框架,方便,快捷,而且简单: 而xadmin就相当于admin的升级版,更加强大. 1.安装xadmin(源码安装方式) 教程 PS: - 卸载pip安装的x ...

  7. Django(四) 后台管理:创建管理员、注册模型类、自定义管理页面显示内容

    后台管理 第1步.本地化:设置语言.时区 修改project1/settings.py #LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-hans' #设置语言 ...

  8. MVC4做网站后台:用户管理 —用户

    这块进行用户管理,可以浏览.查询已注册的用户,修改用户资料,删除用户等.没有做添加用户,不知是否必要.列表页还是使用easyui的datagrid.这个思路跟用户组的方式差不多. 1.接口Interf ...

  9. MVC4做网站后台:用户管理 ——用户组 2、查看、修改、删除用户组

    查看用户组资料和修改用户组资料结合在一起,在用户组列表双击查看用户组资料,修改资料点保存可以保存用户组,点删除可以删除用户组. 先在UserGroupController中添加 action publ ...

随机推荐

  1. iOS8中定位服务的变化(CLLocationManager协议方法不响应,无法回掉GPS方法,不出现获取权限提示)

    最近在写一个LBS的项目的时候,因为考虑到适配iOS8,就将项目迁移到Xcode6.0.1上,出现了不能正常获取定位服务权限的问题. self.manger = [[CLLocationManager ...

  2. Javascript外部对象

    Window 浏览器: - location:地址 - history:历史 - Document:文档 - screen:窗口 - navigator:帮助 > 1.外部对象就是浏览器提供的A ...

  3. 【noip】noip201503求和(市赛后公布)

    3. 求和 难度级别:B: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 题目描述   一条狭长的纸带被均匀划分出了n个格子,格子编号从1到n.每个格子 ...

  4. JQuery之$.ajaxPOST数据

    function postSimpleData() { $.ajax({ type: "POST", url: "/Service/SimpleData", c ...

  5. 执行jar文件生成pdf报错,Unsupported URL <file:///home

    java -Djava.library.path=/usr/local/lib/ruby/gems/1.8/gems/sharp_office-1.0.1/ext/sigar -jar /usr/lo ...

  6. 剑指offer编程题java实现(正在更新)

    面试题三:查找二维数组中元素问题 public static void main(String[] args){ int[][] num = {{1,2,8,9},{2,4,9,12},{4,7,10 ...

  7. winform设置文本框宽度 根据文字数量和字体返回宽度

    _LinkLabel.Width = TextRenderer.MeasureText(_LinkLabel.Text, _LinkLabel.Font).Width;

  8. 安装jdk

    检查已安装jdk,如果有,先删除 rpm -qa|grep java rpm -e --nodeps filename 从oracle官方网站下载jdk安装包:jdk-8u111-linux-x64. ...

  9. ABP理论学习之EntityFramework集成

    返回总目录 本篇目录 Nuget包 创建DbContext 仓储 仓储基类 实现仓储 自定义仓储方法 阅读其他 ABP可以使用任何ORM框架工作,并且已经内置了EntityFramework集成.这篇 ...

  10. HTML5- Canvas入门(二)

    上篇文章我们了解了canvas的定义.获取和基础的绘图操作,其中的绘图功能我们讲解了线段绘制.上色.描边等方面知识点. 今天我们来讲讲矩形(Rectangle)和多边形的绘制. 矩形的绘制一共有两个口 ...