Resolved Id assignment problem for collections.

pull/81/head
Halil İbrahim Kalkan 9 years ago
parent bdb644b8df
commit e10b305fe0

@ -4,6 +4,7 @@ using System.Collections.ObjectModel;
using System.Security.Claims;
using JetBrains.Annotations;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Guids;
using Volo.ExtensionMethods.Collections.Generic;
namespace Volo.Abp.Identity
@ -57,20 +58,22 @@ namespace Volo.Abp.Identity
ConcurrencyStamp = Guid.NewGuid().ToString();
}
public void AddClaim([NotNull] Claim claim)
public void AddClaim([NotNull] IGuidGenerator guidGenerator, [NotNull] Claim claim)
{
Check.NotNull(guidGenerator, nameof(guidGenerator));
Check.NotNull(claim, nameof(claim));
Claims.Add(new IdentityRoleClaim(Id, claim));
Claims.Add(new IdentityRoleClaim(guidGenerator.Create(), Id, claim));
}
public void AddClaims([NotNull] IEnumerable<Claim> claims)
public void AddClaims([NotNull] IGuidGenerator guidGenerator, [NotNull] IEnumerable<Claim> claims)
{
Check.NotNull(guidGenerator, nameof(guidGenerator));
Check.NotNull(claims, nameof(claims));
foreach (var claim in claims)
{
AddClaim(claim);
AddClaim(guidGenerator, claim);
}
}

