【转】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源码分析系列文章目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搜索计算机硬盘的索引恢复,可以做到秒搜的神器everything,你可知对硬盘到底有多大伤害...

相比较Windows系统自带的搜索功能&#xff0c;everything堪称搜索界的神器&#xff0c;尤其在电脑里文件多达数万数十万的恐怖数量&#xff0c;但everything仍可做到秒搜&#xff0c;所以这款软件为大部分办公人员所喜爱。说到everything对硬盘的伤害程度&#xff0c;我们先看看…

【转】ABP源码分析四十四:ZERO的配置

ABP Zero模块中需要配置的地方主要集中在三块&#xff1a;1.配置静态的role&#xff1b;2.配置外部认证源&#xff1b;3.配置本地化语言和资源。 UserManagementConfig/IUserManagementConfig:定义了一个配置项&#xff0c;用于配置外部认证源。默认情况下&#xff0c;ABP Zero…

在.net 2.0 中执行分布式事务:隐式事务篇(SQL Server 与 Oracle)

项目涉及到多个数据库的查询更新操作&#xff0c;也就必然需要分布式事务的支持&#xff0c;查了MSDN知道 .net 2.0 中利用新增的 System.Transactions 命名空间可以简单的实现分布式事务&#xff1a; System.Transactions 基础结构通过支持在 SQL Server、ADO.NET、MSMQ 和 Mi…

【转】OData的初步认识

What – OData是什么&#xff1f; OData - Open Data Protocol&#xff0c;是一个设计和使用RESTful API的标准。REST本身只是一个构建web服务的思想和理念&#xff0c;其没有规定一个统一的标准来限制开发人员该如何设计RESTful API。其实我们实际开发中的确也没有遵循某个统…

选择Windows CE wince嵌入式操作系统 的十大理由

Windows CE是什么&#xff1f; Windows CE是一个具有战略意义的操作系统。它拥有windows操作系统的特点&#xff0c;支持32位虚拟内存机制、按需分配内存和内存映射文件&#xff1b;他也是抢先式多任务并具有强大通信能力的Win32嵌入式操作系统&#xff0c;是微软专门为信息设…

三元运算符 在数据绑定中的使用

在使用 datalist 等控件绑定前台数据的时候&#xff0c;有时希望一行只显示定长字符&#xff0c;多出来的部分以省略号代替&#xff0c;我使用三元运算符来做&#xff1a;<asp:DataList id"DataList1"runat"server"RepeatColumns"5"Width&quo…

【转】ABP源码分析四十三:ZERO的本地化

ABP Zero模块扩展了ABP基础框架中的本地化功能&#xff0c;实现了通过数据库对本地化功能进行管理。其通过数据库保存本地化语言及其资源。 ApplicationLanguage&#xff1a;代表本地化语言的实体类。一种语言就是一个ApplicationLanguage实例。 ApplicationLanguageProvider&a…

WinCE流设备驱动简介及GPIO驱动的实现

作者&#xff1a;ARM-WinCE 流设备驱动实际上就是导出标准的流接口函数的驱动&#xff0c;这是文档上面的定义。在WinCE中&#xff0c;所有的流设备都导出流设备接口&#xff0c;这样WinCE中的Device Manager可以加载和管理这些流设备驱动。 流设备驱动的架构如图&#xff1a;…

计算机出现蓝屏怎么解决,电脑出现蓝屏故障0x00000019怎么办?

原标题&#xff1a;电脑出现蓝屏故障0x00000019怎么办&#xff1f;电脑开机出现蓝屏故障0x00000019怎么处理&#xff1f;电脑出现蓝屏&#xff0c;一般都会有提示错误代码或者出错的文件名等&#xff0c;最近就有用户跟小编反映&#xff0c;开机出现了蓝屏故障&#xff0c;提示…

【转】ABP源码分析四十五:ABP ZERO中的EntityFramework模块

AbpZeroDbContext&#xff1a;配置ABP.Zero中定义的entity的Dbset EntityFrameworkModelBuilderExtensions:给PrimitivePropertyConfiguration添加了扩展方法用于创建Index。 AbpZeroDbModelBuilderExtensions&#xff1a;给DbModelBuilder添加了扩展方法用于表的重命名。 AbpZ…

