夜的第七章

ASP.NET、C#、.NET开发资源、Javascript等等为主的开发备注收藏注意警告等的一个个人博客。

« 整合 ADO.NET Entity Framework 到應用程式中(转)关于互联网产品的开发 »

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

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前面。



  • quote 1.dongtso 2010-2-4 0:23:13 回复
  • 请问你这个到底能不能实现啊,你这样,中间有很多东西没有写清,我实现不了,数据库是怎么会事,也没作一下说明。
    roydux 于 2010-2-4 21:35:20 回复
    if (userInfo == null)
    ……

    这行就是验证权限的。数据库怎么设计随你啊,不论怎么设计都要做验证的吧?

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog 1.8 Arwen Build 81206



©2007 - 2010 www.leadnt.com 保留一些权利吧