



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《汉语阅读教程》课件-教学课件:汉语阅读教程
- 2025解除租赁合同模板
- 2025企业劳动合同书模板
- 2025中级会计实务预习知识考点:合同收入确认
- 2025兼职国庆节临时工合同范文
- 《蟋蟀的住宅》教学设计和反思
- 2025年房地产经纪人之业务操作过关检测试卷B卷附答案
- 2025年执业药师之中药学专业一题库练习试卷B卷附答案
- 新质生产力解析图
- 冷凝集素病的临床护理
- 2025年房屋租赁合同范本中介版
- 2025五一节前安全教育培训
- 水电解制氢试题及答案
- 湖北省武汉市2025届高中毕业生四月调研考试历史试题及答案(武汉四调)
- 蓝色北京师范大学4.3顶部导航栏博士复试模板
- 防汛减灾小知识
- 2024年四川宜宾环球集团有限公司招聘考试真题
- 期中测试(范围:第1-4章)(A卷·夯实基础)-北师大版七年级数学下册(原卷版)
- 2025时政试题及答案(100题)
- 《旅行社经营与管理》电子教案 5-2 旅行社接待业务2
- 医疗器械操作规范与安全知识培训试题库
评论
0/150
提交评论