(译)ABP之Abp Session
原文地址:https://aspnetboilerplate.com/Pages/Documents/Abp-Session
介绍
ABP提供IAbpSession接口获取当前用户和租户信息,而不是使用ASP.NET的Session。在ABP中,IAbpSession也被其他结构完全集成和使用。(例如设置系统和授权系统)。
注入Session
在需要用到IAbpSession的类中,通常是通过属性注入的,除非在没有Session信息时它不能运行。如果我们用属性注入,我们可以用NullAbpSession.Instance作为默认值,如下所示:
public class MyClass : ITransientDependency
{
public IAbpSession AbpSession { get; set; }
public MyClass()
{
AbpSession = NullAbpSession.Instance;
}
public void MyMethod()
{
var currentUserId = AbpSession.UserId;
//...
}
}
因为验证/授权是一个应用层任务,建议在应用层和上层模块使用IAbpSession(我们一般在领域层不用它),ApplicationService,AbpController,AbpApiController和其它一些基层类已经注入了AbpSession,因此,例如在你的应用服务方法里可以直接使用AbpSession属性。
Session属性
AbpSession定义了一些关键属性:
- UserId:当前用户的Id,或者没有当前用户时为null,如果调用了授权方法,它就不可能为null。
- TenantId:当前租户Id,或者没有当前租户时为null(如果用户没有登录或者他不是主用户)。
- ImpersonatorUserId:如果当前session是由其它用户模拟的,则是模拟用户的Id,如果没有模拟登录,就为null。
- ImpersonatorTenantId:如果当前session是由其它用户模拟的,则是模拟用户的租户Id,如果没有模拟登录,就为null。
- MultiTenancySide:它可能是Host或者Tenant。
UserId和TenantId为可空类型,同样也有非空类型的GetUserId()和GetTenantId()方法,如果你确定一定存在一个当前用户,那你就可以调用GetUserId()方法;如果当前用户为null,调用这个方法就会抛异常,GetTenantId()方法也类似。
模拟者属性与其他属性不一样,它通常是用来作审计日志用的。
ClaimsAbpSession
ClaimsAbpSession默认实现了IAbpSession接口,它从当前用户的声明中获取session属性(除了MultiTenancySide,它是计算出来的)。对于基于表格验证的cookie,它就是从cookie里获取的,因此,它很好地集成到ASP.Net的验证机制里了。
覆盖当前Session的值
在有些特定情况下,在一定作用域里,你可能需要改变或覆盖session的值。在这种情况下,你可以像下面这样使用IAbpSession.Use方法:
public class MyService
{
private readonly IAbpSession _session;
public MyService(IAbpSession session)
{
_session = session;
}
public void Test()
{
using (_session.Use(42, null))
{
var tenantId = _session.TenantId; //42
var userId = _session.UserId; //null
}
}
Use方法返回一个IDisposable对象,而且它必须释放掉,一旦返回的值是可以释放的,session的值就会自动恢复到它之前的值。
警告
应该像上面的代码一样一定要使用using块,否则,你可能取到的session值不是预期中的值。你可以嵌套Use块,它们还是如你所预期的正常运行。
User Identifier
你可以使用.ToUserIdentifier()扩展方法从IAbpSession创建一个UserIdentifier对象,因为在大部分API里有使用UserIdentifier,这将让你为当前用户创建UserIdentifier对象变得很简单。
(译)ABP之Abp Session的更多相关文章
- [译][ABP vNext]ABP CLI,v0.18版本的新模板和其他功能
ABP CLI,v0.18版本的新模板和其他功能 ABP v0.18已发布, 包含解决的70+个issue,500+次提交 网站更改 abp.io网站完全更新以突出ABP框架的目标和重要功能.文档和博 ...
- ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十六节--SignalR与ABP框架Abp.Web.SignalR及扩展
SignalR简介 SignalR是什么? ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能是指 ...
- 后台工作者HangFire与ABP框架Abp.Hangfire及扩展
HangFire与Quartz.NET相比主要是HangFire的内置提供集成化的控制台,方便后台查看及监控,对于大家来说,比较方便. HangFire是什么 Hangfire是一个开源框架(.NET ...
- ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十七节--Quartz与ABP框架Abp.Quartz及扩展
ABP+AdminLTE+Bootstrap Table权限管理系统一期 Github:https://github.com/Jimmey-Jiang/ABP-ASP.NET-Boilerplate- ...
- ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十四节--后台工作者HangFire与ABP框架Abp.Hangfire及扩展
返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期 HangFire与Quartz.NET相比主要是HangFire的内置提供集成化的控制台,方便后台查看及监控,对于 ...
- 手动从0搭建ABP框架-ABP官方完整解决方案和手动搭建简化解决方案实践
本文主要讲解了如何把ABP官方的在线生成解决方案运行起来,并说明了解决方案中项目间的依赖关系.然后手动实践了如何从0搭建了一个简化的解决方案.ABP官方的在线生成解决方案源码下载参考[3],手动搭 ...
- 如何用ABP框架快速完成项目(3) - 为什么要使用ABP和ABP框架简介
首先先讲为什么要使用ABP? 当然是因为使用ABP可以快速完成项目啦. 时间就是金钱, 效率就是生命嘛 有了ABP, 你就节省了写如下模块的时间: CRUD数据库基本操作 校验 异常处理 日志 权 ...
- 【ABP】ABP跨域调用API时出现的问题
public override void Initialize() { IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAss ...
- ABP 数据库 -- ABP&EF中的多表、关联查询
本文介绍一下ABP中的多表查询. 1.创建实体 多表查询,在ABP或者EF中都很简单,这里我们创建一个Demo,一个学生实体.一个学校实体. 学校里面可以有很多学生,学生有一个学校. 实体如下: 学校 ...
随机推荐
- Android之通过网络播放一首简单的音乐
首先,附上程序执行后的效果.例如以下图所看到的: 一.部署一个web项目到tomcatserver上: 1.这个小程序是结合网络来播放一首音乐的,首先,把我们搞好的一个web项目放置在tomcat安装 ...
- Hadoop之SequenceFile
Hadoop序列化文件SequenceFile能够用于解决大量小文件(所谓小文件:泛指小于black大小的文件)问题,SequenceFile是Hadoop API提供的一种二进制文件支持.这样的二进 ...
- linux 磁盘管理三部曲——(1)磁盘结构,认识分区
最近小编整理了磁盘管理的相关知识,发现还是挺多的,所有就分了三个部分来给大家分享一下: 1.磁盘结构,认识分区 2.管理分区,文件系统格式化 3.mount挂载,/etc/fstab配置文件 这篇就先 ...
- Docker-py 的使用
Docker SDK for Python A Python library for the Docker Engine API 具体文档这里,https://docker-py.readthedoc ...
- intellij安装lombok插件,解决注解@Slf4j注入后找不到变量log
1.进入设置 2.搜索插件 3.安装
- linux部署服务器遇到tomcat already start
linux部署服务器遇到tomcat already start 前言,之前做了个汽车停车计费的后端,然后现在需要部署到服务器.正常部署,使用secureFx找到所属webapps目录,将文件上传.然 ...
- 字符截取:cut,格式化输出:printf,字符截取:awk,文件或命令输出编辑:sed
cut 选项 文件名 -f 列号 提取第几列 -d 分隔符 指定分隔符把行分成多列 不能以空格为分隔符. [root@localhost ~]# cat testfile no. name sex s ...
- 转:Siri之父:语音交互或将主导未来十年发展
http://zhinengjiaohu.juhangye.com/201709/weixin_5664458.html Siri之父Adam Cheyer认为,语音交互很可能是未来十年内计算技术的一 ...
- jstree 学习
最近的项目用到了jstree,因为对官方文档理解不充分,所以很多功能都是在网站上搜索再进行使用的.(我只是大自然的搬运工) 对每一级的节点,右键后出现不同的结果. 在jstree中右键是由 conte ...
- bzoj 3670: [Noi2014]动物园
Description 近日,园长发现动物园中好吃懒做的动物越来越多了.例如企鹅,只会卖萌向游客要吃的.为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习 ...