接6.1

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

using System.ComponentModel.DataAnnotations;

namespace Ninesky.Areas.Admin.Models
{
/// <summary>
/// 管理员模型
/// </summary>
public class Administrator
{
[Key]
public int AdministratorId { get; set; }
[Display(Name = "系统账号")]
[Required(ErrorMessage = "×")]
public bool IsPreset { get; set; }
[Display(Name="用户名",Description="(必填) 4-20个字符。")]
[Required(ErrorMessage="×")]
[StringLength(20,MinimumLength=4,ErrorMessage="×")]
public string AdminName { get; set; }
[Display(Name = "密码", Description = "(必填) 6-20个字符。")]
[Required(ErrorMessage = "×")]
[StringLength(256, MinimumLength = 6, ErrorMessage = "×")]
public string PassWord { get; set; }
[Display(Name = "姓名", Description = "填写姓名可以更容易识别管理员。")]
[StringLength(20, ErrorMessage = "×")]
public string Name { get; set; }
[Display(Name = "电子邮件", Description = "(必填) 不多于255个字符。")]
[Required(ErrorMessage = "×")]
[EmailAddress()]
[StringLength(256, ErrorMessage = "×")]
public string Email { get; set; }
}
}

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

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

using Ninesky.Areas.Admin.Models;
using System.Collections.Generic; namespace Ninesky.Areas.Admin.Repository
{
public interface IAdministrator
{
/// <summary>
/// 添加管理员
/// </summary>
/// <param name="admin">管理员</param>
/// <returns></returns>
bool Add(Administrator admin);
/// <summary>
/// 更改管理员信息
/// </summary>
/// <param name="admin">管理员</param>
bool Modify(Administrator admin);
/// <summary>
/// 删除管理员
/// </summary>
/// <param name="adminId">管理员Id</param>
bool Delete(int adminId);
/// <summary>
/// 删除管理员
/// </summary>
/// <param name="admin">管理员</param>
bool Delete(Administrator admin);
/// <summary>
/// 验证管理员账号、密码【返回值-1此管理员不存在,0密码错误,1验证通过】
/// </summary>
/// <param name="adminName">用户名</param>
/// <param name="passWord">密码【加密】</param>
int Authentication(string userName, string passWord);
/// <summary>
/// 查找管理员
/// </summary>
/// <param name="adminId">管理员Id</param>
Administrator Find(int adminId);
/// <summary>
/// 查找管理员
/// </summary>
/// <param name="adminName">管理员名称</param>
/// <returns></returns>
Administrator Find(string adminName);
/// <summary>
/// 查找全部管理员
/// </summary>
List<Administrator> Find();
}
}

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

using Ninesky.Areas.Admin.Models;
using Ninesky.Repository;
using System.Collections.Generic;
using System.Linq; namespace Ninesky.Areas.Admin.Repository
{
public class AdministratorRepository:IAdministrator
{
private NineskyContext db;
public bool Add(Administrator admin)
{
using (db = new NineskyContext())
{
if (db.Administrators.Any(a => a.AdminName == admin.AdminName)) return false;
db.Administrators.Add(admin);
return db.SaveChanges() > 0;
} }
public int Authentication(string adminName, string passWord)
{
using (db = new NineskyContext())
{
if (db.Administrators.Any(a => a.AdminName == adminName))
{
var _admin = db.Administrators.SingleOrDefault(a => a.AdminName == adminName);
if (_admin.PassWord == passWord) return 1;
else return 0;
}
else return -1;
}
}
public bool Delete(int adminId)
{
using (db = new NineskyContext())
{
db.Administrators.Remove(db.Administrators.SingleOrDefault(a => a.AdministratorId == adminId));
return db.SaveChanges() > 0;
}
}
public bool Delete(Administrator admin)
{
using (db = new NineskyContext())
{
db.Administrators.Remove(admin);
return db.SaveChanges() > 0;
}
}
public Administrator Find(int adminId)
{
using (db = new NineskyContext())
{
return db.Administrators.SingleOrDefault(a => a.AdministratorId == adminId);
}
}
public Administrator Find(string adminName)
{
using (db = new NineskyContext())
{
return db.Administrators.SingleOrDefault(a => a.AdminName == adminName);
}
}
public List<Administrator> Find()
{
using (db = new NineskyContext())
{
return db.Administrators.ToList();
}
}
public bool Modify(Administrator admin)
{
using (db = new NineskyContext())
{
db.Administrators.Attach(admin);
db.Entry<Administrator>(admin).State = System.Data.EntityState.Modified;
return db.SaveChanges() > 0;
}
}
}
}

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

