using Microsoft.AspNetCore.Identity; using Raven.Client.Documents; using Raven.Client.Documents.Linq; using Raven.Client.Documents.Session; using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using zero.Core.Entities; namespace zero.Core.Identity { public partial class UserStore : IUserRoleStore { /// public async Task AddToRoleAsync(IUser user, string roleName, CancellationToken cancellationToken) { using (IAsyncDocumentSession session = Raven.OpenAsyncSession()) { user.RoleIds.Add(roleName); await session.StoreAsync(user, cancellationToken); await session.SaveChangesAsync(cancellationToken); } } /// public Task> GetRolesAsync(IUser user, CancellationToken cancellationToken) { return Task.FromResult((IList)user.RoleIds.ToList()); } /// public async Task> GetUsersInRoleAsync(string roleName, CancellationToken cancellationToken) { using (IAsyncDocumentSession session = Raven.OpenAsyncSession()) { return await session.Query().Where(x => roleName.In(x.RoleIds)).ToListAsync(); } } /// public Task IsInRoleAsync(IUser user, string roleName, CancellationToken cancellationToken) { return Task.FromResult(user.RoleIds.Contains(roleName, StringComparer.InvariantCultureIgnoreCase)); } /// public async Task RemoveFromRoleAsync(IUser user, string roleName, CancellationToken cancellationToken) { using (IAsyncDocumentSession session = Raven.OpenAsyncSession()) { user.RoleIds.Remove(roleName); await session.StoreAsync(user, cancellationToken); await session.SaveChangesAsync(cancellationToken); } } } }