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会话的更多相关文章

  1. 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 ...

  2. ABP官方文档翻译 0.0 ABP官方文档翻译目录

    一直想学习ABP,但囿于工作比较忙,没有合适的契机,当然最重要的还是自己懒.不知不觉从毕业到参加工作七年了,没留下点儿什么,总感觉很遗憾,所以今天终于卯足劲鼓起勇气开始写博客.有些事能做的很好,但要跟 ...

  3. ABP官方文档翻译 8.1 通知系统

    通知系统 介绍 发送模型 通知类型 通知数据 通知严重性 关于通知持久化 订阅通知 发布通知 用户通知管理 实时通知 客户端 通知存储 通知定义 介绍 在系统中通知用来基于特定的事件告知用户.ABP提 ...

  4. ABP官方文档翻译 7.3 Quartz集成

    Quartz集成 介绍 安装 创建Jobs 计划安排Jobs 更多 介绍 Quartz是一个全功能的.开源的job计划安排系统,可以用在小的apps也可以用于大型的企业系统.Abp.Quartz包简化 ...

  5. ABP官方文档翻译 6.7 CSRF/XSRF保护

    CSRF/XSRF保护 介绍 HTTP动词 非浏览器客户端 ASP.NET MVC 特征 集成 布局视图 配置 ASP.NET Web API 特征 集成 集成到ASP.NET MVC客户端 集成到其 ...

  6. ABP官方文档翻译 5.3 OData集成

    OData集成 介绍 安装 安装Nuget包 设置模块依赖 配置实体 创建控制器 配置 示例 获取实体列表 Request Response 获取单个实体 Request Response 使用导航属 ...

  7. ABP官方文档翻译 5.2 动态We API层

    动态Web APID层 创建动态Web API控制器 ForAll方法 重写ForAll ForMethods Http动词 WithVerb方法 HTTP特性 命名约定 API管理器 RemoteS ...

  8. ABP官方文档翻译 2.7 对象到对象的映射

    对象到对象的映射 介绍 IObjectMapper接口 AutoMapper集成 安装 创建映射 自动映射属性 自定义映射 MapTo扩展方法 单元测试 预定义映射 LocalizeableStrin ...

  9. ABP官方文档翻译 2.6 定时

    定时 介绍 时钟 客户端 时区 客户端 Binders和Converters 介绍 一些应用只针对一个时区,而其他的一些已用则有许多不同的时区.为了满足这样的需求和集中的时间操作,Abp提供了时间操作 ...

随机推荐

  1. bzoj:1575: [Usaco2009 Jan]气象牛Baric

    Description 为了研究农场的气候,Betsy帮助农夫John做了N(1 <= N <= 100)次气压测量并按顺序记录了结果M_1...M_N(1 <= M_i <= ...

  2. bzoj:3392: [Usaco2005 Feb]Part Acquisition 交易

    Description     奶牛们接到了寻找一种新型挤奶机的任务,为此它们准备依次经过N(1≤N≤50000)颗行星,在行星上进行交易.为了方便,奶牛们已经给可能出现的K(1≤K≤1000)种货物 ...

  3. Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2)(A.思维题,B.思维题)

    A. Vicious Keyboard time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...

  4. android仿漫画源码、抽奖转盘、Google相册、动画源码等

    Android精选源码 android实现仿今日头条的开源项目 波浪效果,实现流量的动态显示 美妆领域的app, 集成了摄像头取色, 朋友圈, 滤镜等 android仿漫画源码 android一个视差 ...

  5. win10系统下如何用命令行的方式打开画图软件

    按 win + r 后输入命令 mspaint  再 回车 即可!如下图所示:

  6. 拿到List<Map<String,String>>对用属性的值。。。。。。。

    list.get(i).get("orderNumber") 来拿到下面的对应属性的值

  7. UEP-find查询

    实体类: @Entity @Table(name = "xxxxx") public class WzInitializeStoreInfo extends EntityBean{ ...

  8. php中urldecode()和urlencode()起什么作用啊

    urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%. urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其 ...

  9. ubuntu 修复 could not open file '/etc/apt/sources.list'

    问题描述:could not open file '/etc/apt/sources.list' 问题分析:软件源被清空了,也就是 /etc/apt/sources.list 被删除了 解决问题:1. ...

  10. intent详解(一)

    摘录自:http://blog.csdn.net/harvic880925/article/details/38399723 前言:通过重新翻看Android入门书籍,才发现原来自己露掉了那么多基础知 ...