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/ ...
随机推荐
- 【STM32H7教程】第3章 STM32H7整体把控
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第3章 STM32H7整体把控 初学STM32H7一 ...
- 基于Spring和Mybatis拦截器实现数据库操作读写分离
首先需要配置好数据库的主从同步: 上一篇文章中有写到:https://www.cnblogs.com/xuyiqing/p/10647133.html 为什么要进行读写分离呢? 通常的Web应用大多数 ...
- 【Numpy应用】--对于图片处理的机器学习库的应用
一.思路 二.代码: #coding:utf-8 import numpy as np import PIL.Image as Image import pickle as p import os c ...
- 【TensorFlow篇】--DNN初始和应用
一.前述 ANN人工神经网络有两个或两个以上隐藏层,称为DNN 只有一个隐藏层是多层感知机 没有隐藏层是感知机 二.反向传播应用举例 举例: 正向传播,反向传播是一次迭代, 正向传播:在开始的每一层上 ...
- 【Android Studio安装部署系列】三十五、从Android studio3.0.1升级到Android studio3.1.4【以及创建android p模拟器的尝试(未成功)】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 因为想要使用Android P模拟器,所以需要将Android Studio升级到3.1版本以上. Android P模拟器的最低版 ...
- 『集群』007 如何测试Slithice源代码
如何测试Slithice源代码 直接测试 >你可以直接 进入 “集合编译区”,这里面 已经有 编译好的 所有程序集: >部署 配置数据库: >附加 集合编译区 中的 SQLServe ...
- 陪你解读Spring Batch(一)Spring Batch介绍
前言 整个章节由浅入深了解Spring Batch,让你掌握批处理利器.面对大批量数据毫无惧色.本章只做介绍,后面章节有代码示例.好了,接下来是我们的主角Spring Batch. 1.1 背景介绍 ...
- C#工具:WPF分页
1.使用ItemsControl控件 <UserControl x:Class="SunCreate.Vipf.Client.UI.CityDoor.PageControl" ...
- 菜鸟先飞C#学习总结(一)
一.第一个程序Hellow Word using System; //using 关键字用于在程序中包含 System 命名空间. 一个程序一般有多个 using 语句. using System.C ...
- idea git提交时候提示 --author 'java_suisui' is not 'Name ' and matches no existing author
今天使用idea修改git项目的作者信息,提交时遇到错误: 0 files committed, 1 file failed to commit: test --author 'java_suisui ...