ASP.Net MVC_WPF_WCF_WinForm_SQL

兴趣支持生活

MVC 拦截器之授权 AuthorizeAttribute

一、表关系

 

二、表结构

1、角色

 

 

2、用户

 

 

三、自定义授权特性

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using System.Configuration;

namespace MvcApplication4.Models
{
    /// <summary>
    /// 允许
    /// </summary>
    public class HasPermissionAttribute : AuthorizeAttribute //Authorize授权特性
    {
        private string _str = "";
        private string _errorMsg = "出错了";
        public HasPermissionAttribute(Type str)
            : this(str.ToString())
        {

        }
        public HasPermissionAttribute(string str)
        {
            _str = str;
        }


        /// <summary>
        /// 重写时,提供一个入口点用于进行自定义授权检查【入口点】。
        /// </summary>
        /// <param name="httpContext">HTTP 上下文,它封装有关单个 HTTP 请求的所有 HTTP 特定的信息。</param>
        /// <returns>如果用户已经过授权,则为 true;否则为 false。</returns>
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            
            bool result = false;
            if (HttpContext.Current == null) return result = false;
            if (!HttpContext.Current.User.Identity.IsAuthenticated) return result = false;
            string myid = HttpContext.Current.User.Identity.Name;

            //逻辑判断,判断用户是否对栏目有操作权
            if (myid == _str)
            {
                result = true;
            }

            return result;
        }

        /// <summary>
        /// 处理授权失败的 HTTP 请求。
        /// </summary>
        /// <param name="filterContext">封装用于 System.Web.Mvc.AuthorizeAttribute 的信息。 filterContext 对象包括控制器、HTTP 上下文、请求上下文、操作结果和路由数据。</param>
        protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
        {
            //异步请求
            if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                filterContext.HttpContext.Response.StatusCode = (int)System.Net.HttpStatusCode.InternalServerError;
                filterContext.Result = new JsonResult()
                {
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                    Data = new
                    {
                        ErrorType = this.GetType().Name,
                        Action = filterContext.ActionDescriptor.ActionName,
                        Message = _errorMsg
                    }
                };
            }
            else
            {
                string MyAuthError = ConfigurationManager.AppSettings["MyAdminAuthErrorUrl"];// +@"?returnUrl=" + myolurl;
                filterContext.Result = new RedirectResult(MyAuthError);
            }
        }
    }
}


 

Web.config

<configuration>
  <connectionStrings>
    
  </connectionStrings>
  <appSettings>
    <add key="MyAdminAuthErrorUrl" value="/admin/account/adminlogon"/>
  </appSettings> 

 

四、Controllers控制器

using MvcApplication4.Models;
using System.Web.Security;

namespace MvcApplication4.Controllers
{
    public class TestController : Controller
    {
        //
        // GET: /Test/

        public ActionResult Index()
        {
            FormsAuthentication.SetAuthCookie("AdminHome", true);
        }

        [Authorize]
        [HasPermissionAttribute("AdminHome")]
        //[HasPermissionAttribute("AdminHome1")]//授权失败
        public ActionResult Index2()
        {
            return View();
        }

        

    }
}


 

扩展阅读:

MVC 用户身份验证(FormsAuthentication、Cookie、Session)

MVC 中一个action上面加[Authorize]是什么意思

MVC 拦截器之授权 AuthorizeAttribute

  

其它博客
http://www.cnblogs.com/shanyou/archive/2010/03/29/1699511.html
http://www.dotblogs.com.tw/kim/archive/2010/10/12/mvccustomauthorizeattribute.aspx

 

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tiz198183/article/details/8701338
个人分类: MVC
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