文档目录

本节内容:

简介

如果一个应用需要登录,它就需要知道当前用户在执行的操作。尽管Asp.net自身在展现层提供了Session(会话)对象,而ABP提供IAbpSession接口来获取当前用户和租户,而不用Asp.net的Session。

关于 IAbpSession

必须实现IAbpSession接口,以便获取真实的会话信息。尽管你可以用自己的方式实现它,但在module-zero项目里已经完全地实现了。

IAbpSession同样可完全地集成到Abp里并用在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或空(如果没有当前用户),如果调用需要授权的代码,它就不能为空。
  • TenantId:当前租户的Id或空(如果没有当前租户:尚未登录或是个宿主用户)。
  • ImpersonatorUserId:模拟用户的Id(如果其它用户模拟当前会话),如果不是模拟登录就为空。
  • ImpersonatorTenantId:模拟用户的租户的Id(如果其它用户模拟当前会话),如果不是模拟登录就为空。
  • MultiTenancySide:可能是宿主或租户。

UserId和TenantId都可为空,有不可为空的方法GetUserId和GetTenantId,如果你能确保有当前用户,你可以调用GetUserId()。如果当前用户为空,这个方法抛出异常,GetTenantId()雷同。

Impersonator(模拟)属性与其它属性不能共同使用,一般只为了审核日志的目的才用它。

用户标识符

你可用.ToUserIdentifier()扩展方法,从IAbpSession创建一个UserIdentifier对象。由于UserIdentifier用在众多的API里,所以这将简化为当前用户创建一个UserIdentifier。

kid1412注:英文原文:http://www.aspnetboilerplate.com/Pages/Documents/Abp-Session

ABP框架 - 会话的更多相关文章

  1. ABP框架 - N层架构

    目录 介绍 DDD分层 ABP架构模型 客户端 展现层 分布式服务层 应用层 领域层 基础设施层 介绍 在应用程序设计中,分层架构是一种被广泛使用的技术,它助于降低复杂度和提高代码的可重用性.在ABP ...

  2. ABP框架系列之三十四:(Multi-Tenancy-多租户)

    What Is Multi Tenancy? "Software Multitenancy refers to a software architecture in which a sing ...

  3. 基于ABP框架的SignalR,使用Winform程序进行功能测试

    在ABP框架里面,默认会带入SignalR消息处理技术,它同时也是ABP框架里面实时消息处理.事件/通知处理的一个实现方式,SignalR消息处理本身就是一个实时很好的处理方案,我在之前在我的Winf ...

  4. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  5. 一步一步使用ABP框架搭建正式项目系列教程

    研究ABP框架好多天了,第一次看到这个框架的名称到现在已经很久了,但由于当时内功有限,看不太懂,所以就只是大概记住了ABP这个名字.最近几天,看到了园友@阳光铭睿的系列ABP教程,又点燃了我内心要研究 ...

  6. C#高级知识点&(ABP框架理论学习高级篇)——白金版

    前言摘要 很早以前就有要写ABP高级系列教程的计划了,但是迟迟到现在这个高级理论系列才和大家见面.其实这篇博客很早就着手写了,只是楼主一直写写停停.看看下图,就知道这篇博客的生产日期了,谁知它的出厂日 ...

  7. 高薪诚聘熟悉ABP框架的.NET高级开发工程师(2016年7月28日重发)

    招聘单位是ABP架构设计交流群(134710707)群主阳铭所在的公司-上海运图贸易有限公司 招聘岗位:.NET高级开发工程师工作地点:上海-普陀区 [公司情况]上海运图贸易有限公司,是由易迅网的创始 ...

  8. ABP框架实践基础篇之开发UI层

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 说明 其实最开始写的,就是这个ABP框架实践基础篇.在写这篇博客之前,又回头复习了一下ABP框架的理论,如果你还没学习,请查看AB ...

  9. 一步一步使用ABP框架搭建正式项目系列教程之本地化详解

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 本篇目录 扯扯本地化 ABP中的本地化 小结 扯扯本地化 本节来说说本地化,也有叫国际化.全球化的,不管怎么个叫法,反正道理都是一 ...

随机推荐

  1. HttpClient的替代者 - RestTemplate

    需要的包 ,除了Spring的基础包外还用到json的包,这里的数据传输使用json格式 客户端和服务端都用到一下的包 <!-- Spring --> <dependency> ...

  2. TDD在Unity3D游戏项目开发中的实践

    0x00 前言 关于TDD测试驱动开发的文章已经有很多了,但是在游戏开发尤其是使用Unity3D开发游戏时,却听不到特别多关于TDD的声音.那么本文就来简单聊一聊TDD如何在U3D项目中使用以及如何使 ...

  3. RestTemplate发送请求并携带header信息

    1.使用restTemplate的postForObject方法 注:目前没有发现发送携带header信息的getForObject方法. HttpHeaders headers = new Http ...

  4. Yeoman 官网教学案例:使用 Yeoman 构建 WebApp

    STEP 1:设置开发环境 与yeoman的所有交互都是通过命令行.Mac系统使用terminal.app,Linux系统使用shell,windows系统可以使用cmder/PowerShell/c ...

  5. Autofac - MVC/WebApi中的应用

    Autofac前面写了那么多篇, 其实就是为了今天这一篇, Autofac在MVC和WebApi中的应用. 一.目录结构 先看一下我的目录结构吧, 搭了个非常简单的架构, IOC(web), IBLL ...

  6. Cesium简介以及离线部署运行

    Cesium简介 cesium是国外一个基于JavaScript编写的使用WebGL的地图引擎,一款开源3DGIS的js库.cesium支持3D,2D,2.5D形式的地图展示,可以自行绘制图形,高亮区 ...

  7. 【iOS10 SpeechRecognition】语音识别 现说现译的最佳实践

    首先想强调一下“语音识别”四个字字面意义上的需求:用户说话然后马上把用户说的话转成文字显示!,这才是开发者真正需要的功能. 做需求之前其实是先谷歌百度一下看有没有造好的轮子直接用,结果真的很呵呵,都是 ...

  8. Mysql - 触发器/视图

    触发器在之前的项目中, 应用的着实不多, 没有办法的时候, 才会去用这个. 因为这个东西在后期并不怎么好维护, 也容易造成紊乱. 我最近的项目中, 由于数据库设计(别人设计的)原因, 导致一些最简单功 ...

  9. [Hadoop in Action] 第7章 细则手册

    向任务传递定制参数 获取任务待定的信息 生成多个输出 与关系数据库交互 让输出做全局排序   1.向任务传递作业定制的参数        在编写Mapper和Reducer时,通常会想让一些地方可以配 ...

  10. .NET跨平台:在Ubuntu上用自己编译的dnx运行ASP.NET 5示例程序

    在 Linux Ubuntu 上成功编译 dnx 之后,会在 artifacts/build/ 文件夹中生成 dnx-coreclr-linux-x64/ 与 dnx-mono/ 这2个文件夹,前者是 ...