/
------2016-05-15
/
------介绍
如果一个应用支持登录,也许需要知道当前登录用户的一些操作,然而ASP.NET 本身对于展现层提供了Session的支持,ABP提供了 IAbpSession 接口可以在任何地方获取(obtain)当前用户和租户
------关于IAbpSession
这个接口必须被实现以获得现行的Session信息,然而你也可以用你自己的方式去实现它,它在 module-zero 项目中被完整的实现了
IAbpSession 在ABP中也被其他的结构完全整合和使用(对于这个实例配置系统 和授权系统)
------注入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(通常我们不要使用它在领域层),Application,AbpController 和AbpApiController 已经注入AbpSession ,因此你在应用服务中可以直接使用AbpSession的属性
Session 属性
AbpSession 定义了一些关键属性
▪UserId 当前用户的Id,如果没有则为null ,如果执行代码之前被授权,它不会为null
▪TenatnId 当前租户的id 没有则为null
▪ImpersonatorUserId
▪ImpersonatorTenantId
▪MultiTenancySide
Userid 和 TenantId 可空,也有非空的方法 GetUserId()和GetTenantId() 方法,如果你确定存在当前用户,你可以调用GetUserId(),如果当前用户为null,这个方法将抛出异常,GetTenantId()也同样如此。
Impersonator 属性并不常见,一般用于审计日志中。
User Identifier
你可以在 IAbpSession中 使用 .ToUserIdentifier() 扩展方法去创建一个 UserIdentifier 对象,自从UserIdentifier 在众多的API中被使用 ,这将很容易为当前用户创建一个用户标识