开发过MVC的人都知道,MVC是三个单词的缩写,分别为: 模型(Model),视图(View)和控制Controller)。 MVC模式的目的就是实现Web系统的职能分工。 Model层实现系统中的业务逻辑。 View层用于与用户的交互。 Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示,同时它也可以解释用户的输入并将它们映射为模型层可执行的操作。
我们的权限验证就添加在控制(Controller)层,这是必然的。验证的机制就是,每一次客户端对于Controller里边的Action的请求之前,都会先验证用户的身份,也就是说,用户每一次对于数据的请求,都会验证当前用户是否有使用该数据的权限。
本文所介绍的MVC身份验证大致分为以下四个部分:
AuthenticationAsserts 授权验证的相关断言
AuthorizationFilter 验证过滤器的构造函数
ControllerActionInvoker 自定义ControllerActionInvoker
DefaultControllerFactory 自定义的ControllerFactory,可以通过ControllerFactory向Controller中植入相关的ActionInvoker
下边先从授权验证的相关断言说起,验证断言的作用是:确定用户的请求是否需要验证和确认是否以验证过。它主要包含以下几个方法:精确的权验验证,确定系统是否需要验证,确定用户是否已经通过验证,以及判断用户是否拥有访问该URL的权限。下边看看代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using Configuration;
using Membership;
using System.Web;
using User.ServiceImp;
using MVCExtension;
namespace Authorization
{
/// <summary>
/// 授权验证的相关断言。
/// </summary>
public class AuthenticationAsserts
{
/// <summary>
/// 确认系统是否需要权限验证(系统在开发期间,为了开发调试方便,可以不需要权限验证,而在开发完成后,套用框架后才要求验证)。
/// </summary>
/// <returns>如果需要验证,则返回True,否则返回False</returns>
public static bool IsRequireAuthenticate()
{
try
{
return bool.Parse(ConfigConstString.Instance.IsSOAVlidate);
}
catch
{
return false;
}
}
/// <summary>
/// 判断用户是否已经通过登录验证
/// </summary>
/// <param name="controllerContext">Controller的上下文</param>
/// <returns>如果通过验证,返回True,否则返回False</returns>
public static bool IsAuthenticated(ControllerContext controllerContext)
{
retur