WinCE中串口驱动及接口函数介绍

作者&#xff1a;ARM-WinCE 在WinCE中&#xff0c;串口驱动实际上就是一个流设备驱动,具体架构如图&#xff1a; 串口驱动本身分为MDD层和PDD层。MDD层对上层的Device Manager提供了标准的流设备驱动接口(COM_xxx)&#xff0c;PDD层实现了HWOBJ结构及结构中若干针对于串口硬件操…

【转】ABP源码分析四十六:ABP ZERO中的Ldap模块

通过AD作为用户认证的数据源。整个管理用户认证逻辑就在LdapAuthenticationSource类中实现。 LdapSettingProvider&#xff1a;定义LDAP的setting和提供DefautValue。主要提供配置访问AD数据库的账号信息。 LdapSettings/ILdapSettings:通过settingManager获取LDAP settings Ab…

广州.NET俱乐部 VSTS活动报道

首先要感谢广州.NET开发人员一直以来对俱乐部的支持&#xff0c;另外&#xff0c;要感谢微软鞠海洋提供的丰富礼品。本次活动主线是VSTS&#xff0c;俱乐部的讲师黎波为我们讲解了VSTS的基本组成和功能分布&#xff0c;让我们大家从宏观上了解VSTS。在活动上&#xff0c;微软的…

【转】ABP源码分析四十七:ABP中的异常处理

ABP 中异常处理的思路是很清晰的。一共五种类型的异常类。 AbpInitializationException用于封装ABP初始化过程中出现的异常&#xff0c;只要抛出AbpInitializationException异常就可以&#xff0c;无须做额外处理。这类异常往往是需要维护人员介入分析的。 其他四个异常都在A…

当你累了,准备放弃时,看看这个吧!!!

在别的空间看到这篇文章&#xff0c;感觉说的很有道理&#xff0c;故转过来&#xff0c;送给所有还在坚持的朋友~~ 每个人都背负着一个沉重的十字架&#xff0c;在缓慢而艰难地朝着目的地前进。 途中&#xff0c;有一个人忽然停了下来。 他心想&#xff1a;这个十字架实在是…

梦游4k

本来还打算晚上看案例分析的&#xff0c; 觉得是在太困了就上床眯会儿&#xff0c; 一睁眼&#xff0c;呀&#xff0c;怎么就快九点了呢。 可怜我一晚上的宝贵时间就这么被我浪费过去了。 从床上蠕动到椅子上&#xff0c;努力扒开眼睛看看BBS&#xff0c; 还是跑步好啊。 跑步好…

ajax里绑定框,Select级联菜单,用Ajax获取Json绑定下拉框(jQuery)

需求类似这样 ↓ ↓ ↓--》 菜单A发生变化&#xff0c;动态取数据填充下拉菜单B。JS代码如下&#xff1a;$(function () {$("#TeamSelect").change(function () {var tid $("#TeamSelect option:selected").val();$.ajax({url: "/ajax/ajaxGetMa…

【转】CANOPEN总线的相关问题点整理分享*****

CANopen 是一个基于 CAN&#xff08;控制局域网&#xff09;串行总线系统和 CAL&#xff08;CAN 应用层&#xff09;的高层协议。CANopen 通讯协议 CiA DS-301 包括周期和事件驱动型通讯&#xff0c;不仅能够将总线负载减少到最低限度&#xff0c;而且还能确保极短的反应时间。…

WinCE系统字体的设置

作者&#xff1a;ARM-WinCE 确实很久没有写Blog了&#xff0c;感觉有些对不住曾经看我blog的朋友。刚从美国回来&#xff0c;由于项目原因&#xff0c;春节都在美国工作&#xff0c;现在有点时间&#xff0c;先写一篇简单的&#xff0c;介绍一下WinCE字体的设置。 WinCE系统字体…

js脚本点击按钮显示文字_JSBOX脚本聊天神器

聊天神器是一个基于JSBox的脚本JSBox 是一个可以用来运行 JavaScript 脚本的 iOS 应用&#xff0c;你可以通过他来执行标准的 JavaScript 脚本 这种执行不是指跑在浏览器上&#xff0c;而是执行在一个完全原生的环境&#xff0c;效率很高。并且我们提供了很多 iOS 原生的接口&a…