Roy's Blog
go on,go on

在ASP.NET MVC中使用filter做权限

roydux,2010年1月25日

ASP.NET MVC中有一个基础的过滤器基类:FilterAttribute
和几个接口:
IActionFilter
IAuthorizationFilter
IExceptionFilter
IResultFilter

实现IAuthorizationFilter可以做权限限制:

public class AuthorAttribute : FilterAttribute,IAuthorizationFilter
    {
        #region IAuthorizationFilter 成员

        public void OnAuthorization(AuthorizationContext filterContext)
        {
            string controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.ToLower();
            string action = filterContext.ActionDescriptor.ActionName.ToLower();

            ModelEntites me = new ModelEntites();

            AuthorInfo author = me.AuthorInfo.First(a => a.Controller == controller && a.Action == action);
            UserInfo userInfo = me.UserInfo.FirstOrDefault(u => u.UserID == 1);
            if (userInfo == null)
            {
                Do(filterContext);
                return;
            }

            userInfo.RoleInfoReference.Load();
            RoleAuthorInfo raInfo = me.RoleAuthorInfo.First(ra => ra.AuthorInfo.AuthorID == author.AuthorID && ra.RoleInfo.RoleID == userInfo.RoleInfo.RoleID);
            if(raInfo == null)
            {
                Do(filterContext);
            }
        }


        private void Do(AuthorizationContext filterContext)
        {
            string controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.ToLower();
            string action = filterContext.ActionDescriptor.ActionName.ToLower();

            filterContext.Controller.TempData["msg"] = "木有权限";
            filterContext.Controller.TempData["url"] = "";
            filterContext.Controller.TempData["from_controller"] = controller;
            filterContext.Controller.TempData["from_action"] = action;

            filterContext.HttpContext.Response.Redirect(filterContext.HttpContext.Request.ApplicationPath + string.Format("Home/Index/"));
        }

        #endregion
    }


在要限制的Controller上加声明即可:
[AuthorAttribute]
    public class HelloController : Controller

访问该controller中的action,会被限制,也可以加到action前面。



Tags: asp.net mvc  filter  

分类: .NET | 评论:1 | 浏览:

相关文章:

发表评论