(译)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,一个学生实体.一个学校实体. 学校里面可以有很多学生,学生有一个学校. 实体如下: 学校 ...
随机推荐
- Django项目实践4 - Django网站管理(后台管理员)
http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类 ...
- redis 简单安装使用
官方站点:http://redis.io/ 官方下载:http://redis.io/download 能够依据须要下载不同版本号 windows版:https://github.com/mythz/ ...
- xml概述(1)
本节要点: 标记语言的定义 XML简介 XML与HTML 比较 XML与数据库比较 XML的特点 XML结构 1 标记语言的定义 "XML.SGML.HTML"中的"ML ...
- GPU版的tensorflow在windows上的安装时的错误解决方案
1.用vs编译cuda的sample时会提示找不到"d3dx9.h"."d3dx10.h"."d3dx11.h"头文件的错误,如果没有安装这 ...
- 图片验证码(Struts2中使用)
写在前面: 最近在项目中做了一个登录页面,用到了图片验证码的功能,所以记录一下.方便之后再有用到,直接拿来用即可.其实图片验证码的生成都是有固定步骤的,网上也有很多的例子,有的时候,如果不想深究,都是 ...
- 【MySQL】查看字符集对应的校对规则show collation like 'gbk%';
- iOS 本地项目上传github,github管理项目配置
一.注册github账号 首先需要注册一个github账号,注册地址:https://github.com 接着会来到这 然后会收到一封github发的邮件,进入邮箱验证 二.创建个人的githu ...
- Akka Cluster简介与基本环境搭建
akka集群是高容错.去中心化.不存在单点故障以及不存在单点瓶颈的集群.它使用gossip协议通信以及具备故障自动检测功能. Gossip收敛 集群中每一个节点被其他节点监督(默认的最大数量为 ...
- 强推一款开源集成开发环境——Geany
本人是一个标标准准的程序员,集成开发环境在电脑上大概看一下有:Code Blocks(C/C++),VS(C#,C/C++),eclipse(Java),Hbuild和web storm(前端),py ...
- 程序员的自我救赎---11.4:FileSystem文件服务
<前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...