using Ninesky.Areas.Admin.Extensions;
using Ninesky.Areas.Admin.Models;
using Ninesky.Areas.Admin.Repository;
using Ninesky.Models;
using System.Linq;
using System.Web.Mvc; namespace Ninesky.Areas.Admin.Controllers
{
public class AdministratorController : Controller
{
private IAdministrator adminRsy;
public AdministratorController()
{
adminRsy = new AdministratorRepository();
}
}
}

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

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

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

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

代码如下:

#region 静态属性
/// <summary>
/// 管理员登录名
/// </summary>
public static string AdminName
{
get
{
string _adminName = string.Empty;
if (System.Web.HttpContext.Current.Session["AdminName"] != null) _adminName = System.Web.HttpContext.Current.Session["AdminName"].ToString();
return _adminName;
}
set
{
if (string.IsNullOrEmpty(value)) System.Web.HttpContext.Current.Session.Remove("AdminName");
else
{
System.Web.HttpContext.Current.Session.Timeout = 60;
System.Web.HttpContext.Current.Session.Add("AdminName", value);
}
}
}
/// <summary>
/// 管理员信息
/// </summary>
public static Administrator AdminInfo
{
get
{
AdministratorRepository _adminRsy = new AdministratorRepository();
return _adminRsy.Find(AdministratorController.AdminName);
}
}
#endregion
}

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

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

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

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

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

using Ninesky.Areas.Admin.Controllers;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing; namespace Ninesky.Areas.Admin.Extensions
{
/// <summary>
/// 管理员权限验证
/// </summary>
public class AdminAuthorizeAttribute:AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (string.IsNullOrEmpty(AdministratorController.AdminName)) return false;
else return true;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectToRouteResult("Admin_default", new RouteValueDictionary(new { controller = "Administrator", action = "Login" }));
}
}
}

 

到这差不多了,明天具体写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. [基础技能] 安全技术——哈希算法密码破解之彩虹表(Rainbow Table)学习

    1.基础知识 刚刚学习过数字签名的相关知识,以及数字签名的伪造技术,而伪造数字签名归根结底就是密码破解的一个过程,然而直接破解的速度是非常缓慢的,所以有人想出一种办法,直接建立出一个数据文件,里面事先 ...

  2. Ajax跨域问题的两种解决方法

    浏览器不允许Ajax跨站请求,所以存在Ajax跨域问题,目前主要有两种办法解决. 1.在请求页面上使用Access-Control-Allow-Origin标头. 使用如下标头可以接受全部网站请求: ...

  3. 弱省互测#0 t2

    题意 给定两个字符串 A 和 B,求下面四个问题的答案: 1.在 A 的子串中,不是 B 的子串的字符串的数量. 2.在 A 的子串中,不是 B 的子序列的字符串的数量. 3.在 A 的子序列中,不是 ...

  4. 多线程、委托、Invoke解决winform界面卡死的问题,并带开关

    一.知识点介绍 1,更新控件的内容,应该调用控件的Invoke方法. Invoke指: 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托.该方法接收一个委托类型和委托的参数,因此需要定义 ...

  5. iOS 中 ARC 项目 兼容 MRC

    iOS 项目中MRC 和 ARC 项目的代码兼容问题: 1.ARC 项目中导入 MRC 第三方类的时候要在此类上添加 -objc-arc. 2.MRC 项目中导入 ARC 类的时候要在次类上添加 -f ...

  6. dictionary 应用(绑定dgv)

    dictionary的用法://初始化添加所有车位进这队列 Utility.Effectlist.Add(); //每触发一次,用这个增加数量 Utility.Effectlist["Car ...

  7. 安卓端360度全景图的html5实现

    这里是一款旅游相关的安卓应用,其中虚拟旅游的功能采用html5的360度全景图技术实现,使用户能够身临其境的感受旅游景点的风光. 此处引入了ddpanorama插件,它的原理是在canvas上绘制全景 ...

  8. “LC.exe”错误

    错误“LC.exe”已退出,代码为 -1. 可能的原因是: 这个第三方组件是个商业组件,他在组件的主使用类定义了 LicenseProvider(typeof(LicFileLicenseProvid ...

  9. JSP页面以及JSP九大隐式对象

    €JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. €JSP这门技术的最大的特点在于,写jsp就像在写html,但它相比 ...

  10. USACO翻译:USACO 2013 NOV Silver三题

    USACO 2013 NOV SILVER 一.题目概览 中文题目名称 未有的奶牛 拥挤的奶牛 弹簧牛 英文题目名称 nocow crowded pogocow 可执行文件名 nocow crowde ...