Browse Source

#440

pull/447/head
Yunus Emre Kalkan 8 years ago
parent
commit
a2787e5229
  1. 17
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityClaimTypeConsts.cs
  2. 14
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityClaimValueType.cs
  3. 13
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIDentityClaimTypeRepository.cs
  4. 51
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdenityClaimTypeManager.cs
  5. 44
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimType.cs
  6. 24
      modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityClaimTypeRepository.cs
  7. 2
      modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IIdentityDbContext.cs
  8. 2
      modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs
  9. 11
      modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs
  10. 5
      modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityBsonClassMap.cs
  11. 2
      modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbContext.cs
  12. 5
      modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbContextExtensions.cs
  13. 1
      modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbModule.cs
  14. 2
      modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/IAbpIdentityMongoDbContext.cs
  15. 23
      modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityClaimTypeRepository.cs
  16. 2
      modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/AbpIdentityDomainTestBase.cs
  17. 9
      modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/Volo/Abp/Identity/EntityFrameworkCore/IdentityClaimTypeRepository_Tests.cs
  18. 7
      modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/Volo/Abp/Identity/MongoDB/IdentityClaimTypeRepository_Tests.cs
  19. 12
      modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/AbpIdentityTestDataBuilder.cs
  20. 40
      modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityClaimTypeRepository_Tests.cs
  21. 2
      modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityTestData.cs

17
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityClaimTypeConsts.cs

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Volo.Abp.Identity
{
public class IdentityClaimTypeConsts
{
public const int MaxNameLength = 128;
public const int MaxRegexLength = 512;
public const int MaxRegexDescriptionLength = 128;
public const int MaxDescriptionLength = 256;
}
}

14
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityClaimValueType.cs

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Volo.Abp.Identity
{
public enum IdentityClaimValueType
{
String,
Int,
Boolean,
DateTime
}
}

13
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIDentityClaimTypeRepository.cs

@ -0,0 +1,13 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace Volo.Abp.Identity
{
public interface IIdentityClaimTypeRepository : IBasicRepository<IdentityClaimType, Guid>
{
Task<bool> DoesNameExist(string name, Guid? claimTypeId = null);
}
}

51
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdenityClaimTypeManager.cs

@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Services;
using Volo.Abp.Guids;
namespace Volo.Abp.Identity
{
public class IdenityClaimTypeManager : IDomainService
{
private readonly IIdentityClaimTypeRepository _identityClaimTypeRepository;
private readonly IGuidGenerator _guidGenerator;
public IdenityClaimTypeManager(IIdentityClaimTypeRepository identityClaimTypeRepository, IGuidGenerator guidGenerator)
{
_identityClaimTypeRepository = identityClaimTypeRepository;
_guidGenerator = guidGenerator;
}
public async Task<IdentityClaimType> GetAsync(Guid id)
{
return await _identityClaimTypeRepository.GetAsync(id);
}
public async Task<IdentityClaimType> CreateAsync(IdentityClaimType claimType)
{
if (await _identityClaimTypeRepository.DoesNameExist(claimType.Name))
{
throw new AbpException($"Name Exist: {claimType.Name}");
}
return await _identityClaimTypeRepository.InsertAsync(claimType);
}
public async Task<IdentityClaimType> UpdateAsync(IdentityClaimType claimType)
{
if (await _identityClaimTypeRepository.DoesNameExist(claimType.Name, claimType.Id))
{
throw new AbpException($"Name Exist: {claimType.Name}");
}
return await _identityClaimTypeRepository.UpdateAsync(claimType);
}
public async Task DeleteAsync(Guid id)
{
await _identityClaimTypeRepository.DeleteAsync(id);
}
}
}

44
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimType.cs

@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Text;
using JetBrains.Annotations;
using Volo.Abp.Domain.Entities;
namespace Volo.Abp.Identity
{
public class IdentityClaimType : Entity<Guid>
{
public virtual string Name { get; protected set; }
public virtual bool Required { get; protected set; }
public virtual bool IsStatic { get; protected set; }
public virtual string Regex { get; protected set; }
public virtual string RegexDescription { get; protected set; }
public virtual string Description { get; protected set; }
public virtual IdentityClaimValueType ValueType { get; protected set; }
protected IdentityClaimType()
{
}
public IdentityClaimType(Guid id, [NotNull] string name, bool required, bool isStatic, [CanBeNull]string regex, [CanBeNull]string regexDescription, [CanBeNull] string description, IdentityClaimValueType valueType = IdentityClaimValueType.String)
{
Check.NotNull(name, nameof(name));
Name = name;
Required = required;
IsStatic = isStatic;
Regex = regex;
RegexDescription = regexDescription;
Description = description;
ValueType = valueType;
}
}
}

