zoukankan      html  css  js  c++  java
  • 关于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);
            }
  • 相关阅读:
    .Proto 文件转换成.cs文件
    C# 委托和事件
    C# 对word (03、07)的相关操作
    程序中记录日志的封装类
    压缩文件程.ZIP
    xml和对象直接的序列化和反序列化
    C#判断两个日期是否在同一周,某日期是本月的第几周
    vs2008 C# 单元测试
    解压缩.zip文件
    记录一次曲折的维护-重构过程
  • 原文地址:https://www.cnblogs.com/walt/p/4918524.html
Copyright © 2011-2022 走看看