本篇目录
介绍###
当应用程序要求用户登录时,那么应用程序也需要知道当前用户正在执行的操作。虽然ASP.NET本身在展现层提供了Session对象,但ABP也提供了在任何需要获得当前用户和租户的地方都可以使用的IAbpSession接口。
关于IAbpSession
为了获得实际的session信息,必须要实现IAbpSession接口。虽然你可以用自己的方式实现它,但在module-zero项目中已经完全实现。
IAbpSession已经完全集成到ABP(实例的设置系统和授权系统)中。
注入Session###
IAbpSession一般属性注入到需要的类中,除非没有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定义了一些key属性:
- UserId:当前用户的Id。值为null,表示当前的用户不存在。如果调用的代码授权给某个用户的话,那么值不为null。
- TenantId:当前租户的Id。如果当前的租户不存在,值就为null。
- MultiTenancySide:可能是Host(租主)或者Tenant(租户)。
UserId和TenantId是nullable(可空的),也存在不可空的GetUserId()和 GetTenantId()方法。如果你确定当前的用户存在,那么你可以调用GetUserId()。如果当前的用户为null,那么该方法就会抛异常。GetTanantId()也是类似的。