zoukankan      html  css  js  c++  java
  • ABP官方文档翻译 2.2 ABP会话

    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(42, null))
            {
                var tenantId = _session.TenantId; //42
                var userId = _session.UserId; //null
            }
        }
    }

      Use方法返回IDisposable并且必须被处理。一旦返回值被处理,会话值自动恢复为之前的值。

      警告!

      总是在using块中使用它,如上所示。否则,可能会得到异常的会话值。可以嵌套Use块,他们可以按预期的工作。

    用户标示

      可以使用.ToUserIdentifier()扩展方法从IAbpSession创建用户标示对象。因为用户标示在大多数API中使用,这将简化为当前用户创建一个用户标示。

     

    返回主目录

  • 相关阅读:
    Android WebView 获取网页的标题
    Android APK 文件自动安装
    DownloadManager 的使用
    Android Java 自定义异常
    Android NDK
    android assets文件夹资源的访问
    GitHub 基本常用知识解答2
    hbuilder egit插件的安装使用--项目文件丢失的教训
    微软收购跨平台移动应用开发商Xamarin
    Android Study 之 初识ButterKnife(8.5.1)及简单运用
  • 原文地址:https://www.cnblogs.com/xajh/p/6770709.html
Copyright © 2011-2022 走看看