ABP官方文档翻译 2.2 ABP会话
ABP会话
介绍
如果应用需要登录的话,同样也需要知道当前用户可以执行哪些操作。ABP在展现层提供了会话对象,同时ABP提供了IAbpSession接口获取当前用户和租户,不需要使用ABP会话。
关于IAbpSession
为了能活真正的会话信息,IAbpSession接口必须被实现。可以用自己的方式实现它,在 module-zero工程里有这个接口的完整实现。
IAbpSession也在ABP其他的结构中完全集成和使用(例如设置系统和授权系统)。
注入会话
IAbpSession通常通过属性注入到需要的类,除非这个类没有会话信息不能工作。如果我们使用属性注入,我们可以使用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属性获得实例。
会话属性
AbpSession定义了一些关键属性:
- UserId:当前用户的Id或者为null,如果没有当前用户的话。如果调用代码是授权的,那么它就不可能为null。
- TenantId:当前租户的Id或者为null,如果没有当前租户(如用户没有登录或者当前用户是租主用户)。
- ImpersonatorUserId:模拟用户的Id,如果当前会话是另一个用户模拟登录。如果不是模拟用户登录则为null。
- ImpersonatorTenantId:模拟用户租户的Id,如果当前会话是另一个用户模拟登录。如果不是模拟用户登录则为null。
- MultiTenancySide:它可能是租主或租户。
UserId和TenantId是nullable类型。有GetUserId() 和GetTenantId()两个非null的方法。如果确定有当前用户,可以调用GetUserId()。如果当前用户是null,这个方法会抛出异常。GetTenantId()方法类似。
模拟属性并不如其他属性常见,通常用在审计日志。
覆盖当前会话值
在一些特殊例子中,可能需要更在一个有限的范围改/覆盖属性值。在这种情况下,可以使用IAbpSession.Use方法,如下:
public class MyService
{
private readonly IAbpSession _session; public MyService(IAbpSession session)
{
_session = session;
} public void Test()
{
using (_session.Use(, null))
{
var tenantId = _session.TenantId; //
var userId = _session.UserId; //null
}
}
}
Use方法返回IDisposable并且必须被处理。一旦返回值被处理,会话值自动恢复为之前的值。
警告!
总是在using块中使用它,如上所示。否则,可能会得到异常的会话值。可以嵌套Use块,他们可以按预期的工作。
用户标示
可以使用.ToUserIdentifier()扩展方法从IAbpSession创建用户标示对象。因为用户标示在大多数API中使用,这将简化为当前用户创建一个用户标示。
ABP官方文档翻译 2.2 ABP会话的更多相关文章
- ABP官方文档翻译 10.1 ABP Nuget包
ABP Nuget包 Packages Abp Abp.AspNetCore Abp.Web.Common Abp.Web Abp.Web.Mvc Abp.Web.Api Abp.Web.Api.OD ...
- ABP官方文档翻译 0.0 ABP官方文档翻译目录
一直想学习ABP,但囿于工作比较忙,没有合适的契机,当然最重要的还是自己懒.不知不觉从毕业到参加工作七年了,没留下点儿什么,总感觉很遗憾,所以今天终于卯足劲鼓起勇气开始写博客.有些事能做的很好,但要跟 ...
- ABP官方文档翻译 8.1 通知系统
通知系统 介绍 发送模型 通知类型 通知数据 通知严重性 关于通知持久化 订阅通知 发布通知 用户通知管理 实时通知 客户端 通知存储 通知定义 介绍 在系统中通知用来基于特定的事件告知用户.ABP提 ...
- ABP官方文档翻译 7.3 Quartz集成
Quartz集成 介绍 安装 创建Jobs 计划安排Jobs 更多 介绍 Quartz是一个全功能的.开源的job计划安排系统,可以用在小的apps也可以用于大型的企业系统.Abp.Quartz包简化 ...
- ABP官方文档翻译 6.7 CSRF/XSRF保护
CSRF/XSRF保护 介绍 HTTP动词 非浏览器客户端 ASP.NET MVC 特征 集成 布局视图 配置 ASP.NET Web API 特征 集成 集成到ASP.NET MVC客户端 集成到其 ...
- ABP官方文档翻译 5.3 OData集成
OData集成 介绍 安装 安装Nuget包 设置模块依赖 配置实体 创建控制器 配置 示例 获取实体列表 Request Response 获取单个实体 Request Response 使用导航属 ...
- ABP官方文档翻译 5.2 动态We API层
动态Web APID层 创建动态Web API控制器 ForAll方法 重写ForAll ForMethods Http动词 WithVerb方法 HTTP特性 命名约定 API管理器 RemoteS ...
- ABP官方文档翻译 2.7 对象到对象的映射
对象到对象的映射 介绍 IObjectMapper接口 AutoMapper集成 安装 创建映射 自动映射属性 自定义映射 MapTo扩展方法 单元测试 预定义映射 LocalizeableStrin ...
- ABP官方文档翻译 2.6 定时
定时 介绍 时钟 客户端 时区 客户端 Binders和Converters 介绍 一些应用只针对一个时区,而其他的一些已用则有许多不同的时区.为了满足这样的需求和集中的时间操作,Abp提供了时间操作 ...
随机推荐
- Codeforces 626B Cards(模拟+规律)
B. Cards time limit per test:2 seconds memory limit per test:256 megabytes input:standard input outp ...
- Educational Codeforces Round 2_B. Queries about less or equal elements
B. Queries about less or equal elements time limit per test 2 seconds memory limit per test 256 mega ...
- sass 安装
最近在安装sass的过程中遇到 了一下问题,总结一下安装过程. windows下sass的安装是依赖于ruby的,所以要先安装rubyinstaller,下载地址:https://rubyinstal ...
- input框type=file设置cursor:pointer的问题
为了让美化上传文件框,设置了cursor:pointer;,然而不起作用,然后百度找到了解决方法,设置font-size:0,这样就可以了.
- java小入门的感觉
工作两三年,.NET与Java都干过,也都是应付差事,用着现有的框架,现有的规范,实现简单的功能,有余力的情况下,看看框架中的代码,欣赏一下前辈们的心血,居然在单位也算有心的了?! 最近的JAVA项目 ...
- Centos6.7安装mysql 5.6简单教程
今天项目经理让我给服务器配一下mysql,以前配置mysql的时候,感觉好麻烦,前几天也帮朋友配置来着,今天装的时候一直报错,百度也没搞明白,所以打算换种方法装mysql,无意中发现了还有这种操作,容 ...
- Redis进阶实践之六Redis Desktop Manager连接Windows和Linux系统上的Redis服务
一.引言 今天本来没有打算写这篇文章,当初我感觉使用这个工具应该很简单,下载的过程也不复杂,也没有打算记录下来.但是在使用的过程中还是出现了一些问题,为了给第一次使用Redis Desktop Man ...
- geotools实现多边形的合并&缓冲区
这算是第一次接触开源工具包,说实话刚开始有点不知所措,中途遇到很多问题的时候也感觉头皮发麻,不过很高兴自己还是坚持下来了. geotools就不做过多的介绍了,想总结一下如何根据开源内容做自己的项目. ...
- CSS容器属性
最近一直想美化博客的文字效果和增加文章末尾的转发提示,所以这两天抽空研究了一下CSS,前两篇可以翻我的博客,今天写的这篇是介绍增加文章末尾的转发提示,效果如文章末尾所示,好了,CSS很简单,我就不介绍 ...
- Spring的RestTemplata使用
spring-web的RestTemplata是对java底层http的封装,使用RestTemplata用户可以不再关注底层的连接建立,并且RestTemplata不仅支持Rest规范,还可以定义返 ...