4.4 权限属性RequireAuthorizationAttribute

[csharp] view plaincopy

 
  1. "font-size:14px;">///
  2. /// 权限验证属性类
  3. ///
  4. public class RequireAuthorizeAttribute : AuthorizeAttribute
  5. {
  6. ///
  7. /// 用户权限列表
  8. ///
  9. public UserAuthModel[] UserAuthList
  10. {
  11. get
  12. {
  13. return AuthorizedUser.Current.UserAuthList;
  14. }
  15. }
  16. ///
  17. /// 登录用户票据
  18. ///
  19. public string UserLoginTicket
  20. {
  21. get
  22. {
  23. return AuthorizedUser.Current.UserLoginTicket;
  24. }
  25. }
  26. public override void OnAuthorization(AuthorizationContext filterContext)
  27. {
  28. base.OnAuthorization(filterContext);
  29. ////验证是否是登录用户
  30. var identity = filterContext.HttpContext.User.Identity;
  31. if (identity.IsAuthenticated)
  32. {
  33. var actionName = filterContext.ActionDescriptor.ActionName;
  34. var controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
  35. //验证用户操作是否在权限列表中
  36. if (HasActionQulification(actionName, controllerName, identity.Name))
  37. if (!string.IsNullOrEmpty(UserLoginTicket))
  38. //有效登录用户,有权限访问此Action,则写入Cookie信息
  39. filterContext.HttpContext.Response.Cookies[FormsAuthentication.FormsCookieName].Value = UserLoginTicket;
  40. else
  41. //用户的Session, Cookie都过期,需要重新登录
  42. filterContext.HttpContext.Response.Redirect("~/Account/Login", false);
  43. else
  44. //虽然是登录用户,但没有该Action的权限,跳转到“未授权访问”页面
  45. filterContext.HttpContext.Response.Redirect("~/Home/UnAuthorized", true);
  46. }
  47. else
  48. {
  49. //未登录用户,则判断是否是匿名访问
  50. var attr = filterContext.ActionDescriptor.GetCustomAttributes(true).OfType();
  51. bool isAnonymous = attr.Any(a => a is AllowAnonymousAttribute);
  52. if (!isAnonymous)
  53. //未验证(登录)的用户, 而且是非匿名访问,则转向登录页面
  54. filterContext.HttpContext.Response.Redirect("~/Account/Login", true);
  55. }
  56. }
  57. ///
  58. /// 从权限列表验证用户是否有权访问Action
  59. ///
  60. ///
  61. ///
  62. ///
  63. private bool HasActionQulification(string actionName, string controllerName, stringuserName)
  64. {
  65. //从该用户的权限数据列表中查找是否有当前Controller和Action的item
  66. var auth = UserAuthList.FirstOrDefault(a =>
  67. {
  68. bool rightAction = false;
  69. bool rightController = a.Controller == controllerName;
  70. if (rightController)
  71. {
  72. string[] actions = a.Actions.Split(',');
  73. rightAction = actions.Contains(actionName);
  74. }
  75. return rightAction;
  76. });
  77. //此处可以校验用户的其它权限条件
  78. //var notAllowed = HasOtherLimition(userName);
  79. //var result = (auth != null) && notAllowed;
  80. //return result;
  81. return (auth != null);
  82. }
  83. }

4.5 业务Controller示例

[csharp] view plaincopy

 
    1. "font-size:14px;">public class ProductController : WebControllerBase
    2. {
    3. [AllowAnonymous]
    4. public ActionResult Query()
    5. {
    6. return View("ProductQuery");
    7. }
    8. [HttpGet]
    9. //[AllowAnonymous]
    10. [RequireAuthorize]
    11. public ActionResult Detail(string id)
    12. {
    13. var cookie = HttpContext.Request.Cookies;
    14. string url = base.ApiUrl + "/Get/" + id;
    15. HttpClient httpClient = HttpClientHelper.Create(url, base.UserLoginTicket);
    16. string result = httpClient.GetString();
    17. var model = JsonSerializer.DeserializeFromString(result);
    18. ViewData["PRODUCT_ADD_OR_EDIT"] = "E";
    19. return View("ProductForm", model);
    20. }
    21. }