24
modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityClaimTypeRepository.cs

@ -0,0 +1,24 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Internal;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace Volo.Abp.Identity.EntityFrameworkCore
{
public class EfCoreIdentityClaimTypeRepository : EfCoreRepository<IIdentityDbContext, IdentityClaimType, Guid>, IIdentityClaimTypeRepository
{
public EfCoreIdentityClaimTypeRepository(IDbContextProvider<IIdentityDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public async Task<bool> DoesNameExist(string name, Guid? claimTypeId = null)
{
return await DbSet.WhereIf(claimTypeId != null, ct => ct.Id == claimTypeId).CountAsync(ct => ct.Name == name) > 0;
}
}
}

2
modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IIdentityDbContext.cs

@ -10,5 +10,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
DbSet<IdentityUser> Users { get; set; }
DbSet<IdentityRole> Roles { get; set; }
DbSet<IdentityClaimType> ClaimTypes { get; set; }
}
}

2
modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContext.cs

@ -18,6 +18,8 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
public DbSet<IdentityRole> Roles { get; set; }
public DbSet<IdentityClaimType> ClaimTypes { get; set; }
public IdentityDbContext(DbContextOptions<IdentityDbContext> options)
: base(options)
{

11
modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/IdentityDbContextModelBuilderExtensions.cs

@ -112,6 +112,17 @@ namespace Volo.Abp.Identity.EntityFrameworkCore
b.HasIndex(uc => uc.RoleId);
});
builder.Entity<IdentityClaimType>(b =>
{
b.ToTable(options.TablePrefix + "ClaimTypes", options.Schema);
b.Property(uc => uc.Name).HasMaxLength(IdentityClaimTypeConsts.MaxNameLength).IsRequired(); // make unique
b.Property(uc => uc.Regex).HasMaxLength(IdentityClaimTypeConsts.MaxRegexLength);
b.Property(uc => uc.RegexDescription).HasMaxLength(IdentityClaimTypeConsts.MaxRegexDescriptionLength);
b.Property(uc => uc.Description).HasMaxLength(IdentityClaimTypeConsts.MaxDescriptionLength);
});
}
}
}

5
modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityBsonClassMap.cs

@ -22,6 +22,11 @@ namespace Volo.Abp.Identity.MongoDB
{
map.AutoMap();
});
BsonClassMap.RegisterClassMap<IdentityClaimType>(map =>
{
map.AutoMap();
});
});
}
}

2
modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbContext.cs

@ -13,6 +13,8 @@ namespace Volo.Abp.Identity.MongoDB
public IMongoCollection<IdentityRole> Roles => Collection<IdentityRole>();
public IMongoCollection<IdentityClaimType> ClaimTypes => Collection<IdentityClaimType>();
protected override void CreateModel(IMongoModelBuilder modelBuilder)
{
base.CreateModel(modelBuilder);

5
modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbContextExtensions.cs

@ -24,6 +24,11 @@ namespace Volo.Abp.Identity.MongoDB
{
b.CollectionName = options.CollectionPrefix + "Roles";
});
builder.Entity<IdentityClaimType>(b =>
{
b.CollectionName = options.CollectionPrefix + "ClaimTypes";
});
}
}
}

1
modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/AbpIdentityMongoDbModule.cs

@ -18,6 +18,7 @@ namespace Volo.Abp.Identity.MongoDB
{
options.AddRepository<IdentityUser, MongoIdentityUserRepository>();
options.AddRepository<IdentityRole, MongoIdentityRoleRepository>();
options.AddRepository<IdentityClaimType, MongoIdentityRoleRepository>();
});
}
}

2
modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/IAbpIdentityMongoDbContext.cs

@ -10,5 +10,7 @@ namespace Volo.Abp.Identity.MongoDB
IMongoCollection<IdentityUser> Users { get; }
IMongoCollection<IdentityRole> Roles { get; }
IMongoCollection<IdentityClaimType> ClaimTypes { get; }
}
}

23
modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityClaimTypeRepository.cs

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MongoDB.Driver.Linq;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
namespace Volo.Abp.Identity.MongoDB
{
public class MongoIdentityClaimTypeRepository : MongoDbRepository<IAbpIdentityMongoDbContext, IdentityClaimType, Guid>, IIdentityClaimTypeRepository
{
public MongoIdentityClaimTypeRepository(IMongoDbContextProvider<IAbpIdentityMongoDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public async Task<bool> DoesNameExist(string name, Guid? claimTypeId = null)
{
return GetMongoQueryable().WhereIf(claimTypeId != null, ct => ct.Id == claimTypeId).Count(ct => ct.Name == name) > 0;
}
}
}

2
modules/identity/test/Volo.Abp.Identity.Domain.Tests/Volo/Abp/Identity/AbpIdentityDomainTestBase.cs

@ -4,4 +4,4 @@
{
}
}
}

