详解ABP框架中Session功能的使用方法_第1页
详解ABP框架中Session功能的使用方法_第2页
详解ABP框架中Session功能的使用方法_第3页
详解ABP框架中Session功能的使用方法_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、详解ABP匡架中Sessio功能的使用方法如果一个应用程序需要登录,则它必须知道当前用户执行了什么操作。因此ASP在展示层提供了一套自己的SSS会话对象,而ABP则提供了一个可以在任何地方获取当前用户和租户的ASession。关于ASession需要获取会话信息则必须实现ASession。虽然你可以用自己的方式去实现它(ASession但是它在oe项&中已经有了完整的实现。注入SessionASess通常是以属性注入的方式存在于需要它的类中,不需要获取会话信息的类中则不需要它。如果我们使用属性注入方式,我们可以用ASession作为默认值来初始化它(ASession如下所示:icclassMy

2、Class:ITransient,ependenicIAbpSessionAbpSessionget;set;icMyClass()AbpSession=NullAbpSession.Instance;icvoidMyMethod()rentUserId=AbpSession.User由于授权是应用层的任务,因此我们应该在应用层和应用层的上一层使用ASession们不在领域层使用ASession正常的)。AiionSeie和AoAioonte个基类已经注入了ASession性,因此在Aiion的实例方法中,能直接使用ASession生。使用Sessioi属性ASessio义的一些关键属性:se

3、当前用户的标识,如果没有当前用户则为n如果需要授权访问则它不可能为空。enn当前租户的标识,如果没有当前租户则为n。ienn可y能是eosttennse和enn是可以为n的。当然也提供了不为空时获取数据的es(和eenn方法。当你确定有当前用户时,你可以使用ese方法。如果当前用户为空,使用该方法则会抛出一个异常。eenn的使用方式和ese类似。ABP如何实现Sessior的目录代码:neseAnieSessionblicinterfaceIAbpSessionlong?UserIdet;int?TenantIdget;tiTenancySidesMultiTenancySidegelong?

4、ImpersonatorUserIdget;int?ImpersonatorTenantIdget;ASe实现了空对象模式sinAiennnforseecreAbpSessionnamespaceAbp.Runtime.Sessionseensnoe/publicclassNullAbpSession:IAbpSession/Singletoninstance./publicstaticNullAbpSessionInstancegetreturnSingletonInstance;privatestaticreadonlyNullAbpSessionSingletonInstance=new

5、NullAbpSession();/publiclong?UserIdgetreturnnull;/publicint?TenantIdgetreturnnull;publicMultiTenancySidesMultiTenancySidegetreturnMultiTenancySides.Tenant;publiclong?ImpersonatorUserIdgetreturnnull;publicint?ImpersonatorTenantIdgetreturnnull;privateNullAbpSession()ClaimsAbpSessiomusingSystem;usingSy

6、stem.Linq;usingSystem.Security.Claims;usingSystem.Threading;usingAbp.Configuration.Startup;usingAbp.MultiTenancy;usingAbp.Runtime.Security;namespaceAbp.Runtime.Session/Implementstogetsessionpropertiesfromclaimsof./publicclassClaimsAbpSession:IAbpSessionprivateconstintDefaultTenantId=1;publicvirtuall

7、ong?UserIdgetvarclaimsPrincipal=Thread.CurrentPrincipalasClaimsPrincipal;if(claimsPrincipal=null)returnnull;varclaimsIdentity=claimsPrincipal.IdentityasClaimsIdentity;if(claimsIdentity=null)returnnull;varuserIdClaim=claimsIdentity.Claims.FirstOrDefault(c=c.Type=ClaimTypes.NameIdentifier);if(userIdCl

8、aim=null|string.IsNullOrEmpty(userIdClaim.Value)returnnull;longuserId;if(!long.TryParse(userIdClaim.Value,outuserId)returnnull;returnuserId;publicvirtualint?TenantIdgetif(!_multiTenancy.IsEnabled)returnDefaultTenantId;varclaimsPrincipal=Thread.CurrentPrincipalasClaimsPrincipal;if(claimsPrincipal=nul

9、l)returnnull;vartenantIdClaim=claimsPrincipal.Claims.FirstOrDefault(c=c.Type=AbpClaimTypes.TenantId);if(tenantIdClaim=null|string.IsNullOrEmpty(tenantIdClaim.Value)returnnull;returnConvert.ToInt32(tenantIdClaim.Value);publicvirtualMultiTenancySidesMultiTenancySidegetreturn_multiTenancy.IsEnabled&!Te

10、nantId.HasValueMultiTenancySides.Host:MultiTenancySides.Tenant;publicvirtuallong?ImpersonatorUserIdgetvarclaimsPrincipal=Thread.CurrentPrincipalasClaimsPrincipal;if(claimsPrincipal=null)returnnull;varimpersonatorUserIdClaim=claimsPrincipal.Claims.FirstOrDefault(c=c.Type=AbpClaimTypes.ImpersonatorUse

11、rId);if(impersonatorUserIdClaim=null|string.IsNullOrEmpty(impersonatorUserIdClaim.Value)returnnull;returnConvert.ToInt64(impersonatorUserIdClaim.Value);publicvirtualint?ImpersonatorTenantIdgetif(!_multiTenancy.IsEnabled)returnDefaultTenantId;varclaimsPrincipal=Thread.CurrentPrincipalasClaimsPrincipa

12、l;if(claimsPrincipal=null)returnnull;varimpersonatorTenantIdClaim=claimsPrincipal.Claims.FirstOrDefault(c=c.Type=AbpClaimTypes.ImpersonatorTenantId);if(impersonatorTenantIdClaim=null|string.IsNullOrEmpty(impersonatorTenantIdClaim.Value)returnnull;returnConvert.ToInt32(impersonatorTenantIdClaim.Value

13、);privatereadonlyIMultiTenancyConfig_multiTenancy;/Constructor./publicClaimsAbpSession(IMultiTenancyConfigmultiTenancy)_multiTenancy=multiTenancy;AbpSessionExtensionslAbpSessior扩展方法usingSystem;namespaceAbp.Runtime.Session/Extensionmethodsfor./publicstaticclassAbpSessionExtensions/GetscurrentUsersId.

14、/Throwsifisnull./Sessionobject./CurrentUsersId.publicstaticlongGetUserId(thisIAbpSessionsession)if(!session.UserId.HasValue)thrownewAbpException(Session.UserIdisnull!Probably,userisnotloggedin.);returnsession.UserId.Value;/GetscurrentTenantsId./Throwsifisnull./Sessionobject./CurrentTenantsId./publicstaticintGetTenantId(thisIAbpSessionsession)if(!session.TenantId.HasValue)thrownewAbpException(Session.TenantIdisnull!Possibleproblems:Nouserloggedinorcurrentloggedinuserinahostuser(TenantIdisalwaysnullforhostusers).)return

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论