• ABP框架


    文档目录

    本节内容:

    简介

    如果一个应用需要登录,它就需要知道当前用户在执行的操作。尽管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

  • 相关阅读:
    大小写敏感性
    Select的深入应用(1)
    SQL模式匹配
    返回日期和时间范围
    利用枚举管理事务逻辑
    自动记录数据的改变时间
    操作日期和时间
    关于Rational Functional Tester (RFT)的简单介绍
    html布局 左右固定,中间只适应,三种方法实现
    js混合计算字符串字节长度
  • 原文地址:https://www.cnblogs.com/kid1412/p/5986611.html
Copyright © 2020-2023  润新知