@ -33,21 +33,17 @@ namespace Volo.Abp.Identity
}
public IdentityRoleClaim(Guid roleId, [NotNull] Claim claim)
public IdentityRoleClaim(Guid id, Guid roleId, [NotNull] Claim claim)
: this(id, roleId, claim.Type, claim.Value)
{
//TODO: Where to set Id?
Check.NotNull(claim, nameof(claim));
RoleId = roleId;
ClaimType = claim.Type;
ClaimValue = claim.Value;
}
public IdentityRoleClaim(Guid roleId, [NotNull] string claimType, string claimValue)
public IdentityRoleClaim(Guid id, Guid roleId, [NotNull] string claimType, string claimValue)
{
Check.NotNull(claimType, nameof(claimType));
Id = id;
RoleId = roleId;
ClaimType = claimType;
ClaimValue = claimValue;

@ -6,13 +6,14 @@ using System.Security.Claims;
using JetBrains.Annotations;
using Microsoft.AspNetCore.Identity;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Guids;
using Volo.ExtensionMethods.Collections.Generic;
namespace Volo.Abp.Identity
{
//TODO: Properties should not be public!
//TODO: Add Name/Surname/FullName?
public class IdentityUser : AggregateRoot, IHasConcurrencyStamp
{
public const int MaxUserNameLength = 256;
@ -133,7 +134,7 @@ namespace Volo.Abp.Identity
ConcurrencyStamp = Guid.NewGuid().ToString();
}
public void AddRole(Guid roleId)
public void AddRole(IGuidGenerator guidGenerator, Guid roleId)
{
Check.NotNull(roleId, nameof(roleId));
@ -142,19 +143,19 @@ namespace Volo.Abp.Identity
return;
}
Roles.Add(new IdentityUserRole(Id, roleId));
Roles.Add(new IdentityUserRole(guidGenerator.Create(), Id, roleId));
}
public void RemoveRole(Guid roleId)
{
Check.NotNull(roleId, nameof(roleId));
if (Roles.All(r => r.RoleId != roleId))
if (!IsInRole(roleId))
{
return;
}
Roles.Add(new IdentityUserRole(Id, roleId));
Roles.RemoveAll(r => r.RoleId == roleId);
}
public bool IsInRole(Guid roleId)
@ -164,20 +165,22 @@ namespace Volo.Abp.Identity
return Roles.Any(r => r.RoleId == roleId);
}
public void AddClaim([NotNull] Claim claim)
public void AddClaim([NotNull] IGuidGenerator guidGenerator, [NotNull] Claim claim)
{
Check.NotNull(guidGenerator, nameof(guidGenerator));
Check.NotNull(claim, nameof(claim));
Claims.Add(new IdentityUserClaim(Id, claim));
Claims.Add(new IdentityUserClaim(guidGenerator.Create(), Id, claim));
}
public void AddClaims([NotNull] IEnumerable<Claim> claims)
public void AddClaims([NotNull] IGuidGenerator guidGenerator, [NotNull] IEnumerable<Claim> claims)
{
Check.NotNull(guidGenerator, nameof(guidGenerator));
Check.NotNull(claims, nameof(claims));
foreach (var claim in claims)
{
AddClaim(claim);
AddClaim(guidGenerator, claim);
}
}
@ -210,11 +213,12 @@ namespace Volo.Abp.Identity
Claims.RemoveAll(c => c.ClaimValue == claim.Value && c.ClaimType == claim.Type);
}
public void AddLogin([NotNull] UserLoginInfo login)
public void AddLogin([NotNull] IGuidGenerator guidGenerator, [NotNull] UserLoginInfo login)
{
Check.NotNull(guidGenerator, nameof(guidGenerator));
Check.NotNull(login, nameof(login));
Logins.Add(new IdentityUserLogin(Id, login));
Logins.Add(new IdentityUserLogin(guidGenerator.Create(), Id, login));
}
public void RemoveLogin([NotNull] string loginProvider, [NotNull] string providerKey)
@ -231,13 +235,12 @@ namespace Volo.Abp.Identity
return Tokens.FirstOrDefault(t => t.LoginProvider == loginProvider && t.Name == name);
}
public void SetToken(string loginProvider, string name, string value)
public void SetToken(IGuidGenerator guidGenerator, string loginProvider, string name, string value)
{
var token = FindToken(loginProvider, name);
if (token == null)
{
Tokens.Add(new IdentityUserToken(Id, loginProvider, name, value));
Tokens.Add(new IdentityUserToken(guidGenerator.Create(), Id, loginProvider, name, value));
}
else
{

@ -33,21 +33,17 @@ namespace Volo.Abp.Identity
}
public IdentityUserClaim(Guid userId, [NotNull] Claim claim)
public IdentityUserClaim(Guid id, Guid userId, [NotNull] Claim claim)
: this(id, userId, claim.Type, claim.Value)
{
//TODO: Where to set Id?
Check.NotNull(claim, nameof(claim));
UserId = userId;
ClaimType = claim.Type;
ClaimValue = claim.Value;
}
public IdentityUserClaim(Guid userId, [NotNull] string claimType, string claimValue)
public IdentityUserClaim(Guid id, Guid userId, [NotNull] string claimType, string claimValue)
{
Check.NotNull(claimType, nameof(claimType));
Id = id;
UserId = userId;
ClaimType = claimType;
ClaimValue = claimValue;

@ -41,27 +41,22 @@ namespace Volo.Abp.Identity
}
public IdentityUserLogin(Guid userId, [NotNull] string loginProvider, [NotNull] string providerKey, string providerDisplayName)
public IdentityUserLogin(Guid id, Guid userId, [NotNull] string loginProvider, [NotNull] string providerKey, string providerDisplayName)
{
Check.NotNull(loginProvider, nameof(loginProvider));
Check.NotNull(providerKey, nameof(providerKey));
//TODO: Where to set Id?
Id = id;
UserId = userId;
LoginProvider = loginProvider;
ProviderKey = providerKey;
ProviderDisplayName = providerDisplayName;
}
public IdentityUserLogin(Guid userId, UserLoginInfo login)
public IdentityUserLogin(Guid id, Guid userId, [NotNull] UserLoginInfo login)
: this(id, userId, login.LoginProvider, login.ProviderKey, login.ProviderDisplayName)
{
Check.NotNull(login, nameof(login));
UserId = userId;
LoginProvider = login.LoginProvider;
ProviderKey = login.ProviderKey;
ProviderDisplayName = login.ProviderDisplayName;
}
public UserLoginInfo ToUserLoginInfo()

@ -23,10 +23,9 @@ namespace Volo.Abp.Identity
}
public IdentityUserRole(Guid userId, Guid roleId)
public IdentityUserRole(Guid id, Guid userId, Guid roleId)
{
//TODO: Where to set Id?
Id = id;
UserId = userId;
RoleId = roleId;
}

@ -36,13 +36,12 @@ namespace Volo.Abp.Identity
}
public IdentityUserToken(Guid userId, [NotNull] string loginProvider, [NotNull] string name, string value)
public IdentityUserToken(Guid id, Guid userId, [NotNull] string loginProvider, [NotNull] string name, string value)
{
Check.NotNull(loginProvider, nameof(loginProvider));
Check.NotNull(name, nameof(name));
//TODO: Where to set Id?
Id = id;
UserId = userId;
LoginProvider = loginProvider;
Name = name;

@ -7,6 +7,7 @@ using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Logging;
using Volo.Abp.Guids;
using Volo.Abp.Uow;
using Volo.DependencyInjection;
@ -23,19 +24,22 @@ namespace Volo.Abp.Identity
private readonly IIdentityRoleRepository _roleRepository;
private readonly IUnitOfWorkManager _unitOfWorkManager;
private readonly ILogger<RoleStore> _logger;
private readonly IGuidGenerator _guidGenerator;
/// <summary>
/// Constructs a new instance of <see cref="RoleStore"/>.
/// </summary>
public RoleStore(
IIdentityRoleRepository roleRepository,
IUnitOfWorkManager unitOfWorkManager,
IIdentityRoleRepository roleRepository,
ILogger<RoleStore> logger,
IGuidGenerator guidGenerator,
IdentityErrorDescriber describer = null)
{
_roleRepository = roleRepository;
_unitOfWorkManager = unitOfWorkManager;
_roleRepository = roleRepository;
_logger = logger;
_guidGenerator = guidGenerator;
ErrorDescriber = describer ?? new IdentityErrorDescriber();
}
@ -281,7 +285,7 @@ namespace Volo.Abp.Identity
Check.NotNull(role, nameof(role));
Check.NotNull(claim, nameof(claim));
role.AddClaim(claim);
role.AddClaim(_guidGenerator, claim);
return Task.FromResult(false);
}

