ABP Zero模块通过自定义实现Asp.Net Identity完成身份认证功能, 对Asp.Net Identity做了较大幅度的扩展。同时重写了ABP核心模块中的permission功能,以实现授权。注意:ABP仅仅使用了Asp.Net Identity的身份认证功能,但没有使用Asp.Net Identity中的基于role和Claim的授权。

ABP Zero 中扩展的Asp.Net Identity实体类: AbpUser, AbpRole。

AbpUser: 代表user的Entity。其实现了Asp.Net Identity的IUser接口。

AbpRole: 代表role的Entity。其实现了Asp.Net Identity的IRole接口。一个role代表一组权限。ABP建议检查user的permission而非role以判断user是否可以执行某个操作。


ABP Zero 中扩展Asp.Net Identity重管理实体的类: AbpUserStore, AbpUserManager,AbpRoleStore,AbpRoleManager。

AbpUserStore:主要实现了ASP.NET Identity Framework中与user操作相关的接口:IUserPasswordStore<TUser, long>,IUserEmailStore<TUser, long>,IUserLoginStore<TUser, long>,IUserRoleStore<TUser, long>,IQueryableUserStore<TUser, long>。

同时也实现了IUserPermissionStore<TTenant, TUser>接口。该类通过IRepository<TUser, long>,IRepository<UserLogin, long>,IRepository<UserRole, long>,IRepository<TRole>,IRepository<UserPermissionSetting, long>实例完成User实体的CRUD操作以及与User关联关系的CRUD操作。

AbpUserManager:继承扩展了ASP.NET Identity Framework中UserManager<TUser, long>类。实现了与User相关的领域服务。

AbpRoleStore:其实现了Asp.Net Identity的IQueryableRoleStore接口。 通过IRepository<TRole>,IRepository<UserRole, long>和IRepository<RolePermissionSetting, long>实例完成Role及与role相关的permission/user实体的CRUD操作。

AbpRoleManager<TTenant, TRole, TUser>:继承自Asp.Net Identity的RoleManager<TRole, int>类。这是一个抽象类,实际项目需要指定具体的TTenant, TRole, TUser类型来扩展这个抽象类。该抽象类实现了与Role相关的领域逻辑。


其它类

UserRole:实现了CreationAuditedEntity<long>的实体类。描述User 和 Role的关系。

PermissionSetting:代表user/role 和 permission的关系实体类

OrganizationUnit:实现了FullAuditedEntity<long>的实体类,用于表示Organization的实体

UserOrganizationUnit:实现了 CreationAuditedEntity<long>的实体类。表示user 和 Organization的关联关系。

UserLogin:实体类用于保存通过外部授权服务授权的用户的登入信息。

RolePermissionCacheItem:这个类实例被用于缓存,其HashSet<string>类型的GrantedPermissions和ProhibitedPermissions对象用于保存role的权限

UserPermissionCacheItem:这个类实例被用于缓存,其HashSet<string>类型的GrantedPermissions和ProhibitedPermissions对象用于保存user的权限

PermissionEqualityComparer : 实现了IEqualityComparer<Permission>接口中的Equal和GetHashCode方法,用于比较两个permission.

AbpRolePermissionCacheItemInvalidator:用于定义响应RolePermissionSetting和AbpRoleBase实体改变事件的处理函数。实际完成的工作就是将相应的缓存对象从缓存中删除。

AbpUserPermissionCacheItemInvalidator:用于定义响应UserPermissionSetting,UserRole和AbpUser实体改变事件的处理函数。实际完成的工作就是将相应的缓存对象从缓存中删除。

DefaultExternalAuthenticationSource<TTenant, TUser>/IExternalAuthenticationSource<TTenant, TUser>:通过外部身份认证源(比如Facebook)的认证信息创建User.

PermissionChecker:继承自IPermissionChecker,检查user是否被授予了某个权限。

IMayHaveOrganizationUnit:如果entity可能和Organization有关联,就可以考虑实现该接口。

IMustHaveOrganizationUnit:如果entity一定和Organization有关联,就可以考虑实现该接口。

IOrganizationUnitSettings:定义了一项和OrganizationUnit相关的设置:MaxUserMembershipCount,以及获取和修改MaxUserMembershipCount的方法。

OrganizationUnitSettings:通过settingManager实现了IOrganizationUnitSettings定义的属性和方法

OrganizationUnitManager:实现与OrganizationUnit相关的领域逻辑。使用IRepository<OrganizationUnit, long>实例完成OrganizationUnit实体的CRUD操作。

IdentityFrameworkClaimsAbpSession : 继承自ClaimsAbpSession。通过 ASP.NET Identity framework接口获取当前用户的userID

