问题的提出
在现有的系统中,我们希望引入ABP模块,与现有系统集成,新增加的功能由ABP模块实现。在这种情况下,ABP模块中需要使用现有系统的权限。我们需要解决的问题是ABP中如何集成现有的权限系统。
ABP的权限验证
我们先看一下ABP的权限验证。在我们已经做过的唐诗项目中,我们可以给服务方法设置权限,比如:
[AbpAuthorize("VisitCategories")]
public List<CategoryDto> GetAllCategories()
{
return _categoryRepository.GetAll().ToList().MapTo<List<CategoryDto>>();
}
如果我们运行系统,执行GetAllCategories的Web Api会提示未登录异常:
Abp.Authorization.AbpAuthorizationException:“Current user did not login to the application!”
那么,ABP是通过什么判断用户是否登录了呢?
分析ABP的源代码,发现ABP是通过IAbpSession中的用户信息数据,获取用户是否登录的。进一步分析,发现IAbpSession的是实现依赖于ClaimsPrincipal,也就是说,实际上是根据ClaimsPrincipal来判断用户是否登录的。
上面的分析,为ABP权限集成提供了思路:我们可以想办法创建ClaimsProncipal,使ABP可以获取当前的登录用户信息。下一步,我们会创建一个伪登录页面实现这个思路。