Browse Source

Add more property to user claims.

pull/5315/head
maliming 6 years ago
parent
commit
2811de7a70
  1. 10
      framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/CurrentUserDto.cs
  2. 5
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs
  3. 56
      framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs
  4. 6
      framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUser.cs
  5. 8
      framework/src/Volo.Abp.Security/Volo/Abp/Users/ICurrentUser.cs
  6. 15
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs
  7. 38
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs
  8. 21
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ClaimsIdentityExtensions.cs

10
framework/src/Volo.Abp.AspNetCore.Mvc.Contracts/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/CurrentUserDto.cs

@ -13,8 +13,18 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations
public string UserName { get; set; }
public string Name { get; set; }
public string SurName { get; set; }
public string Email { get; set; }
public bool EmailVerified { get; set; }
public string PhoneNumber { get; set; }
public bool PhoneNumberVerified { get; set; }
public string[] Roles { get; set; }
}
}

5
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs

@ -117,7 +117,12 @@ namespace Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations
Id = _currentUser.Id,
TenantId = _currentUser.TenantId,
UserName = _currentUser.UserName,
SurName = _currentUser.SurName,
Name = _currentUser.Name,
Email = _currentUser.Email,
EmailVerified = _currentUser.EmailVerified,
PhoneNumber = _currentUser.PhoneNumber,
PhoneNumberVerified = _currentUser.PhoneNumberVerified,
Roles = _currentUser.Roles
};
}

56
framework/src/Volo.Abp.Security/Volo/Abp/Security/Claims/AbpClaimTypes.cs

@ -8,55 +8,71 @@ namespace Volo.Abp.Security.Claims
/// </summary>
public static class AbpClaimTypes
{
public const string ClaimTypeNamespace = "abp_";
/// <summary>
/// Default: <see cref="ClaimTypes.Name"/>
/// Default: abp_username
/// </summary>
public static string UserName { get; set; } = ClaimTypes.Name;
public static string UserName { get; set; } = ClaimTypeNamespace + "username";
/// <summary>
/// Default: <see cref="ClaimTypes.NameIdentifier"/>
/// Default: abp_name
/// </summary>
public static string UserId { get; set; } = ClaimTypes.NameIdentifier;
public static string Name { get; set; } = ClaimTypeNamespace + "name";
/// <summary>
/// Default: <see cref="ClaimTypes.Role"/>
/// Default: abp_surname
/// </summary>
public static string Role { get; set; } = ClaimTypes.Role;
public static string SurName { get; set; } = ClaimTypeNamespace + "surname";
/// <summary>
/// Default: <see cref="ClaimTypes.Email"/>
/// Default: abp_user_id
/// </summary>
public static string Email { get; set; } = ClaimTypes.Email;
public static string UserId { get; set; } = ClaimTypeNamespace + "user_id";
/// <summary>
/// Default: "email_verified".
/// Default: abp_role
/// </summary>
public static string EmailVerified { get; set; } = "email_verified";
public static string Role { get; set; } = ClaimTypeNamespace + "role";
/// <summary>
/// Default: "phone_number".
/// Default: abp_security_stamp
/// </summary>
public static string PhoneNumber { get; set; } = "phone_number";
public static string SecurityStamp { get; set; } = ClaimTypeNamespace + "security_stamp";
/// <summary>
/// Default: "phone_number_verified".
/// Default: abp_email
/// </summary>
public static string PhoneNumberVerified { get; set; } = "phone_number_verified";
public static string Email { get; set; } = ClaimTypeNamespace + "email";
/// <summary>
/// Default: "tenantid".
/// Default: abp_email_verified
/// </summary>
public static string TenantId { get; set; } = "tenantid";
public static string EmailVerified { get; set; } = ClaimTypeNamespace + "email_verified";
/// <summary>
/// Default: abp_phone_number
/// </summary>
public static string PhoneNumber { get; set; } = ClaimTypeNamespace + "phone_number";
/// <summary>
/// Default: abp_phone_number_verified
/// </summary>
public static string PhoneNumberVerified { get; set; } = ClaimTypeNamespace + "phone_number_verified";
/// <summary>
/// Default: abp_tenant_id
/// </summary>
public static string TenantId { get; set; } = ClaimTypeNamespace + "tenant_id";
/// <summary>
/// Default: "editionid".
/// Default: abp_edition_id
/// </summary>
public static string EditionId { get; set; } = "editionid";
public static string EditionId { get; set; } = ClaimTypeNamespace + "edition_id";
/// <summary>
/// Default: "client_id".
/// Default: abp_client_id
/// </summary>
public static string ClientId { get; set; } = "client_id";
public static string ClientId { get; set; } = ClaimTypeNamespace + "client_id";
}
}

6
framework/src/Volo.Abp.Security/Volo/Abp/Users/CurrentUser.cs

@ -17,6 +17,10 @@ namespace Volo.Abp.Users
public virtual string UserName => this.FindClaimValue(AbpClaimTypes.UserName);
public virtual string Name => this.FindClaimValue(AbpClaimTypes.Name);
public virtual string SurName => this.FindClaimValue(AbpClaimTypes.SurName);
public virtual string PhoneNumber => this.FindClaimValue(AbpClaimTypes.PhoneNumber);
public virtual bool PhoneNumberVerified => string.Equals(this.FindClaimValue(AbpClaimTypes.PhoneNumberVerified), "true", StringComparison.InvariantCultureIgnoreCase);
@ -56,4 +60,4 @@ namespace Volo.Abp.Users
return FindClaims(AbpClaimTypes.Role).Any(c => c.Value == roleName);
}
}
}
}