Web用户的身份验证及WebApi权限验证流程的设计和实现(续)的更多相关文章

  1. [置顶] Web用户的身份验证及WebApi权限验证流程的设计和实现 (不是Token驗證!!!不是Token驗證!!!都是基於用户身份的票据信息驗證!!!)

     转发 http://blog.csdn.net/besley/article/details/8516894 不是Token驗證!!!不是Token驗證!!!都是基於用户身份的票据信息驗證!!! [ ...

  2. 转 Web用户的身份验证及WebApi权限验证流程的设计和实现

    前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个功能复杂的业务应用系统,通过角色授权来控制用户访问,本文通过Form认证,Mvc的Controller基类及Action的权 ...

  3. Web用户的身份验证及WebApi权限验证流程的设计和实现 asp.net mvc AllowAnonymous 不起作用, asp.net mvc 匿名访问

    原文地址: https://blog.csdn.net/zjlovety/article/details/17095627 前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个 ...

  4. Web用户的身份验证及WebApi权限验证流程的设计和实现

    5. WebApi 服务端代码示例 5.1 控制器基类ApiControllerBase [csharp] view plaincopy   /// /// Controller的基类,用于实现适合业 ...

  5. Web用户的身份验证及WebApi权限验证流程的设计和实现(尾)

    5. WebApi 服务端代码示例 5.1 控制器基类ApiControllerBase [csharp] view plaincopy   /// /// Controller的基类,用于实现适合业 ...

  6. SpringAOP01 利用AOP实现权限验证、利用权限验证服务实现权限验证

    1 编程范式 1.1 面向过程 1.2 面向对象 1.3 面向切面编程 1.4 函数式编程 1.5 事件驱动编程 2 什么是面向切面编程 2.1 是一种编程范式,而不是一种编程语言 2.2 解决一些特 ...

  7. 学习总结之 WebApi 用户登录和匿名登录,及权限验证

    近些天,看了一些博客园大牛关于webApi项目的的文章,也有请教师兄一些问题,自己做了个Demo试了试,收获甚多.感谢感谢,下面是我一些学习的总结,如若有错的地方请多多指教!! WebApi登陆与身份 ...

  8. 简单两步快速实现shiro的配置和使用,包含登录验证、角色验证、权限验证以及shiro登录注销流程(基于spring的方式,使用maven构建)

    前言: shiro因为其简单.可靠.实现方便而成为现在最常用的安全框架,那么这篇文章除了会用简洁明了的方式讲一下基于spring的shiro详细配置和登录注销功能使用之外,也会根据惯例在文章最后总结一 ...

  9. [Abp 源码分析]十二、多租户体系与权限验证

    0.简介 承接上篇文章我们会在这篇文章详细解说一下 Abp 是如何结合 IPermissionChecker 与 IFeatureChecker 来实现一个完整的多租户系统的权限校验的. 1.多租户的 ...

随机推荐

  1. (转)HTML5 本地数据库(SQLite) 示例

      HTML5 本地数据库(SQLite) 示例 2012-05-07 16:21:13 标签:SQLite HTML5本地数据库 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作 ...

  2. 生成一个空白BMP的简单代码【转】

    转自:http://blog.chinaunix.net/uid-15063109-id-4275395.html 做图像处理时,有时需要临时生成图使用.以下是生成320x240 24位图的一个简单的 ...

  3. Linux内核实践之tasklet机制【转】

    转自:http://blog.csdn.net/bullbat/article/details/7423321 版权声明:本文为博主原创文章,未经博主允许不得转载. 作者:bullbat 源代码分析与 ...

  4. C++ 调节PCM音频音量大小

    在用解码器解码音频数据得到PCM音频数据块之后,可以在将数据送给声卡播放之前调节其音量大小,具体的实现函数如下: void RaiseVolume(char* buf, UINT32 size, UI ...

  5. 使用windos电脑模拟搭建web集群(一)

    资源规划 1.环境准备 centos7.2 虚拟机 13个 可以先配置一台,做好基础优化,然后克隆13台分布在 windos宿主机上 两台windos笔记  都是8g的内存 一台有点内存吃紧. 没有物 ...

  6. validate插件实现表单效验(一)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. hdu 1301(最小生成树)

    Jungle Roads Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  8. android launchmode singleinstance问题

    问题描述 最近测试关于launchmode的四种方式 默认模式 top singletask 都已经了解了 唯独这个instance模式 我的问题是 我们只作2个activity的假设A和B,其中A为 ...

  9. BZOJ1588 [HNOI2002]营业额统计 splay模板

    1588: [HNOI2002]营业额统计 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 16189  Solved: 6482 [Submit][S ...

  10. Netty源码学习(四)Netty服务器是如何启动的?

    本文会分析Netty服务器的启动过程,采用的范例代码是Netty编写的Echo Server. 0. 声明acceptor与worker 由于Netty采用的reactor模型,所以需要声明两组线程, ...