下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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年中职(烹饪工艺与营养)中式面点工艺试题及答案
- 2025年中职无人机操控与维护(飞行原理应用)试题及答案
- 2025年高职(酒店管理)前厅服务规范试题及答案
- 2025年大学化工类(化工维护保养)试题及答案
- 2025年中职(生态环境保护与修复)生态修复技术阶段测试试题及答案
- 2025年大学铁道交通运营管理(铁道运输规划)试题及答案
- 儿童组织细胞坏死性淋巴结炎诊断与治疗专家共识解读 2
- 2025体彩知识考试题及答案
- 狼和鸭子儿童故事课件
- 驳回再审裁定书申请抗诉范文
- 2025北京高三二模语文汇编:微写作
- DB6301∕T 4-2023 住宅物业星级服务规范
- 护理查房与病例讨论区别
- 土建资料管理课件
- 公司安全大讲堂活动方案
- GB/T 42186-2022医学检验生物样本冷链物流运作规范
- T/CA 105-2019手机壳套通用规范
评论
0/150
提交评论