Lind.DDD.Authorization是Lind.DDD框架的组成部分,之所以把它封装到框架里,原因就是它的通用性,几乎在任何一个系统中,都少不了用户授权功能,用户授权对于任何一个系统来说都是必要的,像管理型的页面都需要用户先去登陆,然后拿到凭证,才可以进行访问,这在MVC和WebApi体系结构里是很容易实现的,像过滤器里的AuthorizeAttribute和ActionFilterAttribute都可以实现用户授权的功能。

AuthorizeAttribute和ActionFilterAttribute

AuthorizeAttribute这个过滤器从字面上就可以看出它的功能,它主要用在用户角色授权上,对于我们的系统来说,那就是哪些页面需要登陆,就把哪个Action添加这个特性,它有方法OnAuthorization,表示当页面加载之前,去判断用户是否有访问本action的权限,我们可以根据自己的需要去override它;ActionFilterAttribute过滤器是我们平时用的最多的,即在action执行前,后,View渲染前,渲染后的跟踪,我们在使用时,重写对应的方法,即可以实现对各个步骤的跟踪。

实现原理,方法拦截

在mvc里,过滤器的含义就是方法拦截,这个概念和Aop不某而合,都是对方法进行拦截,然后进行二次加工,过滤器的原理也一样,在进行拦截后,可以去填充你自己的业务逻辑,然后选择继续渲染还是离开页面。

AuthorizationLoginFilter过滤器的实现

下面是我自己整理的,用户授权的一个过滤器,分享一下

///

///授权过滤器///Function:MVC模式下使用///Author:Lind.zhang///

public classAuthorizationLoginFilter : AuthorizeAttribute

{///

///验证失败后所指向的控制器和action///可以在使用特性时为它进行赋值///

public AuthorizationLoginFilter(string failControllerName = "Home", string failActionName = "Login")

{

_failControllerName=failControllerName;

_failActionName=failActionName;

}public string_failControllerName, _failActionName;public override voidOnAuthorization(AuthorizationContext filterContext)

{//被添加AllowAnonymousAttribute特性的过滤器将不参加AuthorizationLoginFilter的验证

bool skipAuthorization = filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true) ||filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true);//为登陆页添加例外,其它页都自动在global.asax里添加到全局过滤器中,MVC3及以后版本支持它

if (!skipAuthorization)

{if (!CurrentUser.IsLogin)

{

filterContext.Result= new RedirectToRouteResult("Default", newRouteValueDictionary {

{"Action",_failActionName },

{"Controller", _failControllerName},

{"returnUrl", HttpContext.Current.Request.Url.ToString() } });

}

}

}

}

授权模块的CurrentUser的实现

对于过滤器把没有登陆的用户指引登陆页后,用户将进行登陆操作,然后Lind.DDD要做什么?需要将用户标示,角色信息,权限信息进行存储,这时就是我们CurrentUser登场的时候了,设计很简单,一个方法用来持久化用户授权的对象,几个属性用来返回需要返回的内容,呵呵 !

///

///当前登陆的用户信息///可以有Redis Session和Session进行实现///

public classCurrentUser