IdentityResultExtensions:为ASP.NET Identity 的IdentityResult类型添加了如下的扩展方法。这些方法主要用于本地化error message.

IdentityResultExtensions定义了一个用于map消息和本地化资源文件中key的字典对象,这个字典对象帮助获取消息的本地化后的消息。

返回ABP源码分析系列文章目录

ABP源码分析四十二:ZERO的身份认证的更多相关文章

  1. ABP源码分析三十二:ABP.SignalR

    Realtime Realtime是ABP底层模块提供的功能,用于管理在线用户.它是使用SignalR实现给在线用户发送通知的功能的前提 IOnlineClient/OnlineClient: 封装在 ...

  2. ABP源码分析四十:ZERO的Application和Tenant

    ABP的Zero模块以数据库为数据源实现了ABP框架中的tenant management (multi-tenancy), role management, user management, ses ...

  3. ABP源码分析四十四:ZERO的配置

    ABP Zero模块中需要配置的地方主要集中在三块:配置静态的role,配置外部认证源,以及配置本地化语言和资源. UserManagementConfig/IUserManagementConfig ...

  4. ABP源码分析四十五:ABP ZERO中的EntityFramework模块

    AbpZeroDbContext:配置ABP.Zero中定义的entity的Dbset EntityFrameworkModelBuilderExtensions:给PrimitiveProperty ...

  5. ABP源码分析四十六:ABP ZERO中的Ldap模块

    通过AD作为用户认证的数据源.整个管理用户认证逻辑就在LdapAuthenticationSource类中实现. LdapSettingProvider:定义LDAP的setting和提供Defaut ...

  6. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  7. ABP源码分析三十四:ABP.Web.Mvc

    ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...

  8. ABP源码分析四:Configuration

    核心模块的配置 Configuration是ABP中设计比较巧妙的地方.其通过AbpStartupConfiguration,Castle的依赖注入,Dictionary对象和扩展方法很巧妙的实现了配 ...

  9. ABP源码分析四十七:ABP中的异常处理

    ABP 中异常处理的思路是很清晰的.一共五种类型的异常类. AbpInitializationException用于封装ABP初始化过程中出现的异常,只要抛出AbpInitializationExce ...

随机推荐

  1. 如何一步一步用DDD设计一个电商网站(五)—— 停下脚步,重新出发

    阅读目录 前言 单元测试 纠正错误,重新出发 结语 一.前言 实际编码已经写了2篇了,在这过程中非常感谢有听到观点不同的声音,借着这个契机,今天这篇就把大家提出的建议一个个的过一遍,重新整理,重新出发 ...

  2. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  3. Webstorm+Webpack+echarts构建个性化定制的数据可视化图表&&两个echarts详细教程(柱状图,南丁格尔图)

    Webstorm+Webpack+echarts   ECharts 特性介绍 ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(I ...

  4. Intellij idea添加单元测试工具

    1.idea 版本是14.0.0 ,默认带有Junit,但是不能自动生成单元测试,需要下载JunitGererator2.0插件 2.Settings -Plugins,下载 JunitGenerat ...

  5. 如何利用ETW(Event Tracing for Windows)记录日志

    ETW是Event Tracing for Windows的简称,它是Windows提供的原生的事件跟踪日志系统.由于采用内核(Kernel)层面的缓冲和日志记录机制,所以ETW提供了一种非常高效的事 ...

  6. shiro权限管理框架与springmvc整合

    shiro是apache下的一个项目,和spring security类似,用于用户权限的管理‘ 但从易用性和学习成本上考虑,shiro更具优势,同时shiro支持和很多接口集成 用户及权限管理是众多 ...

  7. stringstream的基本用法

    原帖地址:https://zhidao.baidu.com/question/580048330.htmlstringstream是字符串流.它将流与存储在内存中的string对象绑定起来.在多种数据 ...

  8. Android Studio:Failed to resolve ***

    更换电脑后,也更新了所有的SDK的tool,仍然报错:Failed to resolve  各种jar包,出现这种问题主要是因为在Android studio中默认不允许在线更新,修改方法如下:

  9. 【微信SEO】公众号也能做排名?

    [写于2016年8月] 最近,微信团队发出一则公告,开放公众号运营者一年内更改公众号名一次,这对不少名字起的奇葩名字(包括dkplus)的公众号来说是一件好事. 为什么说是好事呢?公众号名字直接关联到 ...

  10. 用Taurus.MVC 做个企业站(下)

    前言: 上一篇完成了首页,这一篇就把剩下的几个功能给作了吧. 包括文章列表.文章详情和产品展示. 1:文章列表: 原来的ArticleList.aspx 1:现在的articlelist.html 除 ...