下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 42596.4-2024机床安全压力机第4部分:气动压力机安全要求
- 技术经济学课件-不确定性分析
- 妊娠合并甲状腺功能减退的临床护理
- 类丹毒的临床护理
- 《机械设计基础》课件-第10章
- 银屑病的临床护理
- 《证券经纪人培训》课件
- JJF(陕) 010-2019 标准厚度块校准规范
- 《计算器定时器》课件
- 制定图文并茂的工作计划
- GB/T 5534-2024动植物油脂皂化值的测定
- 幼儿园手足口病教师培训
- 超市安保人员工作管理制度
- 2024时事政治考试100题及参考答案
- 2024年职业健康素养考试题库及答案
- 2024年山东省青岛市中考地理试题卷(含答案及解析)
- 《技术规程》范本
- 重点语法清单2024-2025学年人教版英语八年级上册
- 红色简约中国英雄人物李大钊课件
- 人民日报出版社有限责任公司招聘笔试题库2024
- 2024年煤矿事故汇编
评论
0/150
提交评论