ABP源码分析四十二:ZERO的身份认证
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源码分析四十二:ZERO的身份认证的更多相关文章
- ABP源码分析三十二:ABP.SignalR
Realtime Realtime是ABP底层模块提供的功能,用于管理在线用户.它是使用SignalR实现给在线用户发送通知的功能的前提 IOnlineClient/OnlineClient: 封装在 ...
- ABP源码分析四十:ZERO的Application和Tenant
ABP的Zero模块以数据库为数据源实现了ABP框架中的tenant management (multi-tenancy), role management, user management, ses ...
- ABP源码分析四十四:ZERO的配置
ABP Zero模块中需要配置的地方主要集中在三块:配置静态的role,配置外部认证源,以及配置本地化语言和资源. UserManagementConfig/IUserManagementConfig ...
- ABP源码分析四十五:ABP ZERO中的EntityFramework模块
AbpZeroDbContext:配置ABP.Zero中定义的entity的Dbset EntityFrameworkModelBuilderExtensions:给PrimitiveProperty ...
- ABP源码分析四十六:ABP ZERO中的Ldap模块
通过AD作为用户认证的数据源.整个管理用户认证逻辑就在LdapAuthenticationSource类中实现. LdapSettingProvider:定义LDAP的setting和提供Defaut ...
- 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入
使用react全家桶制作博客后台管理系统 前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...
- ABP源码分析三十四:ABP.Web.Mvc
ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...
- ABP源码分析四:Configuration
核心模块的配置 Configuration是ABP中设计比较巧妙的地方.其通过AbpStartupConfiguration,Castle的依赖注入,Dictionary对象和扩展方法很巧妙的实现了配 ...
- ABP源码分析四十七:ABP中的异常处理
ABP 中异常处理的思路是很清晰的.一共五种类型的异常类. AbpInitializationException用于封装ABP初始化过程中出现的异常,只要抛出AbpInitializationExce ...
随机推荐
- 【探索】机器指令翻译成 JavaScript
前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...
- ASP.NET Aries 入门开发教程3:开发一个列表页面及操控查询区
前言: Aries框架毕竟是开发框架,所以重点还是要写代码的,这样开发人员才不会失业,哈. 步骤1:新建html 建一个Html,主要有三步: 1:引入Aries.Loader.js 2:弄一个tab ...
- PHP-解析验证码类--学习笔记
1.开始 在 网上看到使用PHP写的ValidateCode生成验证码码类,感觉不错,特拿来分析学习一下. 2.类图 3.验证码类部分代码 3.1 定义变量 //随机因子 private $char ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 设计模式之结构类模式大PK
结构类模式大PK 结构类模式包括适配器模式.桥梁模式.组合模式.装饰模式.门面模式.享元模式和代理模式.之所以称其为结构类模式,是因 ...
- c# 基础 object ,new操作符,类型转换
参考页面: http://www.yuanjiaocheng.net/webapi/config-webapi.html http://www.yuanjiaocheng.net/webapi/web ...
- H3 BPM引擎API接口
引擎API接口通过 Engine 对象进行访问,这个是唯一入口. 示例1:获取组织机构对象 this.Engine.Organization.GetUnit("组织ID"); 示例 ...
- Android AndroidRuntime类
AndroidRuntime类是安卓底层很重要的一个类,它负责启动虚拟机以及Java线程,AndroidRuntime类在一个进程中只有一个实例对象保存在全局变量,gCurRuntime中.
- iOS开发--ChildViewController实现订单页的切换
先不说废话, 上效果图, 代码量也不大, 也不上传github骗星星了, 你们复制粘贴下代码, 就可以轻而易举的弄出一个小demo. 这个代码的实现并不复杂, 甚至于说非常简单, 就是逻辑有点小绕, ...
- 找到第k个最小元----快速选择
此算法借用快速排序算法. 这个快速选择算法主要利用递归调用,数组存储方式.包含3个文件,头文件QuickSelect.h,库函数QuickSelect.c,测试文件TestQuickSelect. 其 ...