8
framework/src/Volo.Abp.Security/Volo/Abp/Users/ICurrentUser.cs

@ -14,9 +14,15 @@ namespace Volo.Abp.Users
[CanBeNull]
string UserName { get; }
[CanBeNull]
string Name { get; }
[CanBeNull]
string SurName { get; }
[CanBeNull]
string PhoneNumber { get; }
bool PhoneNumberVerified { get; }
[CanBeNull]

15
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs

@ -8,6 +8,7 @@ using Volo.Abp.Domain.Entities.Events.Distributed;
using Volo.Abp.Modularity;
using Volo.Abp.ObjectExtending;
using Volo.Abp.ObjectExtending.Modularity;
using Volo.Abp.Security.Claims;
using Volo.Abp.Users;
namespace Volo.Abp.Identity
@ -36,7 +37,7 @@ namespace Volo.Abp.Identity
options.EtoMappings.Add<IdentityRole, IdentityRoleEto>(typeof(AbpIdentityDomainModule));
options.EtoMappings.Add<OrganizationUnit, OrganizationUnitEto>(typeof(AbpIdentityDomainModule));
});
var identityBuilder = context.Services.AddAbpIdentity(options =>
{
options.User.RequireUniqueEmail = true;
@ -45,6 +46,14 @@ namespace Volo.Abp.Identity
context.Services.AddObjectAccessor(identityBuilder);
context.Services.ExecutePreConfiguredActions(identityBuilder);
Configure<IdentityOptions>(options =>
{
options.ClaimsIdentity.UserIdClaimType = AbpClaimTypes.UserId;
options.ClaimsIdentity.UserNameClaimType = AbpClaimTypes.UserName;
options.ClaimsIdentity.RoleClaimType = AbpClaimTypes.Role;
options.ClaimsIdentity.SecurityStampClaimType = AbpClaimTypes.SecurityStamp;
});
AddAbpIdentityOptionsFactory(context.Services);
}
@ -67,7 +76,7 @@ namespace Volo.Abp.Identity
IdentityModuleExtensionConsts.EntityNames.ClaimType,
typeof(IdentityClaimType)
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.OrganizationUnit,
@ -81,4 +90,4 @@ namespace Volo.Abp.Identity
services.Replace(ServiceDescriptor.Scoped<IOptions<IdentityOptions>, OptionsManager<IdentityOptions>>());
}
}
}
}

38
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs

@ -1,4 +1,5 @@
using System.Linq;
using System;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
@ -6,6 +7,7 @@ using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Security.Claims;
using Volo.Abp.Uow;
using Volo.Abp.Users;
namespace Volo.Abp.Identity
{
@ -13,11 +15,11 @@ namespace Volo.Abp.Identity
{
public AbpUserClaimsPrincipalFactory(
UserManager<IdentityUser> userManager,
RoleManager<IdentityRole> roleManager,
IOptions<IdentityOptions> options)
RoleManager<IdentityRole> roleManager,
IOptions<IdentityOptions> options)
: base(
userManager,
roleManager,
userManager,
roleManager,
options)
{
}
@ -26,14 +28,34 @@ namespace Volo.Abp.Identity
public override async Task<ClaimsPrincipal> CreateAsync(IdentityUser user)
{
var principal = await base.CreateAsync(user);
var identity = principal.Identities.First();
if (user.TenantId.HasValue)
{
principal.Identities
.First()
.AddClaim(new Claim(AbpClaimTypes.TenantId, user.TenantId.ToString()));
identity.AddIfNotContains(new Claim(AbpClaimTypes.TenantId, user.TenantId.ToString()));
}
if (!user.Name.IsNullOrWhiteSpace())
{
identity.AddIfNotContains(new Claim(AbpClaimTypes.Name, user.Name));
}
if (!user.Surname.IsNullOrWhiteSpace())
{
identity.AddIfNotContains(new Claim(AbpClaimTypes.SurName, user.Surname));
}
if (!user.PhoneNumber.IsNullOrWhiteSpace())
{
identity.AddIfNotContains(new Claim(AbpClaimTypes.PhoneNumber, user.PhoneNumber));
}
identity.AddIfNotContains(new Claim(AbpClaimTypes.PhoneNumberVerified, user.PhoneNumberConfirmed.ToString()));
if (!user.Email.IsNullOrWhiteSpace())
{
identity.AddIfNotContains(new Claim(AbpClaimTypes.Email, user.Email));
}
identity.AddIfNotContains(new Claim(AbpClaimTypes.EmailVerified, user.EmailConfirmed.ToString()));
return principal;
}
}

21
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ClaimsIdentityExtensions.cs

@ -0,0 +1,21 @@
using System;
using System.Linq;
using System.Security.Claims;
namespace Volo.Abp.Identity
{
public static class ClaimsIdentityExtensions
{
public static ClaimsIdentity AddIfNotContains(this ClaimsIdentity claimsIdentity, Claim claim)
{
if (!claimsIdentity.Claims.Any(existClaim =>
existClaim != null &&
string.Equals(existClaim.Type, claim.Type, StringComparison.OrdinalIgnoreCase)))
{
claimsIdentity.AddClaim(claim);
}
return claimsIdentity;
}
}
}
Loading…
Cancel
Save