关于AuthorizeAttribute使用

在开发中,假如你只对一个角色进行权限处理,你可以这么写

class ActionAuthAttribute : AuthorizeAttribute
    {
        private RoleType _roleType;
        public ActionAuthAttribute(RoleType role)
        {
            _roleType = role;
        }

        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (BaseController.CurrentUser.RoleId == (int)_roleType )
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            //base.HandleUnauthorizedRequest(filterContext);
            //filterContext.HttpContext.Response.RedirectToRoute("ErrorPage", new { msg = HttpUtility.UrlEncodeUnicode("你无权访问此页面!") });
            System.Web.HttpContext.Current.Response.RedirectToRoute("ErrorPage", new { msg = HttpUtility.UrlEncodeUnicode("你无权访问此页面!") });  

        }
    }

但是当两个角色都有权限呢?

方法一:你可以重写构造函数,如下

class ActionAuthAttribute : AuthorizeAttribute
    {
        private RoleType _roleType;
        private RoleType _roleType1;
        private RoleType _roleType2;
        public ActionAuthAttribute(RoleType role)
        {
            _roleType = role;
        }
        public ActionAuthAttribute(RoleType role1, RoleType role2)
        {
            _roleType1 = role1;
            _roleType2 = role2;
        }
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (BaseController.CurrentUser.RoleId == (int)_roleType )
            {
                return true;
            }
            else if (BaseController.CurrentUser.RoleId == (int)_roleType1 || BaseController.CurrentUser.RoleId == (int)_roleType2)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            //base.HandleUnauthorizedRequest(filterContext);
            //filterContext.HttpContext.Response.RedirectToRoute("ErrorPage", new { msg = HttpUtility.UrlEncodeUnicode("你无权访问此页面!") });
            System.Web.HttpContext.Current.Response.RedirectToRoute("ErrorPage", new { msg = HttpUtility.UrlEncodeUnicode("你无权访问此页面!") });  

        }
    }

方法二:你可以使用

params定义一个变化的数组参数,这样参数多少就可以随你了,推荐第二种方法,不然,随着参数变化,你要一直重写函数了。。哈哈
 [AttributeUsage(AttributeTargets.Method)]
    class ActionAuthAttribute : AuthorizeAttribute
    {
        private RoleType[] _roleType;
        public ActionAuthAttribute(params RoleType[] role)
        {
            _roleType = role;
        }
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            foreach (var item in _roleType)
            {
                if (BaseController.CurrentUser.RoleId == (int)item)
                {
                    return true;
                }
            }
            return false;
        }
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            var routeValue = new RouteValueDictionary {
                { "Controller", "Etc"},
                { "Action", "Oops"},
                {"msg", HttpUtility.UrlEncodeUnicode("你无权访问此页面!")}
            };

            filterContext.Result = new RedirectToRouteResult(routeValue);
        }
时间: 2024-10-07 18:26:21

关于AuthorizeAttribute使用的相关文章

MVC5的AuthorizeAttribute详解

现今大多数的网站尤其是购物网站都要求你登录后才能继续操作,当你匿名的将商品放入购物车后,不可能匿名购买这时可以转到登录界面让用户进行登录验证. 适用系统自带的过滤器 MVC5只要将属性[Authorize]置于相关的action之前就行,那么在调用Buy action之前,就会运用Authorize过滤器. 1 [Authorize] 2 public ActionResult Buy(int id) 3 { 4 //其它购买逻辑代码放在这里 5 6 } 2. 也可以将属性[Authorize]

MVC中使用AuthorizeAttribute做身份验证操作

代码顺序为:OnAuthorization-->AuthorizeCore-->HandleUnauthorizedRequest 如果AuthorizeCore返回false时,才会走HandleUnauthorizedRequest 方法,并且Request.StausCode会返回401,401错误又对应了Web.config中的: <authentication mode="Forms"> <forms loginUrl="~/"

自定义AuthorizeAttribute

原文地址:http://www.cnblogs.com/shanyou/archive/2010/03/29/1699511.html 网站的权限判断是一个非常普遍的需求,从文章ASP.NET MVC的Action Filter中我们知道实现这样的需求只要从AuthorizeAttribute集成,重写相关的判断逻辑就可以了.这里记录一下: namespace TokenAcl.Web.Helper {     public class TokenAclAuthorizeAttribute :

扩展AuthorizeAttribute

MVC中经常会用到关于设置访问权限的问题: 如果我们扩展了AuthorizeAttribute,那么我们只需要在类或方法前加上此attribute,即可实现权限问题. AttributeTargets 权限适用于类或者方法 [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method,Inherited=true,AllowMultiple=true)] public sealed class SecurityAuthorizati

AuthorizeAttribute示例

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace AuthTest.Models { public class MyAuthAttribute : AuthorizeAttribute { // 只需重载此方法,模拟自定义的角色授权机制,推荐通过Idetity获取用户信息, 当然也可以通过Session获取,如果通

mvc 自定义 AuthorizeAttribute 验证逻辑

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

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();

ASP.NET MVC中利用AuthorizeAttribute实现访问身份是否合法以及Cookie过期问题的处理

话说来到上海已经快半年了,时光如白驹过隙,稍微不注意,时间就溜走了,倒是没有那么忙碌,闲暇之际来博客园还是比较多的,记得上次在逛博问的时候看到有同志在问MVC中Cookie过期后如何作相关处理,他在阐述那么多页面不可能都去一个个手动处理.其实MVC很牛逼的地方就是把Attribute利用的非常完美,接下来就来看下它是如何做到的吧! 第一步.我们要定义一个登录过滤标签-LoginFilterAttribute并且继承AuthorizeAttribute.来看下它内部是啥样子 1 // Summar

asp.net MVC之AuthorizeAttribute浅析

AuthorizeAttribute是asp.net MVC的几大过滤器之一,俗称认证和授权过滤器,也就是判断登录与否,授权与否.当为某一个Controller或Action附加该特性时,没有登录或授权的账户是不能访问这些Controller或Action的. 在进入一个附加了Authorize特性的Controller或Action之前,首先执行的是AuthorizeAttribute类的OnAuthorization(AuthorizationContext filterContext)方法