{#region Public Properties

///

///当然登陆的用户ID///

public static stringUserID

{get{return (System.Web.HttpContext.Current.Session["UserID"] ?? string.Empty).ToString();

}

}///

///当前登陆的用户名///

public static stringUserName

{get{return (System.Web.HttpContext.Current.Session["UserName"] ?? string.Empty).ToString();

}

}///

///用户角色///

public static stringRole

{get{return (System.Web.HttpContext.Current.Session["Role"] ?? string.Empty).ToString();

}

}///

///用户权限///增,删,改,查///

public static stringAuthority

{get{return (System.Web.HttpContext.Current.Session["Authority"] ?? string.Empty).ToString();

}

}///

///当前登陆用户存储的扩展信息///

public static stringExtInfo

{get{return (System.Web.HttpContext.Current.Session["ExtInfo"] ?? string.Empty).ToString();

}

}///

///是否登陆///

public static boolIsLogin

{get{return !string.IsNullOrWhiteSpace(UserID);

}

}#endregion

#region Public Methods

///

///退出登陆///

public static voidExit()

{

System.Web.HttpContext.Current.Session.Abandon();//清除全部Session

}///

///将用户信息持久化到Session///

///

///

///

public static voidSerialize(stringuserID,stringuserName,string extInfo = "",string role = "",string authority = "")

{

System.Web.HttpContext.Current.Session["UserID"] =userID;

System.Web.HttpContext.Current.Session["UserName"] =userName;

System.Web.HttpContext.Current.Session["ExtInfo"] =ExtInfo;

System.Web.HttpContext.Current.Session["Role"] =role;

System.Web.HttpContext.Current.Session["Authority"] =authority;

}#endregion}

OK,对于Lind.DDD.Authorization用户授权这块就说到这里,如果对大家有帮助,请您点个赞吧!

ddd 访问权限_Lind.DDD.Authorization用户授权介绍相关推荐

  1. ddd 访问权限_基于DDD的微服务设计和开发实战

    作者:欧创新.邓頔.文艺 你是否还在为微服务应该拆多小而争论不休?到底如何才能设计出收放自如的微服务?怎样才能保证业务领域模型与代码模型的一致性?或许本文能帮你找到答案. 本文是基于 DDD 的微服务 ...

  2. linux限制root用户访问权限,Linux中限制用户访问权限的3种方法

    现在需要限定某个用户对特定目录/文件的访问权限,或者把某个用户的访问范围限制在某个目录/文件中.现实情况下,还是能遇到这样的需求的,比如说ubuntu下有多个可登录用户,默认情况下,用户A的工作目录( ...

  3. linux授权执行权限6,linux的用户授权

    接触使用linux也有一年了,但是一直没有使用过linux的用户授权之类的操作,前几天需要修改文件的权限,特意学了一下有关权限方面的操作, 今天记录总结一下: 一.创建用户: 1.使用命令 usera ...

  4. ddd 访问权限_DDD领域驱动设计实战 - 创建实体身份标识的常用策略

    从简单到复杂依次为: 3.1.1 用户提供唯一标识 这时用户将输入一些可识别的数值或符号,或从已有标识中选其一,然后创建实体对象.这是一种非常简单方案,但也可能变得复杂. 由于需用户自己生成高质量的标 ...

  5. ddd 访问权限_DDD的人事权(72648577)-通常陷阱- 游戏王进阶平台

    ブースターSP−レイジング・マスターズ−で登場した通常罠. 手札・Pゾーンを含むフィールド・墓地からDDをデッキに戻し.DDモンスターをサーチする効果を持つ. 最も手軽にアドバンテージを稼ぐならば.墓 ...

  6. ddd 访问权限_DDD 领域驱动设计-如何 DDD?

    注:科比今天要退役了,我是 60 亿分之一,满腹怀念-

  7. mysql打开网络访问权限_远程连接mysql 授权方法详解

    今在服务器上 有mysql 数据库,远程访问,不想公布root账户,所以,创建了demo账户,允许demo账户在任何地方都能访问mysql数据库中shandong库. 方案一: 在安装mysql的机器 ...

  8. setfacl 权限导出_setfacl getfacl 将某个目录的访问权限赋值给某个用户

    现有一目录是虚拟机和linux共享的,但是每次程序调用新建的文件都发现没有权限. 于是指定特定目录及其子目录下新建的文件或目录对于用户qhfz都有读写执行的权限 -R表示递归 -m表示设置文件acl规 ...

  9. linux mysql授权外部访问权限,Linux中安装Mysql授权远程访问

    Linux中安装MySQL 因为使用yum安装.安装过程需保证网络通畅 一.安装mysql 1.yum安装mysqlCentOS7默认数据库是mariadb,配置等用着不习惯,因此决定改成mysql, ...

最新文章

  1. nullnullHandling the Results 处理结果
  2. IO模式和IO多路复用
  3. .NET BitmapImage 内存释放问题解决方案
  4. Hhadoop环境部署
  5. Opencv常见用法和常见错误(一)
  6. Operation not allowed after ResultSet closed--操作mysql数据库
  7. 使用Deinstall专用工具删除Oracle Database
  8. Android Settings中显示自定义dialog
  9. 计算机永远无法处理日语所具有的暧昧性,计算机永远无法处理日语所具有的暧昧性。( )...
  10. 胃部不适,原来好辛苦!
  11. C语言/C++编程的起源与能力学习
  12. confluence创建页面加载缓慢_树莓派4B使用docker安装confluence
  13. 分析阶段的类图和设计阶段的类图有什么区别?
  14. access open 知乎_做目标检测,这6篇就够了:CVPR 2020目标检测论文盘点
  15. android 启动一个应用,android 在一个应用中启动另一个应用
  16. 文字投影_DLP投影仪指标含义汇总(文字稿)
  17. development period
  18. 软件开发中的非功能需求类型
  19. selenium超详解
  20. XPS查看器(XPS Viewer)适用Win10系统安装说明

热门文章

  1. 智能床垫到底有多智能-新导智能
  2. edge无法登录账户_最近发现微软账户登录不上,edge,等等,都是?怎么回事?...
  3. 高校计算机教师swto分析,教师个人SWOT分析.doc
  4. IPAPatch: 免越狱调试、修改第三方App
  5. 【回眸】Study with me!计算机二/三 级(物联网)刷题的心路历程
  6. 最优分配问题——拍卖算法
  7. 计算机视觉:目标跟踪论文推荐
  8. 爬虫日常-selenium登录12306,绕过验证
  9. 关于在电脑室腐败所作出的检讨
  10. Internet Explorer 已不再尝试还原此网站。该网站看上去仍有问题。