【转】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源码分析系列文章目录
【转】ABP源码分析四十二:ZERO的身份认证相关推荐
- 【转】ABP源码分析四十六:ABP ZERO中的Ldap模块
通过AD作为用户认证的数据源.整个管理用户认证逻辑就在LdapAuthenticationSource类中实现. LdapSettingProvider:定义LDAP的setting和提供Defaut ...
- 【转】ABP源码分析四十五:ABP ZERO中的EntityFramework模块
AbpZeroDbContext:配置ABP.Zero中定义的entity的Dbset EntityFrameworkModelBuilderExtensions:给PrimitiveProperty ...
- 【转】ABP源码分析四十四:ZERO的配置
ABP Zero模块中需要配置的地方主要集中在三块:1.配置静态的role:2.配置外部认证源:3.配置本地化语言和资源. UserManagementConfig/IUserManagementCo ...
- 【转】ABP源码分析四十:ZERO的Application和Tenant
ABP的Zero模块以数据库为数据源实现了ABP框架中的tenant management (multi-tenancy), role management, user management, ses ...
- 【转】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源码分析四十七:ABP中的异常处理
ABP源码分析四十七:ABP中的异常处理 参考文章: (1)ABP源码分析四十七:ABP中的异常处理 (2)https://www.cnblogs.com/1zhk/p/5538983.html (3 ...
- ABP源码分析三十四:ABP.Web.Mvc
ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...
- 【转】ABP源码分析三十四:ABP.Web.Mvc
ABP.Web.Mvc模块主要完成两个任务: 第一,通过自定义的AbpController抽象基类封装ABP核心模块中的功能,以便利的方式提供给我们创建controller使用. 第二,一些常见的基础 ...
最新文章
- 复旦大学教授邱锡鹏:NLP 任务中有哪些巧妙的 idea?
- 刷题练习记录(3)——无重复字符的最长子串(JAVA 和 Python)——set()函数/集合...
- 原来SMPlayer可以直接播放音乐CD碟
- 扒一扒MathType不为人知的技巧
- 数据绑定(三)为Binding指定绑定源的几种方法
- Android Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE解决办法
- Linux 下使用Java连接 mysql
- 毕业设计一周一记06
- php合图,php合并图片
- Maven 清理 .lastUpdated 文件
- 这7个web前端开发写代码软件,你过用几个?
- android svg 线条动画教程,html5 svg制作动态绘制线条动画代码
- 论文阅读 (二十三):Attention-based Deep Multiple Instance Learning (2018)
- 二项分布的期望值 E(n)=np 推导
- java 什么是原子操作_java原子操作CAS
- 读书笔记——《岛上书店》
- 不可错过的五款开源图形处理软件
- conda 重命名 环境 (通过clone旧环境来创建新环境,然后删除旧环境)
- 红旗linux 桌面10 下载,想要红旗桌面操作系统10(RedFlag Desktop Linux10)的请联系红旗官方...
- java8个基本类型
热门文章
- 问题 seata_架构设计 | 基于Seata中间件,微服务模式下事务管理
- ROS学习笔记四:用C++编写ROS发布与订阅
- BZOJ 1877 拆点费用流
- Linux Apache php MySQL 安装配置(Centos 6.4 yum安装)
- IOS web app一些实用的属性设置
- VB用API实现各种对话框(总结)(转载)
- 数学和计算机的应用视频教学反思,数学多媒体教学反思.doc
- 算法入门经典习题第一章
- 505B. Mr. Kitayuta‘s Colorful Graph
- Java commit()_Java XAResource.commit方法代码示例