@ -8,9 +8,9 @@ using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Logging;
using Volo.Abp.Guids;
using Volo.Abp.Uow;
using Volo.DependencyInjection;
using Volo.ExtensionMethods;
namespace Volo.Abp.Identity
{
@ -44,6 +44,7 @@ namespace Volo.Abp.Identity
public bool AutoSaveChanges { get; set; } = true;
private readonly IIdentityRoleRepository _roleRepository;
private readonly IGuidGenerator _guidGenerator;
private readonly ILogger<RoleStore> _logger;
private readonly IIdentityUserRepository _userRepository;
private readonly IUnitOfWorkManager _unitOfWorkManager;
@ -52,12 +53,14 @@ namespace Volo.Abp.Identity
IUnitOfWorkManager unitOfWorkManager,
IIdentityUserRepository userRepository,
IIdentityRoleRepository roleRepository,
IGuidGenerator guidGenerator,
ILogger<RoleStore> logger,
IdentityErrorDescriber describer = null) //TODO: describer? TODO: Test if DI supports optional injection
{
_unitOfWorkManager = unitOfWorkManager;
_userRepository = userRepository;
_roleRepository = roleRepository;
_guidGenerator = guidGenerator;
_logger = logger;
ErrorDescriber = describer ?? new IdentityErrorDescriber();
@ -320,11 +323,7 @@ namespace Volo.Abp.Identity
cancellationToken.ThrowIfCancellationRequested();
Check.NotNull(user, nameof(user));
if (normalizedRoleName.IsNullOrWhiteSpace()) //TODO: Create a Check.NotNullOrWhiteSpace()?
{
throw new ArgumentException(nameof(normalizedRoleName) + " can not be null or whitespace");
}
Check.NotNull(normalizedRoleName, nameof(normalizedRoleName));
var role = await _roleRepository.FindByNormalizedNameAsync(normalizedRoleName, cancellationToken);
@ -333,7 +332,7 @@ namespace Volo.Abp.Identity
throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "Role {0} does not exist.", normalizedRoleName)); //TODO: Localize
}
user.AddRole(role.Id);
user.AddRole(_guidGenerator, role.Id);
}
/// <summary>
@ -443,7 +442,7 @@ namespace Volo.Abp.Identity
Check.NotNull(user, nameof(user));
Check.NotNull(claims, nameof(claims));
user.AddClaims(claims);
user.AddClaims(_guidGenerator, claims);
return Task.CompletedTask;
}
@ -502,7 +501,7 @@ namespace Volo.Abp.Identity
Check.NotNull(user, nameof(user));
Check.NotNull(login, nameof(login));
user.AddLogin(login);
user.AddLogin(_guidGenerator, login);
return Task.CompletedTask;
}
@ -998,7 +997,7 @@ namespace Volo.Abp.Identity
Check.NotNull(user, nameof(user));
user.SetToken(loginProvider, name, value);
user.SetToken(_guidGenerator, loginProvider, name, value);
return Task.CompletedTask;
}

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Diagnostics;
using JetBrains.Annotations;
using Volo.ExtensionMethods;
using Volo.ExtensionMethods.Collections.Generic;
namespace Volo
@ -20,6 +21,17 @@ namespace Volo
return value;
}
[ContractAnnotation("value:null => halt")]
public static string NotNullOrWhiteSpace(string value, [InvokerParameterName] [NotNull] string parameterName)
{
if (value.IsNullOrWhiteSpace())
{
throw new ArgumentException($"{parameterName} can not be null, empty or white space!", parameterName);
}
return value;
}
[ContractAnnotation("value:null => halt")]
public static ICollection<T> NotNullOrEmpty<T>(ICollection<T> value, [InvokerParameterName] [NotNull] string parameterName)
{

Loading…
Cancel
Save