9
modules/identity/test/Volo.Abp.Identity.EntityFrameworkCore.Tests/Volo/Abp/Identity/EntityFrameworkCore/IdentityClaimTypeRepository_Tests.cs

@ -0,0 +1,9 @@
using Volo.Abp.Identity.EntityFrameworkCore;
namespace Volo.Abp.Identity.MongoDB
{
public class IdentityClaimTypeRepository_Tests : IdentityClaimTypeRepository_Tests<AbpIdentityEntityFrameworkCoreTestModule>
{
}
}

7
modules/identity/test/Volo.Abp.Identity.MongoDB.Tests/Volo/Abp/Identity/MongoDB/IdentityClaimTypeRepository_Tests.cs

@ -0,0 +1,7 @@
namespace Volo.Abp.Identity.MongoDB
{
public class IdentityClaimTypeRepository_Tests : IdentityClaimTypeRepository_Tests<AbpIdentityMongoDbTestModule>
{
}
}

12
modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/AbpIdentityTestDataBuilder.cs

@ -9,6 +9,7 @@ namespace Volo.Abp.Identity
{
private readonly IGuidGenerator _guidGenerator;
private readonly IIdentityUserRepository _userRepository;
private readonly IIdentityClaimTypeRepository _identityClaimTypeRepository;
private readonly IIdentityRoleRepository _roleRepository;
private readonly ILookupNormalizer _lookupNormalizer;
private readonly IdentityTestData _testData;
@ -20,12 +21,14 @@ namespace Volo.Abp.Identity
public AbpIdentityTestDataBuilder(
IGuidGenerator guidGenerator,
IIdentityUserRepository userRepository,
IIdentityClaimTypeRepository identityClaimTypeRepository,
IIdentityRoleRepository roleRepository,
ILookupNormalizer lookupNormalizer,
IdentityTestData testData)
{
_guidGenerator = guidGenerator;
_userRepository = userRepository;
_identityClaimTypeRepository = identityClaimTypeRepository;
_roleRepository = roleRepository;
_lookupNormalizer = lookupNormalizer;
_testData = testData;
@ -35,6 +38,7 @@ namespace Volo.Abp.Identity
{
AddRoles();
AddUsers();
AddClaimTypes();
}
private void AddRoles()
@ -73,5 +77,13 @@ namespace Volo.Abp.Identity
neo.AddClaim(_guidGenerator, new Claim("TestClaimType", "43"));
_userRepository.Insert(neo);
}
private void AddClaimTypes()
{
var ageClaim = new IdentityClaimType(_testData.AgeClaimId, "Age", false, false, null, null, null,IdentityClaimValueType.Int);
_identityClaimTypeRepository.Insert(ageClaim);
var educationClaim = new IdentityClaimType(_testData.EducationClaimId, "Education", true, false, null, null, null);
_identityClaimTypeRepository.Insert(educationClaim);
}
}
}

40
modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityClaimTypeRepository_Tests.cs

@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Shouldly;
using Volo.Abp.Guids;
using Volo.Abp.Modularity;
using Xunit;
namespace Volo.Abp.Identity
{
public abstract class IdentityClaimTypeRepository_Tests<TStartupModule> : AbpIdentityTestBase<TStartupModule>
where TStartupModule : IAbpModule
{
protected IIdentityClaimTypeRepository ClaimTypeRepository { get; }
protected IGuidGenerator GuidGenerator { get; }
public IdentityClaimTypeRepository_Tests()
{
ClaimTypeRepository = ServiceProvider.GetRequiredService<IIdentityClaimTypeRepository>();
GuidGenerator = ServiceProvider.GetRequiredService<IGuidGenerator>();
}
[Fact]
public async Task Should_Check_Name_If_It_Is_Uniquee()
{
var claim = (await ClaimTypeRepository.GetListAsync()).FirstOrDefault();
var result1 = await ClaimTypeRepository.DoesNameExist(claim.Name);
result1.ShouldBe(true);
var result2 = await ClaimTypeRepository.DoesNameExist(Guid.NewGuid().ToString());
result2.ShouldBe(false);
}
}
}

2
modules/identity/test/Volo.Abp.Identity.TestBase/Volo/Abp/Identity/IdentityTestData.cs

@ -10,5 +10,7 @@ namespace Volo.Abp.Identity
public Guid UserJohnId { get; } = Guid.NewGuid();
public Guid UserDavidId { get; } = Guid.NewGuid();
public Guid UserNeoId { get; } = Guid.NewGuid();
public Guid AgeClaimId { get; } = Guid.NewGuid();
public Guid EducationClaimId { get; } = Guid.NewGuid();
}
}

Loading…
Cancel
Save