IDocumentStore => IZeroStore

This commit is contained in:
2020-11-15 17:07:27 +01:00
parent 3943f92f4c
commit c4e91efd5b
33 changed files with 155 additions and 164 deletions
+9 -8
View File
@@ -8,6 +8,7 @@ using System.Linq;
using System.Security.Claims;
using System.Threading;
using System.Threading.Tasks;
using zero.Core.Database;
using zero.Core.Entities;
namespace zero.Core.Identity
@@ -15,14 +16,14 @@ namespace zero.Core.Identity
public class RavenRoleStore<TRole> : IRoleStore<TRole>, IRoleClaimStore<TRole>
where TRole : class, IIdentityUserRole
{
protected IDocumentStore Raven { get; private set; }
protected IZeroStore Store { get; private set; }
protected IdentityErrorDescriber ErrorDescriber { get; private set; }
public RavenRoleStore(IDocumentStore raven, IdentityErrorDescriber describer = null)
public RavenRoleStore(IZeroStore store, IdentityErrorDescriber describer = null)
{
Raven = raven;
Store = store;
ErrorDescriber = describer ?? new IdentityErrorDescriber();
}
@@ -50,7 +51,7 @@ namespace zero.Core.Identity
Description = $"The affected role is is not part of this role store and can't be created."
});
}
using (IAsyncDocumentSession session = Raven.OpenAsyncSession())
using (IAsyncDocumentSession session = Store.OpenAsyncSession())
{
await session.StoreAsync(role);
await session.SaveChangesAsync(cancellationToken);
@@ -72,7 +73,7 @@ namespace zero.Core.Identity
}
try
{
using IAsyncDocumentSession session = Raven.OpenAsyncSession();
using IAsyncDocumentSession session = Store.OpenAsyncSession();
await session.StoreAsync(role, cancellationToken);
await session.SaveChangesAsync(cancellationToken);
}
@@ -97,7 +98,7 @@ namespace zero.Core.Identity
}
try
{
using IAsyncDocumentSession session = Raven.OpenAsyncSession();
using IAsyncDocumentSession session = Store.OpenAsyncSession();
session.Delete(role);
await session.SaveChangesAsync(cancellationToken);
}
@@ -139,7 +140,7 @@ namespace zero.Core.Identity
/// <inheritdoc/>
public async Task<TRole> FindByIdAsync(string roleId, CancellationToken cancellationToken)
{
using IAsyncDocumentSession session = Raven.OpenAsyncSession();
using IAsyncDocumentSession session = Store.OpenAsyncSession();
return await ScopeQuery(session.Query<TRole>()).FirstOrDefaultAsync(x => x.Id == roleId, cancellationToken);
}
@@ -147,7 +148,7 @@ namespace zero.Core.Identity
/// <inheritdoc/>
public async Task<TRole> FindByNameAsync(string normalizedRoleName, CancellationToken cancellationToken)
{
using IAsyncDocumentSession session = Raven.OpenAsyncSession();
using IAsyncDocumentSession session = Store.OpenAsyncSession();
return await ScopeQuery(session.Query<TRole>()).FirstOrDefaultAsync(x => x.Name == normalizedRoleName, cancellationToken);
}
+4 -3
View File
@@ -2,6 +2,7 @@
using Raven.Client.Documents;
using Raven.Client.Documents.Linq;
using System;
using zero.Core.Database;
using zero.Core.Entities;
using zero.Core.Extensions;
@@ -12,7 +13,7 @@ namespace zero.Core.Identity
{
protected IZeroContext Context { get; private set; }
public RavenScopedRoleStore(IDocumentStore raven, IZeroContext context, IdentityErrorDescriber describer = null) : base(raven, describer)
public RavenScopedRoleStore(IZeroStore store, IZeroContext context, IdentityErrorDescriber describer = null) : base(store, describer)
{
Context = context;
}
@@ -31,7 +32,7 @@ namespace zero.Core.Identity
{
protected IZeroContext Context { get; private set; }
public RavenScopedUserStore(IDocumentStore raven, IZeroContext context) : base(raven)
public RavenScopedUserStore(IZeroStore store, IZeroContext context) : base(store)
{
Context = context;
}
@@ -54,7 +55,7 @@ namespace zero.Core.Identity
{
protected IZeroContext Context { get; private set; }
public RavenScopedUserStore(IDocumentStore raven, IZeroContext context) : base(raven)
public RavenScopedUserStore(IZeroStore store, IZeroContext context) : base(store)
{
Context = context;
}
+20 -19
View File
@@ -8,6 +8,7 @@ using System.Linq;
using System.Security.Claims;
using System.Threading;
using System.Threading.Tasks;
using zero.Core.Database;
using zero.Core.Entities;
using zero.Core.Extensions;
@@ -23,11 +24,11 @@ namespace zero.Core.Identity
IProtectedUserStore<TUser>
where TUser : class, IIdentityUser
{
protected IDocumentStore Raven { get; private set; }
protected IZeroStore Store { get; private set; }
public RavenUserStore(IDocumentStore raven)
public RavenUserStore(IZeroStore store)
{
Raven = raven;
Store = store;
}
@@ -61,10 +62,10 @@ namespace zero.Core.Identity
});
}
using IAsyncDocumentSession session = Raven.OpenAsyncSession();
using IAsyncDocumentSession session = Store.OpenAsyncSession();
// try to reserve the key for the new user
if (!await Raven.ReserveAsync(GetReservationKey(user), user.Id))
if (!await Store.RavenStore.ReserveAsync(GetReservationKey(user), user.Id))
{
return IdentityResult.Failed(new IdentityError
{
@@ -86,7 +87,7 @@ namespace zero.Core.Identity
{
// The compare/exchange email reservation is cluster-wide, outside of the session scope.
// We need to manually roll it back.
await Raven.RemoveReservationAsync(GetReservationKey(user));
await Store.RavenStore.RemoveReservationAsync(GetReservationKey(user));
throw;
}
@@ -107,11 +108,11 @@ namespace zero.Core.Identity
}
// Remove the cluster-wide compare/exchange key.
await Raven.RemoveReservationAsync(GetReservationKey(user));
await Store.RavenStore.RemoveReservationAsync(GetReservationKey(user));
// Delete the user and save it. We must save it because deleting is a cluster-wide operation.
// Only if the deletion succeeds will we remove the cluster-wide compare/exchange key.
using IAsyncDocumentSession session = Raven.OpenAsyncSession();
using IAsyncDocumentSession session = Store.OpenAsyncSession();
TUser source = await session.LoadAsync<TUser>(user.Id, cancellationToken);
@@ -134,7 +135,7 @@ namespace zero.Core.Identity
});
}
using (IAsyncDocumentSession session = Raven.OpenAsyncSession())
using (IAsyncDocumentSession session = Store.OpenAsyncSession())
{
TUser source = await session.LoadAsync<TUser>(user.Id, cancellationToken);
@@ -150,7 +151,7 @@ namespace zero.Core.Identity
if (source.Email != user.Email)
{
// try to reserve the key for the new user
if (!await Raven.ReserveAsync(GetReservationKey(user), user.Id))
if (!await Store.RavenStore.ReserveAsync(GetReservationKey(user), user.Id))
{
return IdentityResult.Failed(new IdentityError
{
@@ -160,11 +161,11 @@ namespace zero.Core.Identity
}
// Remove the cluster-wide compare/exchange key.
await Raven.RemoveReservationAsync(GetReservationKey(source));
await Store.RavenStore.RemoveReservationAsync(GetReservationKey(source));
}
}
using (IAsyncDocumentSession session = Raven.OpenAsyncSession())
using (IAsyncDocumentSession session = Store.OpenAsyncSession())
{
await session.StoreAsync(user, cancellationToken);
await session.SaveChangesAsync(cancellationToken);
@@ -177,7 +178,7 @@ namespace zero.Core.Identity
/// <inheritdoc />
public async Task<TUser> FindByIdAsync(string userId, CancellationToken cancellationToken)
{
using IAsyncDocumentSession session = Raven.OpenAsyncSession();
using IAsyncDocumentSession session = Store.OpenAsyncSession();
return await ScopeQuery(session.Query<TUser>()).FirstOrDefaultAsync(x => x.Id == userId, cancellationToken);
}
@@ -185,7 +186,7 @@ namespace zero.Core.Identity
/// <inheritdoc />
public async Task<TUser> FindByNameAsync(string normalizedUserName, CancellationToken cancellationToken)
{
using IAsyncDocumentSession session = Raven.OpenAsyncSession();
using IAsyncDocumentSession session = Store.OpenAsyncSession();
return await ScopeQuery(session.Query<TUser>()).FirstOrDefaultAsync(x => x.Username == normalizedUserName, cancellationToken);
}
@@ -253,7 +254,7 @@ namespace zero.Core.Identity
/// <inheritdoc />
public async Task<TUser> FindByEmailAsync(string normalizedEmail, CancellationToken cancellationToken)
{
using IAsyncDocumentSession session = Raven.OpenAsyncSession();
using IAsyncDocumentSession session = Store.OpenAsyncSession();
return await ScopeQuery(session.Query<TUser>()).FirstOrDefaultAsync(x => x.Email == normalizedEmail, cancellationToken);
}
@@ -384,7 +385,7 @@ namespace zero.Core.Identity
return;
}
using IAsyncDocumentSession session = Raven.OpenAsyncSession();
using IAsyncDocumentSession session = Store.OpenAsyncSession();
user.Claims.AddRange(claims.Select(claim => new UserClaim(claim)));
await session.StoreAsync(user, cancellationToken);
@@ -402,7 +403,7 @@ namespace zero.Core.Identity
/// <inheritdoc />
public async Task<IList<TUser>> GetUsersForClaimAsync(Claim claim, CancellationToken cancellationToken)
{
using IAsyncDocumentSession session = Raven.OpenAsyncSession();
using IAsyncDocumentSession session = Store.OpenAsyncSession();
UserClaim userClaim = new UserClaim(claim);
return await ScopeQuery(session.Query<TUser>()).Where(x => x.Claims.Any(c => c.Type == userClaim.Type && c.Value == userClaim.Value)).ToListAsync();
}
@@ -417,7 +418,7 @@ namespace zero.Core.Identity
return;
}
using IAsyncDocumentSession session = Raven.OpenAsyncSession();
using IAsyncDocumentSession session = Store.OpenAsyncSession();
IEnumerable<UserClaim> userClaims = claims.Select(c => new UserClaim(c)).ToList();
@@ -438,7 +439,7 @@ namespace zero.Core.Identity
return;
}
using IAsyncDocumentSession session = Raven.OpenAsyncSession();
using IAsyncDocumentSession session = Store.OpenAsyncSession();
UserClaim userClaim = new UserClaim(claim);
UserClaim newUserClaim = new UserClaim(newClaim);
@@ -7,6 +7,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using zero.Core.Database;
namespace zero.Core.Identity
{
@@ -18,7 +19,7 @@ namespace zero.Core.Identity
where TUser : class, IIdentityUserWithRoles
where TRole : class, IIdentityUserRole
{
public RavenUserStore(IDocumentStore raven) : base(raven) { }
public RavenUserStore(IZeroStore store) : base(store) { }
/// <inheritdoc />
@@ -39,7 +40,7 @@ namespace zero.Core.Identity
/// <inheritdoc />
public async Task<IList<TUser>> GetUsersInRoleAsync(string roleName, CancellationToken cancellationToken)
{
using IAsyncDocumentSession session = Raven.OpenAsyncSession();
using IAsyncDocumentSession session = Store.OpenAsyncSession();
return await ScopeQuery(session.Query<TUser>()).Where(x => roleName.In(x.RoleIds)).ToListAsync(); // TODO scope
}