MCV 添加filter操作

今天在项目中发现使用了Filter功能,当用户没有某个module中Action的权限时,会跳转到错误页面。自己是MVC的初学着,对Filter工作原理的理解一无所知,所以对这Filter方面的知识进行了调研。

首先介绍一下这个项目的背景,本项目是一个网络游戏数据库后台管理程序,用于某些数据的增删改查功能。 它包含几个模块比如:用户管理,日志管理,流量统计等。 不同的后台用户有不同的访问权限,例如:某类型的用户只能访问用户管理模块的查看功能,但没有权限去删除和添加用户。数据库设计如下:

在Modules表中每一行记录表示一个controller即一个模块,ModuleActons表中每一行记录表示一个Action即功能,这两个表通过外键关联。Managers表记录了后台用户信息,每个用户对应一个ManageRole,ManageRolePermissions表中一行记录表示某个ManageRole

可以访问的Module。
好的,需求的背景已经介绍完毕,接下来就到重点了Fitler模块。
Asp.net MVC所有的Filter都是继承FilterAttribute类,此特性的Usage是Class和Method,并实现相应的接口例如:IActionFitler,IAuthorizationFilter. 下面是具体的一个实例:

Code:

public class ActionLogFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//your filter code...
base.OnActionExecuting(filterContext);
}
}

那么如果我们定义好了一个Filter特性,我们应该如何应用呢?

前面提到过FilterAttribute的作用范围是Class和Methods,而且是能被继承的,所以我们可以将上面定义的ActionLogFilterAttribute用于

Controller和Action方法,例如:

Code:

 [ActionLogFilter]
public class StoreController : Controller
{
//.....
}

此时,ActionLogFilter作用于Class。

当一个Request需要访问StoreController中的方法,程序就自动调用OnActionExecuting方法,从而实现过滤的作用.





posted on 2011-10-21 00:51  Dely  阅读(334)  评论(0编辑  收藏  举报

导航