zoukankan      html  css  js  c++  java
  • 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源码分析系列文章目录

  • 相关阅读:
    BZOJ 2594: [Wc2006]水管局长数据加强版
    BZOJ 2049: [Sdoi2008]Cave 洞穴勘测
    html5 canvas ( 贝塞尔曲线, 一片星空加绿地 ) quadraticCurveTo, bezierCurveTo
    c#.net 接收 base64 格式的数据并解析为图片
    html5 canvas ( 绘制一轮弯月, 星空中的弯月 )
    html5 canvas ( 圆和切点曲线的绘制 ) arc, arcTo
    html5 canvas ( 图片填充样式 ) fillStyle, createPattern
    html5 canvas ( 径向渐变, 升级版的星空 ) fillStyle, createRadialGradient
    html5 canvas ( 线性渐变, 升级版的星空 ) fillStyle, createLinearGradient, addColorStop
    html5 canvas ( 图形变换矩阵 ) transform, setTransform
  • 原文地址:https://www.cnblogs.com/1zhk/p/5456389.html
Copyright © 2011-2022 走看看