ABP之session
ABP提供了一个IAbpSession接口,可以在不使用ASPNET的session的情况下获取当前用户和租户。IAbpSession还被ABP中的其他结构(如设置和授权系统)完全集成和使用。
注入session
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属性。
Session属性
AbpSession定义了几个关键属性:
UserId:当前用户的Id,如果没有当前用户,则为null。如果调用代码被授权,则不能为空。
TenantId:当前租户的Id,如果没有当前租户,则为null(如果用户没有登录或他是主机用户)。
ImpersonatorUserId:如果当前会话由另一个用户模拟,则模拟器用户的Id。如果这不是模拟登录,则为空。
ImpersonatorTenantId:如果当前会话由另一个用户模拟,则模拟用户的租户的Id。如果这不是模拟登录,则为空。
MultiTenancySide:它可以是主机或租户。
UserId和TenantId是可空的。还有不可空的GetUserId()和GetTenantId()方法。如果确定有当前用户,可以调用GetUserId()。如果当前用户为空,此方法将引发异常。GetTenantId()也以这种方式工作。
模拟器属性不像其他属性那么常见,通常用于审计日志记录目的。
ClaimsAbpSession
ClaimsAbpSession是IAbpSession接口的默认实现。它从当前用户主体的声明中获取会话属性(计算的MultiTenancySide除外)。对于基于cookie的表单身份验证,它从cookie获取值。因此,它完全集成到ASP.NET的身份验证机制中。
重写当前会话值
在某些特定情况下,可能需要为有限的范围更改/覆盖会话值。在这种情况下,可以使用IAbpSession。使用方法如下:
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方法,如上所示。否则,可能会得到意想不到的session值。
用户标识符
可以使用. touseridentifier()扩展方法从IAbpSession创建UserIdentifier对象。由于在许多api中都使用了UserIdentifier,这将简化为当前用户创建UserIdentifier对象。
ABP之session的更多相关文章
- ABP(现代ASP.NET样板开发框架)系列之7、ABP Session管理
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之7.ABP Session管理 ABP是“ASP.NET Boilerplate Project (ASP.NET ...
- 基于DDD的.NET开发框架 - ABP Session实现
返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...
- ABP+AdminLTE+Bootstrap Table权限管理系统第八节--ABP错误机制及AbpSession相关
上一节我们讲到登录逻辑,我做的登录逻辑很简单的,我们来看一下abp module-zero里面的登录代码. #region Login / Logout public ActionResult Log ...
- 使用 DryIoc 替换 Abp 的 DI 框架
一.背景 你说我 Castle Windsor 库用得好好的,为啥要大费周章的替换成 DryIoc 库呢?那就是性能,DryIoc 是一款优秀而且轻量级的 DI 框架,整个项目代码就两个文件,加起来代 ...
- ABP学习入门系列(四)(创建Service)
一,一些相关解释 Service 在应用服务层也就是application层.应用服务用于将领域(业务)逻辑暴露给展现层.展现层通过传入DTO(数据传输对象)参数来调用应用服务,而应用服务通过领域对象 ...
- .Net Core微服务化ABP之六——处理Authentication
上篇中我们已经可以实现sso,并且为各个服务集成sso认证.本篇处理权限系统的角色问题,权限系统分两层,第一层为整体系统角色权限,区分app用户.后台用户.网站用户的接口权限,第二层为业务系统权限,对 ...
- abp web.mvc项目中的菜单加载机制
abp中的菜单加载机制 在abp中菜单的定义与我们传统写的框架不一样,它是在编写代码的时候配置,而我们一般写的通用权限管理系统中,是后期在后台界面中添加的.这一点有很大不同.abp关于菜单的定义及管理 ...
- .net core3.1 abp动态菜单和动态权限(动态菜单实现和动态权限添加) (三)
我们来创建动态菜单吧 首先,先对动态菜单的概念.操作.流程进行约束:1.Host和各个Tenant有自己的自定义菜单2.Host和各个Tenant的权限与自定义菜单相关联2.Tenant有一套默认的菜 ...
- CQRS学习——最小单元的Cqrs(CommandEvent)[其一]
[说明:博主采用边写边思考的方式完成这一系列的博客,所以代码以附件为准,文中代码仅为了说明.] 结构 在学习和实现CQRS的过程中,首要参考的项目是这个[http://www.cnblogs.com/ ...
随机推荐
- v-cloak的用法和注意事项
v-cloak是前端框架vue.js中的一个方法,作用是为了防止在页面加载时先出现变量名闪烁的情况,造成不好的用户体验, 例如:{{ v.name}} (闪一下)=> 张三 用法:html中:& ...
- 一些关于IO流的问题
一:知识点 二:代码 1.阅读下面程序段: BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(&quo ...
- [intellij IDEA]导入eclipse项目
1.因为最近eclipse在更新代码时经常卡死,就想将eclipse的项目迁移到idea.特意写下自己的经验,给迁移时遇到困难的朋友一些帮助 File -> new ->project f ...
- SmartSql 快速使用指南
SmartSql 快速使用指南(https://github.com/Ahoo-Wang/SmartSql) ISmartSqlMapper 常用(部分)接口概述 函数 说明 Execute IDbC ...
- JavaScript引擎浅析
前言 该文章是为大家整理一个关于js的知识网络,重点是知识的罗列及之间的联系,所以实例可能会有所不足,导致可能没有对应知识的人看不懂,希望大家能够结合其他资料来学习这篇文章,并整理出自己的知识体系. ...
- JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP、IOC)
接上篇<JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构.调试.部署>,通过一个简单的JSP WEB网站了解了JAVA WEB相关的知识,比如:Ser ...
- [JavaScript] 函数节流(throttle)和函数防抖(debounce)
js 的函数节流(throttle)和函数防抖(debounce)概述 函数防抖(debounce) 一个事件频繁触发,但是我们不想让他触发的这么频繁,于是我们就设置一个定时器让这个事件在 xxx 秒 ...
- Sql万能分页代码
sql数据库中常用的分页 我做了一个万能的 用的上的小伙伴拿去耍吧 go ----万能分页代码create procedure [dbo].[sp_datapager] @pagesize int, ...
- C#实现注册表 LocalMachine 目录下CURD工具类
[1]注册表是什么? 百度百科 https://baike.baidu.com/item/%E6%B3%A8%E5%86%8C%E8%A1%A8/101856?fr=aladdin [ ...
- vs2015安装编辑神器:resharper10.0
在平时的开发工作中,作为一名程序员,难免会想办法找到适合自己的开发编辑器.这款插件来自JetBrains公司.接下来就来教大家如何对这款软件进行安装与破解. 1:首先下载与安装.如果没有找到适合的资源 ...