MVC自定义AuthorizeAttribute实现权限管理

  【转】MVC自定义AuthorizeAttribute实现权限管理

原文载自:小飞的DD http://www.cnblogs.com/feiDD/articles/2844447.html

网站的权限管理是一个很重要的功能,MVC中怎么实现对于网站的权限管理呢。

  在MVC中有一个名为AuthorizeAttribute的类,我们可以创建我们自己的特性 MemberValidationAttribute类,然后继承AuthorizeAttribute类来实现我们自己的网站权限的管理。然后通过将 MemberValidation特性添加到具体的Action上,将我们的权限管理精确到某个页面上。

  下面我通过一个例子了解一下。

首先我们创建一个空的MVC项目。创建两个Controller和三个页面。

  主页Controller

  

public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            return View();
        }

    }

页面

  

  用户登录Controller,在Login Action下添加 Cookie写入代码。

  

public class MemberController : Controller
    {
        //
        // GET: /Member/
        public ActionResult Index()
        {
            return View();
        }
        public ActionResult Login()
        {
            var cookie = new HttpCookie("Login", "Success");
            System.Web.HttpContext.Current.Response.SetCookie(cookie);
            return View("LoginSuccess");
        }
    }

    页面

    

    

    以上三个截图的关系是,我们希望用户先是通过登录页面登录,提示成功后,在进入Home页面。但是这时我们通过在地址栏内输 入"/Home"也可以登录到主页面,那也许就会报错。在我做的上个项目中,就是需要对用户的批量下单做一个验证,如果有没通过验证的订单是不让用户通过 在地址栏输入地址跳转到订单结算页面的,不然是会报错的。这里就需要我们将针对某一页面的验证添加到相应的Action上去。

    下面我们添加一个名为MemberValidationAttribute类,让他继承AuthorizeAttribute类,这里我们只需要实现他的OnAuthorization方法

    

public class MemberValidationAttribute:AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            //获取Cookies中的Login
            var memberValidation = System.Web.HttpContext.Current.Request.Cookies.Get("Login");
            //如果memberValidation为null  或者 memberValidation不等于Success
            if (memberValidation==null||memberValidation.Value != "Success")
            {
                //页面跳转到 登录页面
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new {controller="Member",action="Index" }));
                return;
            }
            //通过验证
            return;
        }
    }

    然后将特性添加到HomeController下的Index Action上。

   

public class HomeController : Controller
    {
        [MemberValidation]
        public ActionResult Index()
        {
            return View();
        }
    }

这下再怎么通过Url去跳转的话也不能再不通过登录的情况下进入我们的Home Index 页面了。

     有两个遗留问题要在这里说一下:

    第一:登录成功的页面并没有添加一个跳转到Home Index的 按钮,所以登录成功后还是要通过Url 到Home Index去。

    第二:用户登录的时候将Cookie Login 清空。

    2013-5-22 遗留问题一

    在AuthorizeAttribute中还有一个方法叫AuthorizeCore,他返回一个bool值表示是否通过验证。通过验证的话跳转到下一页面A,如果未通过验证,则跳转到登录页面。    

protected override bool AuthorizeCore(HttpContextBase httpContext)
        {

            var cook = System.Web.HttpContext.Current.Request.Cookies.Get("CustomerInfo");

            if (cook != null)
            {
                if (cook.ToString() != "")
                {
                    return true;
                }

            }
            return false;
        }

登录页面的设置在web.config中。如下:    

<system.web>
    <authentication mode="Forms">
      <forms loginUrl="~/Account/LoginPage" timeout="2880" />
    </authentication>
  </system.web>

    loginUrl就是要跳转到的登录页面,这是在url地址栏会携带A的地址,作为登录成功后的跳转。

    public ActionResult LoginPage(string ReturnUrl)
        {
            if (ReturnUrl != null)
                ViewBag.ReturnUrl = ReturnUrl;
            return View();
        }

    

MVC自定义AuthorizeAttribute实现权限管理

时间: 2024-08-06 06:34:51

MVC自定义AuthorizeAttribute实现权限管理的相关文章

MVC 自定义AuthorizeAttribute实现权限管理

[Authorize] public ActionResult TestAuthorize() { return View(); } [Authorize(Users="test1,test2")] public ActionResult TestAuthorize() { return View(); } [Authorize(Roles="Admin")] public ActionResult TestAuthorize() { return View();

SharePoint _layouts下自定义程序页面权限管理

在sharepoint中,_layouts下的自定义页面没有特别的权限,只要用户能访问sharepoint站点就可以访问_layouts下的自定义程序页面,现在我们需要给自定义页面做一下权限认证.要求如下: 1)自定义程序页面只为特定的站点服务,如图: 我们的自定义页面只为docs站点服务,只有/docs/_layouts/15/这样的访问路径才是合法的. 2)能访问docs站点的用户不一定就可以访问该页面,所以我们需要给该页面配置一个权限管理的list,如图: 3)有些自定义程序页面比较特殊,

MVC身份验证及权限管理

MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供了三种方式,其中最常用的就是我们的Form认证,需要配置相应的信息.例如下面的配置信息: <authentication mode="Forms"> <forms loginUrl="Login.aspx" defaultUrl="Default.aspx" protection="All" /> &l

django 自定义user使用权限管理模块

这篇文章主要是讲如何让自定义的user模块也能用到django.contrib.auth中的权限管理模块 看这篇文章之前请先看一下我前边的两篇文章,本文以这两篇文章为基础: django 自定义 USER 用源码告诉你django权限管理是怎么回事 下边是一个大概的实现,后边再做详细分析: 1.user model自定义 class AbstractUser(models.Model): # 登录信息 id = models.AutoField(primary_key=True) staff =

MVC中的一般权限管理

权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少.权限管理几乎出现在任何系统里面,只要有用户和密码的系统.权限管理还是比较复杂的,有的固定到某个模块,某个操作,甚至是某个按钮,总之想要做好一个权限管理,真TMD的不容易,下面分享一个小菜之前的一个案例: 基本的表设计如下图: 表结构:用户表.角色表.模块表.操作表.用户角色表.角色模块表.模块操作表....角色模块操作表这个不是必须的 要查权限肯定是: if (!IsLogin) { 未登录

ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制

1.前言 a.微软对ASP.NET的开发从WebForm到MVC的转变,已经正式过去5,6个年头,现在WebForm和MVC也都越来越完善,小小算来我也已经工作了将近三年,从大学的时候学习ASP.NET WebForm,感觉这就是我们以后吃饭的技术,所以当时可劲的学习拖各种控件,学习做各种各样的小项目,但是没想到的是,从大学最后一学期参加实习开始到现在也就一直没有机会接触ASP.NET WebForm,基本也都是在用MVC开发.我并不是说MVC就比WebForm开发好或者什么的,我只是觉得他们都

mvc 自定义 AuthorizeAttribute 验证逻辑

public class AuthorizationFilterAttribute : AuthorizeAttribute { Dictionary<string, string> roles = new Dictionary<string, string>() { {"1","/Home/Index"}, {"2",""}, }; /// <summary> /// 自定义验证逻辑 返回

ASP.NET Identity “角色-权限”管理 5

1.1.       Permission管理 参考1:Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理 参考2:ASP.NET MVC三个重要的描述对象:ActionDescriptor 这里Permission指的是Action,即供用户调用的功能. 1.1.1.      新建ApplicationPermission 修改IdentityModel.cs,新增ApplicationPermission,此处设计了属性Id.Controller.Action.Pa

ASP.NET MVC+EF框架+EasyUI实现权限管理系列

http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个 项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个 系列