Deleted MembersRoleProvider. Switched to role store. Made everything single not plural. Fixed formatting.
This commit is contained in:
@@ -237,6 +237,7 @@ namespace Umbraco.Cms.Core.Models.Mapping
|
||||
var userRoles = username.IsNullOrWhiteSpace() ? null : _memberService.GetAllRoles(username);
|
||||
|
||||
// create a dictionary of all roles (except internal roles) + "false"
|
||||
//TODO: use MembersRoleStore
|
||||
var result = _memberGroupService.GetAll()
|
||||
.Select(x => x.Name)
|
||||
// if a role starts with __umbracoRole we won't show it as it's an internal role used for public access
|
||||
|
||||
@@ -3,7 +3,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
/// <summary>
|
||||
/// The user manager for members
|
||||
/// </summary>
|
||||
public interface IMemberManager : IUmbracoUserManager<MembersIdentityUser>
|
||||
public interface IMemberManager : IUmbracoUserManager<MemberIdentityUser>
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,10 +42,10 @@ namespace Umbraco.Cms.Core.Security
|
||||
target.EnableChangeTracking();
|
||||
});
|
||||
|
||||
mapper.Define<IMember, MembersIdentityUser>(
|
||||
mapper.Define<IMember, MemberIdentityUser>(
|
||||
(source, context) =>
|
||||
{
|
||||
var target = new MembersIdentityUser(source.Id);
|
||||
var target = new MemberIdentityUser(source.Id);
|
||||
target.DisableChangeTracking();
|
||||
return target;
|
||||
},
|
||||
@@ -94,7 +94,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
//target.Roles =;
|
||||
}
|
||||
|
||||
private void Map(IMember source, MembersIdentityUser target)
|
||||
private void Map(IMember source, MemberIdentityUser target)
|
||||
{
|
||||
target.Email = source.Email;
|
||||
target.UserName = source.Username;
|
||||
|
||||
@@ -5,18 +5,18 @@ using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace Umbraco.Cms.Core.Security
|
||||
{
|
||||
public class MembersIdentityBuilder : IdentityBuilder
|
||||
public class MemberIdentityBuilder : IdentityBuilder
|
||||
{
|
||||
public MembersIdentityBuilder(IServiceCollection services) : base(typeof(MembersIdentityUser), services)
|
||||
public MemberIdentityBuilder(IServiceCollection services) : base(typeof(MemberIdentityUser), services)
|
||||
{
|
||||
}
|
||||
|
||||
public MembersIdentityBuilder(Type role, IServiceCollection services) : base(typeof(MembersIdentityUser), role, services)
|
||||
public MemberIdentityBuilder(Type role, IServiceCollection services) : base(typeof(MemberIdentityUser), role, services)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds a token provider for the <seealso cref="MembersIdentityUser"/>.
|
||||
/// Adds a token provider for the <seealso cref="MemberIdentityUser"/>.
|
||||
/// </summary>
|
||||
/// <param name="providerName">The name of the provider to add.</param>
|
||||
/// <param name="provider">The type of the <see cref="IUserTwoFactorTokenProvider{UmbracoMembersIdentityUser}"/> to add.</param>
|
||||
@@ -27,7 +27,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
{
|
||||
throw new InvalidOperationException($"Invalid Type for TokenProvider: {provider.FullName}");
|
||||
}
|
||||
Services.Configure<MembersIdentityOptions>(options =>
|
||||
Services.Configure<MemberIdentityOptions>(options =>
|
||||
{
|
||||
options.Tokens.ProviderMap[providerName] = new TokenProviderDescriptor(provider);
|
||||
});
|
||||
@@ -5,7 +5,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
/// <summary>
|
||||
/// Identity options specifically for the Umbraco members identity implementation
|
||||
/// </summary>
|
||||
public class MembersIdentityOptions : IdentityOptions
|
||||
public class MemberIdentityOptions : IdentityOptions
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
/// <summary>
|
||||
/// The identity user used for the member
|
||||
/// </summary>
|
||||
public class MembersIdentityUser : UmbracoIdentityUser
|
||||
public class MemberIdentityUser : UmbracoIdentityUser
|
||||
{
|
||||
private string _name;
|
||||
private string _passwordConfig;
|
||||
@@ -23,29 +23,29 @@ namespace Umbraco.Cms.Core.Security
|
||||
groups => groups.GetHashCode());
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="MembersIdentityUser"/> class.
|
||||
/// Initializes a new instance of the <see cref="MemberIdentityUser"/> class.
|
||||
/// </summary>
|
||||
public MembersIdentityUser(int userId)
|
||||
public MemberIdentityUser(int userId)
|
||||
{
|
||||
// use the property setters - they do more than just setting a field
|
||||
Id = UserIdToString(userId);
|
||||
}
|
||||
|
||||
public MembersIdentityUser()
|
||||
public MemberIdentityUser()
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Used to construct a new instance without an identity
|
||||
/// </summary>
|
||||
public static MembersIdentityUser CreateNew(string username, string email, string memberTypeAlias, string name = null)
|
||||
public static MemberIdentityUser CreateNew(string username, string email, string memberTypeAlias, string name = null)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(username))
|
||||
{
|
||||
throw new ArgumentException("Value cannot be null or whitespace.", nameof(username));
|
||||
}
|
||||
|
||||
var user = new MembersIdentityUser();
|
||||
var user = new MemberIdentityUser();
|
||||
user.DisableChangeTracking();
|
||||
user.UserName = username;
|
||||
user.Email = email;
|
||||
@@ -1,5 +1,4 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Claims;
|
||||
@@ -7,7 +6,6 @@ using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Scoping;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
|
||||
namespace Umbraco.Cms.Core.Security
|
||||
@@ -15,19 +13,12 @@ namespace Umbraco.Cms.Core.Security
|
||||
/// <summary>
|
||||
/// A custom user store that uses Umbraco member data
|
||||
/// </summary>
|
||||
public class MembersRoleStore : RoleStoreBase<IdentityRole<string>, string, IdentityUserRole<string>, IdentityRoleClaim<string>>
|
||||
public class MemberRoleStore : RoleStoreBase<IdentityRole<string>, string, IdentityUserRole<string>, IdentityRoleClaim<string>>
|
||||
{
|
||||
private readonly IMemberService _memberService;
|
||||
private readonly IMemberGroupService _memberGroupService;
|
||||
private readonly IScopeProvider _scopeProvider;
|
||||
|
||||
public MembersRoleStore(IMemberService memberService, IMemberGroupService memberGroupService, IScopeProvider scopeProvider, IdentityErrorDescriber describer)
|
||||
: base(describer)
|
||||
{
|
||||
_memberService = memberService ?? throw new ArgumentNullException(nameof(memberService));
|
||||
_memberGroupService = memberGroupService ?? throw new ArgumentNullException(nameof(memberGroupService));
|
||||
_scopeProvider = scopeProvider ?? throw new ArgumentNullException(nameof(scopeProvider));
|
||||
}
|
||||
public MemberRoleStore(IMemberGroupService memberGroupService, IdentityErrorDescriber describer)
|
||||
: base(describer) => _memberGroupService = memberGroupService ?? throw new ArgumentNullException(nameof(memberGroupService));
|
||||
|
||||
/// <inheritdoc />
|
||||
public override IQueryable<IdentityRole<string>> Roles
|
||||
@@ -94,7 +85,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
}
|
||||
else
|
||||
{
|
||||
//TODO: throw exception when not found, or return failure? And is this the correcet message
|
||||
//TODO: throw exception when not found, or return failure? And is this the correct message
|
||||
return Task.FromResult(IdentityResult.Failed(ErrorDescriber.InvalidRoleName(role.Name)));
|
||||
}
|
||||
|
||||
@@ -123,7 +114,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
}
|
||||
else
|
||||
{
|
||||
//TODO: throw exception when not found, or return failure? And is this the correcet message
|
||||
//TODO: throw exception when not found, or return failure? And is this the correct message
|
||||
return Task.FromResult(IdentityResult.Failed(ErrorDescriber.InvalidRoleName(role.Name)));
|
||||
}
|
||||
|
||||
@@ -153,6 +144,8 @@ namespace Umbraco.Cms.Core.Security
|
||||
return Task.FromResult(memberGroup == null ? null : MapFromMemberGroup(memberGroup));
|
||||
}
|
||||
|
||||
///TODO: are we implementing these claims methods?
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task<IList<Claim>> GetClaimsAsync(IdentityRole<string> role, CancellationToken cancellationToken = new CancellationToken()) => throw new System.NotImplementedException();
|
||||
|
||||
@@ -19,20 +19,20 @@ namespace Umbraco.Cms.Core.Security
|
||||
/// <summary>
|
||||
/// A custom user store that uses Umbraco member data
|
||||
/// </summary>
|
||||
public class MembersUserStore : UserStoreBase<MembersIdentityUser, IdentityRole<string>, string, IdentityUserClaim<string>, IdentityUserRole<string>, IdentityUserLogin<string>, IdentityUserToken<string>, IdentityRoleClaim<string>>
|
||||
public class MemberUserStore : UserStoreBase<MemberIdentityUser, IdentityRole<string>, string, IdentityUserClaim<string>, IdentityUserRole<string>, IdentityUserLogin<string>, IdentityUserToken<string>, IdentityRoleClaim<string>>
|
||||
{
|
||||
private readonly IMemberService _memberService;
|
||||
private readonly UmbracoMapper _mapper;
|
||||
private readonly IScopeProvider _scopeProvider;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="MembersUserStore"/> class for the members identity store
|
||||
/// Initializes a new instance of the <see cref="MemberUserStore"/> class for the members identity store
|
||||
/// </summary>
|
||||
/// <param name="memberService">The member service</param>
|
||||
/// <param name="mapper">The mapper for properties</param>
|
||||
/// <param name="scopeProvider">The scope provider</param>
|
||||
/// <param name="describer">The error describer</param>
|
||||
public MembersUserStore(IMemberService memberService, UmbracoMapper mapper, IScopeProvider scopeProvider, IdentityErrorDescriber describer)
|
||||
public MemberUserStore(IMemberService memberService, UmbracoMapper mapper, IScopeProvider scopeProvider, IdentityErrorDescriber describer)
|
||||
: base(describer)
|
||||
{
|
||||
_memberService = memberService ?? throw new ArgumentNullException(nameof(memberService));
|
||||
@@ -45,16 +45,16 @@ namespace Umbraco.Cms.Core.Security
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public override IQueryable<MembersIdentityUser> Users => throw new NotImplementedException();
|
||||
public override IQueryable<MemberIdentityUser> Users => throw new NotImplementedException();
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task<string> GetNormalizedUserNameAsync(MembersIdentityUser user, CancellationToken cancellationToken) => GetUserNameAsync(user, cancellationToken);
|
||||
public override Task<string> GetNormalizedUserNameAsync(MemberIdentityUser user, CancellationToken cancellationToken) => GetUserNameAsync(user, cancellationToken);
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task SetNormalizedUserNameAsync(MembersIdentityUser user, string normalizedName, CancellationToken cancellationToken) => SetUserNameAsync(user, normalizedName, cancellationToken);
|
||||
public override Task SetNormalizedUserNameAsync(MemberIdentityUser user, string normalizedName, CancellationToken cancellationToken) => SetUserNameAsync(user, normalizedName, cancellationToken);
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task<IdentityResult> CreateAsync(MembersIdentityUser user, CancellationToken cancellationToken = default)
|
||||
public override Task<IdentityResult> CreateAsync(MemberIdentityUser user, CancellationToken cancellationToken = default)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
ThrowIfDisposed();
|
||||
@@ -100,7 +100,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task<IdentityResult> UpdateAsync(MembersIdentityUser user, CancellationToken cancellationToken = default)
|
||||
public override Task<IdentityResult> UpdateAsync(MemberIdentityUser user, CancellationToken cancellationToken = default)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
ThrowIfDisposed();
|
||||
@@ -121,7 +121,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
if (found != null)
|
||||
{
|
||||
// we have to remember whether Logins property is dirty, since the UpdateMemberProperties will reset it.
|
||||
var isLoginsPropertyDirty = user.IsPropertyDirty(nameof(MembersIdentityUser.Logins));
|
||||
var isLoginsPropertyDirty = user.IsPropertyDirty(nameof(MemberIdentityUser.Logins));
|
||||
|
||||
if (UpdateMemberProperties(found, user))
|
||||
{
|
||||
@@ -148,7 +148,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task<IdentityResult> DeleteAsync(MembersIdentityUser user, CancellationToken cancellationToken = default)
|
||||
public override Task<IdentityResult> DeleteAsync(MemberIdentityUser user, CancellationToken cancellationToken = default)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
ThrowIfDisposed();
|
||||
@@ -170,10 +170,10 @@ namespace Umbraco.Cms.Core.Security
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task<MembersIdentityUser> FindByIdAsync(string userId, CancellationToken cancellationToken = default) => FindUserAsync(userId, cancellationToken);
|
||||
public override Task<MemberIdentityUser> FindByIdAsync(string userId, CancellationToken cancellationToken = default) => FindUserAsync(userId, cancellationToken);
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override Task<MembersIdentityUser> FindUserAsync(string userId, CancellationToken cancellationToken)
|
||||
protected override Task<MemberIdentityUser> FindUserAsync(string userId, CancellationToken cancellationToken)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
ThrowIfDisposed();
|
||||
@@ -181,30 +181,30 @@ namespace Umbraco.Cms.Core.Security
|
||||
IMember user = _memberService.GetById(UserIdToInt(userId));
|
||||
if (user == null)
|
||||
{
|
||||
return Task.FromResult((MembersIdentityUser)null);
|
||||
return Task.FromResult((MemberIdentityUser)null);
|
||||
}
|
||||
|
||||
return Task.FromResult(AssignLoginsCallback(_mapper.Map<MembersIdentityUser>(user)));
|
||||
return Task.FromResult(AssignLoginsCallback(_mapper.Map<MemberIdentityUser>(user)));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task<MembersIdentityUser> FindByNameAsync(string userName, CancellationToken cancellationToken = default)
|
||||
public override Task<MemberIdentityUser> FindByNameAsync(string userName, CancellationToken cancellationToken = default)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
ThrowIfDisposed();
|
||||
IMember user = _memberService.GetByUsername(userName);
|
||||
if (user == null)
|
||||
{
|
||||
return Task.FromResult((MembersIdentityUser)null);
|
||||
return Task.FromResult((MemberIdentityUser)null);
|
||||
}
|
||||
|
||||
MembersIdentityUser result = AssignLoginsCallback(_mapper.Map<MembersIdentityUser>(user));
|
||||
MemberIdentityUser result = AssignLoginsCallback(_mapper.Map<MemberIdentityUser>(user));
|
||||
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override async Task SetPasswordHashAsync(MembersIdentityUser user, string passwordHash, CancellationToken cancellationToken = default)
|
||||
public override async Task SetPasswordHashAsync(MemberIdentityUser user, string passwordHash, CancellationToken cancellationToken = default)
|
||||
{
|
||||
await base.SetPasswordHashAsync(user, passwordHash, cancellationToken);
|
||||
|
||||
@@ -213,7 +213,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override async Task<bool> HasPasswordAsync(MembersIdentityUser user, CancellationToken cancellationToken = default)
|
||||
public override async Task<bool> HasPasswordAsync(MemberIdentityUser user, CancellationToken cancellationToken = default)
|
||||
{
|
||||
// This checks if it's null
|
||||
var result = await base.HasPasswordAsync(user, cancellationToken);
|
||||
@@ -227,28 +227,28 @@ namespace Umbraco.Cms.Core.Security
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task<MembersIdentityUser> FindByEmailAsync(string email, CancellationToken cancellationToken = default)
|
||||
public override Task<MemberIdentityUser> FindByEmailAsync(string email, CancellationToken cancellationToken = default)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
ThrowIfDisposed();
|
||||
IMember member = _memberService.GetByEmail(email);
|
||||
MembersIdentityUser result = member == null
|
||||
MemberIdentityUser result = member == null
|
||||
? null
|
||||
: _mapper.Map<MembersIdentityUser>(member);
|
||||
: _mapper.Map<MemberIdentityUser>(member);
|
||||
|
||||
return Task.FromResult(AssignLoginsCallback(result));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task<string> GetNormalizedEmailAsync(MembersIdentityUser user, CancellationToken cancellationToken)
|
||||
public override Task<string> GetNormalizedEmailAsync(MemberIdentityUser user, CancellationToken cancellationToken)
|
||||
=> GetEmailAsync(user, cancellationToken);
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task SetNormalizedEmailAsync(MembersIdentityUser user, string normalizedEmail, CancellationToken cancellationToken)
|
||||
public override Task SetNormalizedEmailAsync(MemberIdentityUser user, string normalizedEmail, CancellationToken cancellationToken)
|
||||
=> SetEmailAsync(user, normalizedEmail, cancellationToken);
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task AddLoginAsync(MembersIdentityUser user, UserLoginInfo login, CancellationToken cancellationToken = default)
|
||||
public override Task AddLoginAsync(MemberIdentityUser user, UserLoginInfo login, CancellationToken cancellationToken = default)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
ThrowIfDisposed();
|
||||
@@ -271,7 +271,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task RemoveLoginAsync(MembersIdentityUser user, string loginProvider, string providerKey, CancellationToken cancellationToken = default)
|
||||
public override Task RemoveLoginAsync(MemberIdentityUser user, string loginProvider, string providerKey, CancellationToken cancellationToken = default)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
ThrowIfDisposed();
|
||||
@@ -290,7 +290,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task<IList<UserLoginInfo>> GetLoginsAsync(MembersIdentityUser user, CancellationToken cancellationToken = default)
|
||||
public override Task<IList<UserLoginInfo>> GetLoginsAsync(MemberIdentityUser user, CancellationToken cancellationToken = default)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
ThrowIfDisposed();
|
||||
@@ -308,7 +308,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
ThrowIfDisposed();
|
||||
|
||||
MembersIdentityUser user = await FindUserAsync(userId, cancellationToken);
|
||||
MemberIdentityUser user = await FindUserAsync(userId, cancellationToken);
|
||||
if (user == null)
|
||||
{
|
||||
return null;
|
||||
@@ -356,7 +356,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task AddToRoleAsync(MembersIdentityUser user, string role, CancellationToken cancellationToken = default)
|
||||
public override Task AddToRoleAsync(MemberIdentityUser user, string role, CancellationToken cancellationToken = default)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
ThrowIfDisposed();
|
||||
@@ -387,7 +387,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override Task RemoveFromRoleAsync(MembersIdentityUser user, string role, CancellationToken cancellationToken = default)
|
||||
public override Task RemoveFromRoleAsync(MemberIdentityUser user, string role, CancellationToken cancellationToken = default)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
|
||||
@@ -420,7 +420,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
/// <summary>
|
||||
/// Gets a list of role names the specified user belongs to.
|
||||
/// </summary>
|
||||
public override Task<IList<string>> GetRolesAsync(MembersIdentityUser user, CancellationToken cancellationToken = default)
|
||||
public override Task<IList<string>> GetRolesAsync(MemberIdentityUser user, CancellationToken cancellationToken = default)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
ThrowIfDisposed();
|
||||
@@ -443,7 +443,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
/// <summary>
|
||||
/// Returns true if a user is in the role
|
||||
/// </summary>
|
||||
public override Task<bool> IsInRoleAsync(MembersIdentityUser user, string normalizedRoleName, CancellationToken cancellationToken = default)
|
||||
public override Task<bool> IsInRoleAsync(MemberIdentityUser user, string normalizedRoleName, CancellationToken cancellationToken = default)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
ThrowIfDisposed();
|
||||
@@ -458,7 +458,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
/// <summary>
|
||||
/// Lists all users of a given role.
|
||||
/// </summary>
|
||||
public override Task<IList<MembersIdentityUser>> GetUsersInRoleAsync(string normalizedRoleName, CancellationToken cancellationToken = default)
|
||||
public override Task<IList<MemberIdentityUser>> GetUsersInRoleAsync(string normalizedRoleName, CancellationToken cancellationToken = default)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
ThrowIfDisposed();
|
||||
@@ -469,7 +469,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
|
||||
IEnumerable<IMember> members = _memberService.GetMembersByMemberType(normalizedRoleName);
|
||||
|
||||
IList<MembersIdentityUser> membersIdentityUsers = members.Select(x => _mapper.Map<MembersIdentityUser>(x)).ToList();
|
||||
IList<MemberIdentityUser> membersIdentityUsers = members.Select(x => _mapper.Map<MemberIdentityUser>(x)).ToList();
|
||||
|
||||
return Task.FromResult(membersIdentityUsers);
|
||||
}
|
||||
@@ -493,7 +493,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
/// <inheritdoc/>
|
||||
protected override async Task<IdentityUserRole<string>> FindUserRoleAsync(string userId, string roleId, CancellationToken cancellationToken)
|
||||
{
|
||||
MembersIdentityUser user = await FindUserAsync(userId, cancellationToken);
|
||||
MemberIdentityUser user = await FindUserAsync(userId, cancellationToken);
|
||||
if (user == null)
|
||||
{
|
||||
return null;
|
||||
@@ -504,7 +504,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override Task<string> GetSecurityStampAsync(MembersIdentityUser user, CancellationToken cancellationToken = default)
|
||||
public override Task<string> GetSecurityStampAsync(MemberIdentityUser user, CancellationToken cancellationToken = default)
|
||||
{
|
||||
cancellationToken.ThrowIfCancellationRequested();
|
||||
ThrowIfDisposed();
|
||||
@@ -519,7 +519,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
: user.SecurityStamp);
|
||||
}
|
||||
|
||||
private MembersIdentityUser AssignLoginsCallback(MembersIdentityUser user)
|
||||
private MemberIdentityUser AssignLoginsCallback(MemberIdentityUser user)
|
||||
{
|
||||
if (user != null)
|
||||
{
|
||||
@@ -530,12 +530,12 @@ namespace Umbraco.Cms.Core.Security
|
||||
return user;
|
||||
}
|
||||
|
||||
private bool UpdateMemberProperties(IMember member, MembersIdentityUser identityUserMember)
|
||||
private bool UpdateMemberProperties(IMember member, MemberIdentityUser identityUserMember)
|
||||
{
|
||||
var anythingChanged = false;
|
||||
|
||||
// don't assign anything if nothing has changed as this will trigger the track changes of the model
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MembersIdentityUser.LastLoginDateUtc))
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MemberIdentityUser.LastLoginDateUtc))
|
||||
|| (member.LastLoginDate != default && identityUserMember.LastLoginDateUtc.HasValue == false)
|
||||
|| (identityUserMember.LastLoginDateUtc.HasValue && member.LastLoginDate.ToUniversalTime() != identityUserMember.LastLoginDateUtc.Value))
|
||||
{
|
||||
@@ -546,7 +546,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
member.LastLoginDate = dt;
|
||||
}
|
||||
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MembersIdentityUser.LastPasswordChangeDateUtc))
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MemberIdentityUser.LastPasswordChangeDateUtc))
|
||||
|| (member.LastPasswordChangeDate != default && identityUserMember.LastPasswordChangeDateUtc.HasValue == false)
|
||||
|| (identityUserMember.LastPasswordChangeDateUtc.HasValue && member.LastPasswordChangeDate.ToUniversalTime() != identityUserMember.LastPasswordChangeDateUtc.Value))
|
||||
{
|
||||
@@ -554,7 +554,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
member.LastPasswordChangeDate = identityUserMember.LastPasswordChangeDateUtc.Value.ToLocalTime();
|
||||
}
|
||||
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MembersIdentityUser.EmailConfirmed))
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MemberIdentityUser.EmailConfirmed))
|
||||
|| (member.EmailConfirmedDate.HasValue && member.EmailConfirmedDate.Value != default && identityUserMember.EmailConfirmed == false)
|
||||
|| ((member.EmailConfirmedDate.HasValue == false || member.EmailConfirmedDate.Value == default) && identityUserMember.EmailConfirmed))
|
||||
{
|
||||
@@ -562,21 +562,21 @@ namespace Umbraco.Cms.Core.Security
|
||||
member.EmailConfirmedDate = identityUserMember.EmailConfirmed ? (DateTime?)DateTime.Now : null;
|
||||
}
|
||||
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MembersIdentityUser.Name))
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MemberIdentityUser.Name))
|
||||
&& member.Name != identityUserMember.Name && identityUserMember.Name.IsNullOrWhiteSpace() == false)
|
||||
{
|
||||
anythingChanged = true;
|
||||
member.Name = identityUserMember.Name;
|
||||
}
|
||||
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MembersIdentityUser.Email))
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MemberIdentityUser.Email))
|
||||
&& member.Email != identityUserMember.Email && identityUserMember.Email.IsNullOrWhiteSpace() == false)
|
||||
{
|
||||
anythingChanged = true;
|
||||
member.Email = identityUserMember.Email;
|
||||
}
|
||||
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MembersIdentityUser.AccessFailedCount))
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MemberIdentityUser.AccessFailedCount))
|
||||
&& member.FailedPasswordAttempts != identityUserMember.AccessFailedCount)
|
||||
{
|
||||
anythingChanged = true;
|
||||
@@ -595,14 +595,14 @@ namespace Umbraco.Cms.Core.Security
|
||||
}
|
||||
}
|
||||
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MembersIdentityUser.UserName))
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MemberIdentityUser.UserName))
|
||||
&& member.Username != identityUserMember.UserName && identityUserMember.UserName.IsNullOrWhiteSpace() == false)
|
||||
{
|
||||
anythingChanged = true;
|
||||
member.Username = identityUserMember.UserName;
|
||||
}
|
||||
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MembersIdentityUser.PasswordHash))
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MemberIdentityUser.PasswordHash))
|
||||
&& member.RawPasswordValue != identityUserMember.PasswordHash && identityUserMember.PasswordHash.IsNullOrWhiteSpace() == false)
|
||||
{
|
||||
anythingChanged = true;
|
||||
@@ -617,7 +617,7 @@ namespace Umbraco.Cms.Core.Security
|
||||
}
|
||||
|
||||
// TODO: Fix this for Groups too (as per backoffice comment)
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MembersIdentityUser.Roles)) || identityUserMember.IsPropertyDirty(nameof(MembersIdentityUser.Groups)))
|
||||
if (identityUserMember.IsPropertyDirty(nameof(MemberIdentityUser.Roles)) || identityUserMember.IsPropertyDirty(nameof(MemberIdentityUser.Groups)))
|
||||
{
|
||||
}
|
||||
|
||||
@@ -645,42 +645,42 @@ namespace Umbraco.Cms.Core.Security
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public override Task<IList<Claim>> GetClaimsAsync(MembersIdentityUser user, CancellationToken cancellationToken = default) => throw new NotImplementedException();
|
||||
public override Task<IList<Claim>> GetClaimsAsync(MemberIdentityUser user, CancellationToken cancellationToken = default) => throw new NotImplementedException();
|
||||
|
||||
/// <summary>
|
||||
/// Not supported in Umbraco
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public override Task AddClaimsAsync(MembersIdentityUser user, IEnumerable<Claim> claims, CancellationToken cancellationToken = default) => throw new NotImplementedException();
|
||||
public override Task AddClaimsAsync(MemberIdentityUser user, IEnumerable<Claim> claims, CancellationToken cancellationToken = default) => throw new NotImplementedException();
|
||||
|
||||
/// <summary>
|
||||
/// Not supported in Umbraco
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public override Task ReplaceClaimAsync(MembersIdentityUser user, Claim claim, Claim newClaim, CancellationToken cancellationToken = default) => throw new NotImplementedException();
|
||||
public override Task ReplaceClaimAsync(MemberIdentityUser user, Claim claim, Claim newClaim, CancellationToken cancellationToken = default) => throw new NotImplementedException();
|
||||
|
||||
/// <summary>
|
||||
/// Not supported in Umbraco
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public override Task RemoveClaimsAsync(MembersIdentityUser user, IEnumerable<Claim> claims, CancellationToken cancellationToken = default) => throw new NotImplementedException();
|
||||
public override Task RemoveClaimsAsync(MemberIdentityUser user, IEnumerable<Claim> claims, CancellationToken cancellationToken = default) => throw new NotImplementedException();
|
||||
|
||||
/// <summary>
|
||||
/// Not supported in Umbraco
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
public override Task<IList<MembersIdentityUser>> GetUsersForClaimAsync(Claim claim, CancellationToken cancellationToken = default) => throw new NotImplementedException();
|
||||
public override Task<IList<MemberIdentityUser>> GetUsersForClaimAsync(Claim claim, CancellationToken cancellationToken = default) => throw new NotImplementedException();
|
||||
|
||||
/// <summary>
|
||||
/// Not supported in Umbraco
|
||||
/// </summary>
|
||||
/// <inheritdoc />
|
||||
[EditorBrowsable(EditorBrowsableState.Never)]
|
||||
protected override Task<IdentityUserToken<string>> FindTokenAsync(MembersIdentityUser user, string loginProvider, string name, CancellationToken cancellationToken) => throw new NotImplementedException();
|
||||
protected override Task<IdentityUserToken<string>> FindTokenAsync(MemberIdentityUser user, string loginProvider, string name, CancellationToken cancellationToken) => throw new NotImplementedException();
|
||||
|
||||
/// <summary>
|
||||
/// Not supported in Umbraco
|
||||
@@ -16,10 +16,10 @@ namespace Umbraco.Tests.Integration.Umbraco.Web.Common
|
||||
[Test]
|
||||
public void AddMembersIdentity_ExpectMembersUserStoreResolvable()
|
||||
{
|
||||
IUserStore<MembersIdentityUser> userStore = Services.GetService<IUserStore<MembersIdentityUser>>();
|
||||
IUserStore<MemberIdentityUser> userStore = Services.GetService<IUserStore<MemberIdentityUser>>();
|
||||
|
||||
Assert.IsNotNull(userStore);
|
||||
Assert.AreEqual(typeof(MembersUserStore), userStore.GetType());
|
||||
Assert.AreEqual(typeof(MemberUserStore), userStore.GetType());
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -19,36 +19,36 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
[TestFixture]
|
||||
public class MemberIdentityUserManagerTests
|
||||
{
|
||||
private Mock<IUserStore<MembersIdentityUser>> _mockMemberStore;
|
||||
private Mock<IOptions<MembersIdentityOptions>> _mockIdentityOptions;
|
||||
private Mock<IPasswordHasher<MembersIdentityUser>> _mockPasswordHasher;
|
||||
private Mock<IUserValidator<MembersIdentityUser>> _mockUserValidators;
|
||||
private Mock<IEnumerable<IPasswordValidator<MembersIdentityUser>>> _mockPasswordValidators;
|
||||
private Mock<IUserStore<MemberIdentityUser>> _mockMemberStore;
|
||||
private Mock<IOptions<MemberIdentityOptions>> _mockIdentityOptions;
|
||||
private Mock<IPasswordHasher<MemberIdentityUser>> _mockPasswordHasher;
|
||||
private Mock<IUserValidator<MemberIdentityUser>> _mockUserValidators;
|
||||
private Mock<IEnumerable<IPasswordValidator<MemberIdentityUser>>> _mockPasswordValidators;
|
||||
private Mock<ILookupNormalizer> _mockNormalizer;
|
||||
private IdentityErrorDescriber _mockErrorDescriber;
|
||||
private Mock<IServiceProvider> _mockServiceProviders;
|
||||
private Mock<ILogger<UserManager<MembersIdentityUser>>> _mockLogger;
|
||||
private Mock<ILogger<UserManager<MemberIdentityUser>>> _mockLogger;
|
||||
private Mock<IOptions<MemberPasswordConfigurationSettings>> _mockPasswordConfiguration;
|
||||
|
||||
public MemberManager CreateSut()
|
||||
{
|
||||
_mockMemberStore = new Mock<IUserStore<MembersIdentityUser>>();
|
||||
_mockIdentityOptions = new Mock<IOptions<MembersIdentityOptions>>();
|
||||
_mockMemberStore = new Mock<IUserStore<MemberIdentityUser>>();
|
||||
_mockIdentityOptions = new Mock<IOptions<MemberIdentityOptions>>();
|
||||
|
||||
var idOptions = new MembersIdentityOptions { Lockout = { AllowedForNewUsers = false } };
|
||||
var idOptions = new MemberIdentityOptions { Lockout = { AllowedForNewUsers = false } };
|
||||
_mockIdentityOptions.Setup(o => o.Value).Returns(idOptions);
|
||||
_mockPasswordHasher = new Mock<IPasswordHasher<MembersIdentityUser>>();
|
||||
_mockPasswordHasher = new Mock<IPasswordHasher<MemberIdentityUser>>();
|
||||
|
||||
var userValidators = new List<IUserValidator<MembersIdentityUser>>();
|
||||
_mockUserValidators = new Mock<IUserValidator<MembersIdentityUser>>();
|
||||
var validator = new Mock<IUserValidator<MembersIdentityUser>>();
|
||||
var userValidators = new List<IUserValidator<MemberIdentityUser>>();
|
||||
_mockUserValidators = new Mock<IUserValidator<MemberIdentityUser>>();
|
||||
var validator = new Mock<IUserValidator<MemberIdentityUser>>();
|
||||
userValidators.Add(validator.Object);
|
||||
|
||||
_mockPasswordValidators = new Mock<IEnumerable<IPasswordValidator<MembersIdentityUser>>>();
|
||||
_mockPasswordValidators = new Mock<IEnumerable<IPasswordValidator<MemberIdentityUser>>>();
|
||||
_mockNormalizer = new Mock<ILookupNormalizer>();
|
||||
_mockErrorDescriber = new IdentityErrorDescriber();
|
||||
_mockServiceProviders = new Mock<IServiceProvider>();
|
||||
_mockLogger = new Mock<ILogger<UserManager<MembersIdentityUser>>>();
|
||||
_mockLogger = new Mock<ILogger<UserManager<MemberIdentityUser>>>();
|
||||
_mockPasswordConfiguration = new Mock<IOptions<MemberPasswordConfigurationSettings>>();
|
||||
_mockPasswordConfiguration.Setup(x => x.Value).Returns(() =>
|
||||
new MemberPasswordConfigurationSettings()
|
||||
@@ -56,9 +56,9 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
|
||||
});
|
||||
|
||||
var pwdValidators = new List<PasswordValidator<MembersIdentityUser>>
|
||||
var pwdValidators = new List<PasswordValidator<MemberIdentityUser>>
|
||||
{
|
||||
new PasswordValidator<MembersIdentityUser>()
|
||||
new PasswordValidator<MemberIdentityUser>()
|
||||
};
|
||||
|
||||
var userManager = new MemberManager(
|
||||
@@ -71,12 +71,12 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
new BackOfficeIdentityErrorDescriber(),
|
||||
_mockServiceProviders.Object,
|
||||
new Mock<IHttpContextAccessor>().Object,
|
||||
new Mock<ILogger<UserManager<MembersIdentityUser>>>().Object,
|
||||
new Mock<ILogger<UserManager<MemberIdentityUser>>>().Object,
|
||||
_mockPasswordConfiguration.Object);
|
||||
|
||||
validator.Setup(v => v.ValidateAsync(
|
||||
userManager,
|
||||
It.IsAny<MembersIdentityUser>()))
|
||||
It.IsAny<MemberIdentityUser>()))
|
||||
.Returns(Task.FromResult(IdentityResult.Success)).Verifiable();
|
||||
|
||||
return userManager;
|
||||
@@ -87,7 +87,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
{
|
||||
//arrange
|
||||
MemberManager sut = CreateSut();
|
||||
MembersIdentityUser fakeUser = new MembersIdentityUser()
|
||||
MemberIdentityUser fakeUser = new MemberIdentityUser()
|
||||
{
|
||||
PasswordConfig = "testConfig"
|
||||
};
|
||||
@@ -148,7 +148,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
{
|
||||
//arrange
|
||||
MemberManager sut = CreateSut();
|
||||
MembersIdentityUser fakeUser = new MembersIdentityUser()
|
||||
MemberIdentityUser fakeUser = new MemberIdentityUser()
|
||||
{
|
||||
PasswordConfig = "testConfig"
|
||||
};
|
||||
|
||||
@@ -20,10 +20,10 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
{
|
||||
private Mock<IMemberService> _mockMemberService;
|
||||
|
||||
public MembersUserStore CreateSut()
|
||||
public MemberUserStore CreateSut()
|
||||
{
|
||||
_mockMemberService = new Mock<IMemberService>();
|
||||
return new MembersUserStore(
|
||||
return new MemberUserStore(
|
||||
_mockMemberService.Object,
|
||||
new UmbracoMapper(new MapDefinitionCollection(new List<IMapDefinition>())),
|
||||
new Mock<IScopeProvider>().Object,
|
||||
@@ -34,7 +34,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
public void GivenICreateUser_AndTheUserIsNull_ThenIShouldGetAFailedResultAsync()
|
||||
{
|
||||
// arrange
|
||||
MembersUserStore sut = CreateSut();
|
||||
MemberUserStore sut = CreateSut();
|
||||
CancellationToken fakeCancellationToken = new CancellationToken(){};
|
||||
|
||||
// act
|
||||
@@ -49,8 +49,8 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
public async Task GivenICreateANewUser_AndTheUserIsPopulatedCorrectly_ThenIShouldGetASuccessResultAsync()
|
||||
{
|
||||
// arrange
|
||||
MembersUserStore sut = CreateSut();
|
||||
var fakeUser = new MembersIdentityUser() { };
|
||||
MemberUserStore sut = CreateSut();
|
||||
var fakeUser = new MemberIdentityUser() { };
|
||||
var fakeCancellationToken = new CancellationToken() { };
|
||||
|
||||
IMemberType fakeMemberType = new MemberType(new MockShortStringHelper(), 77);
|
||||
|
||||
@@ -16,18 +16,14 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
[TestFixture]
|
||||
public class MemberRoleStoreTests
|
||||
{
|
||||
private Mock<IMemberService> _mockMemberService;
|
||||
private Mock<IMemberGroupService> _mockMemberGroupService;
|
||||
private IdentityErrorDescriber ErrorDescriber => new IdentityErrorDescriber();
|
||||
|
||||
public MembersRoleStore CreateSut()
|
||||
public MemberRoleStore CreateSut()
|
||||
{
|
||||
_mockMemberService = new Mock<IMemberService>();
|
||||
_mockMemberGroupService = new Mock<IMemberGroupService>();
|
||||
return new MembersRoleStore(
|
||||
_mockMemberService.Object,
|
||||
return new MemberRoleStore(
|
||||
_mockMemberGroupService.Object,
|
||||
new Mock<IScopeProvider>().Object,
|
||||
ErrorDescriber);
|
||||
}
|
||||
|
||||
@@ -35,7 +31,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
public void GivenICreateAMemberRole_AndTheGroupIsNull_ThenIShouldGetAFailedResultAsync()
|
||||
{
|
||||
// arrange
|
||||
MembersRoleStore sut = CreateSut();
|
||||
MemberRoleStore sut = CreateSut();
|
||||
CancellationToken fakeCancellationToken = new CancellationToken() { };
|
||||
|
||||
// act
|
||||
@@ -50,7 +46,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
public async Task GivenICreateAMemberRole_AndTheGroupIsPopulatedCorrectly_ThenIShouldGetASuccessResultAsync()
|
||||
{
|
||||
// arrange
|
||||
MembersRoleStore sut = CreateSut();
|
||||
MemberRoleStore sut = CreateSut();
|
||||
var fakeRole = new IdentityRole<string>()
|
||||
{
|
||||
Id = "777",
|
||||
@@ -78,7 +74,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
public async Task GivenIUpdateAMemberRole_AndTheGroupExistsWithTheSameName_ThenIShouldGetASuccessResultAsyncButNoUpdatesMade()
|
||||
{
|
||||
// arrange
|
||||
MembersRoleStore sut = CreateSut();
|
||||
MemberRoleStore sut = CreateSut();
|
||||
var fakeRole = new IdentityRole<string>()
|
||||
{
|
||||
Id = "777",
|
||||
@@ -107,7 +103,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
public async Task GivenIUpdateAMemberRole_AndTheGroupExistsWithADifferentSameName_ThenIShouldGetASuccessResultAsyncWithUpdatesMade()
|
||||
{
|
||||
// arrange
|
||||
MembersRoleStore sut = CreateSut();
|
||||
MemberRoleStore sut = CreateSut();
|
||||
var fakeRole = new IdentityRole<string>()
|
||||
{
|
||||
Id = "777",
|
||||
@@ -137,7 +133,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
public async Task GivenIUpdateAMemberRole_AndTheGroupDoesntExist_ThenIShouldGetAFailureResultAsync()
|
||||
{
|
||||
// arrange
|
||||
MembersRoleStore sut = CreateSut();
|
||||
MemberRoleStore sut = CreateSut();
|
||||
var fakeRole = new IdentityRole<string>()
|
||||
{
|
||||
Id = "777",
|
||||
@@ -161,7 +157,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
public async Task GivenIUpdateAMemberRole_AndTheIdCannotBeParsedToAnInt_ThenIShouldGetAFailureResultAsync()
|
||||
{
|
||||
// arrange
|
||||
MembersRoleStore sut = CreateSut();
|
||||
MemberRoleStore sut = CreateSut();
|
||||
var fakeRole = new IdentityRole<string>()
|
||||
{
|
||||
Id = "7a77",
|
||||
@@ -184,7 +180,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
public async Task GivenIDeleteAMemberRole_AndItExists_ThenTheMemberGroupShouldBeDeleted_AndIShouldGetASuccessResultAsync()
|
||||
{
|
||||
// arrange
|
||||
MembersRoleStore sut = CreateSut();
|
||||
MemberRoleStore sut = CreateSut();
|
||||
var fakeRole = new IdentityRole<string>()
|
||||
{
|
||||
Id = "777",
|
||||
@@ -211,7 +207,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
public async Task GivenIDeleteAMemberRole_AndTheIdCannotBeParsedToAnInt_ThenTheMemberGroupShouldNotBeDeleted_AndIShouldGetAFailResultAsync()
|
||||
{
|
||||
// arrange
|
||||
MembersRoleStore sut = CreateSut();
|
||||
MemberRoleStore sut = CreateSut();
|
||||
var fakeRole = new IdentityRole<string>()
|
||||
{
|
||||
Id = "7a77",
|
||||
@@ -236,7 +232,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
public async Task GivenIDeleteAMemberRole_AndItDoesntExist_ThenTheMemberGroupShouldNotBeDeleted_AndIShouldGetAFailResultAsync()
|
||||
{
|
||||
// arrange
|
||||
MembersRoleStore sut = CreateSut();
|
||||
MemberRoleStore sut = CreateSut();
|
||||
var fakeRole = new IdentityRole<string>()
|
||||
{
|
||||
Id = "777",
|
||||
@@ -261,7 +257,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Infrastructure.Security
|
||||
public async Task GivenIGetAllMemberRoles_ThenIShouldGetAllMemberGroups_AndASuccessResultAsync()
|
||||
{
|
||||
// arrange
|
||||
MembersRoleStore sut = CreateSut();
|
||||
MemberRoleStore sut = CreateSut();
|
||||
var fakeRole = new IdentityRole<string>("fakeGroupName")
|
||||
{
|
||||
Id = "777"
|
||||
|
||||
@@ -68,7 +68,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Controllers
|
||||
IMemberGroupService memberGroupService,
|
||||
IDataTypeService dataTypeService,
|
||||
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
|
||||
IPasswordChanger<MembersIdentityUser> passwordChanger,
|
||||
IPasswordChanger<MemberIdentityUser> passwordChanger,
|
||||
IOptions<GlobalSettings> globalSettings,
|
||||
IUser user)
|
||||
{
|
||||
@@ -78,7 +78,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Controllers
|
||||
sut.ModelState.AddModelError("key", "Invalid model state");
|
||||
|
||||
Mock.Get(umbracoMembersUserManager)
|
||||
.Setup(x => x.CreateAsync(It.IsAny<MembersIdentityUser>(), It.IsAny<string>()))
|
||||
.Setup(x => x.CreateAsync(It.IsAny<MemberIdentityUser>(), It.IsAny<string>()))
|
||||
.ReturnsAsync(() => IdentityResult.Success);
|
||||
Mock.Get(umbracoMembersUserManager)
|
||||
.Setup(x => x.ValidatePasswordAsync(It.IsAny<string>()))
|
||||
@@ -107,14 +107,14 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Controllers
|
||||
IDataTypeService dataTypeService,
|
||||
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
|
||||
IBackOfficeSecurity backOfficeSecurity,
|
||||
IPasswordChanger<MembersIdentityUser> passwordChanger,
|
||||
IPasswordChanger<MemberIdentityUser> passwordChanger,
|
||||
IOptions<GlobalSettings> globalSettings,
|
||||
IUser user)
|
||||
{
|
||||
// arrange
|
||||
Member member = SetupMemberTestData(out MemberSave fakeMemberData, out MemberDisplay memberDisplay, ContentSaveAction.SaveNew);
|
||||
Mock.Get(umbracoMembersUserManager)
|
||||
.Setup(x => x.CreateAsync(It.IsAny<MembersIdentityUser>(), It.IsAny<string>()))
|
||||
.Setup(x => x.CreateAsync(It.IsAny<MemberIdentityUser>(), It.IsAny<string>()))
|
||||
.ReturnsAsync(() => IdentityResult.Success);
|
||||
Mock.Get(umbracoMembersUserManager)
|
||||
.Setup(x => x.ValidatePasswordAsync(It.IsAny<string>()))
|
||||
@@ -148,14 +148,14 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Controllers
|
||||
IDataTypeService dataTypeService,
|
||||
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
|
||||
IBackOfficeSecurity backOfficeSecurity,
|
||||
IPasswordChanger<MembersIdentityUser> passwordChanger,
|
||||
IPasswordChanger<MemberIdentityUser> passwordChanger,
|
||||
IOptions<GlobalSettings> globalSettings,
|
||||
IUser user)
|
||||
{
|
||||
// arrange
|
||||
Member member = SetupMemberTestData(out MemberSave fakeMemberData, out MemberDisplay memberDisplay, ContentSaveAction.SaveNew);
|
||||
Mock.Get(umbracoMembersUserManager)
|
||||
.Setup(x => x.CreateAsync(It.IsAny<MembersIdentityUser>(), It.IsAny<string>()))
|
||||
.Setup(x => x.CreateAsync(It.IsAny<MemberIdentityUser>(), It.IsAny<string>()))
|
||||
.ReturnsAsync(() => IdentityResult.Success);
|
||||
Mock.Get(umbracoMembersUserManager)
|
||||
.Setup(x => x.ValidatePasswordAsync(It.IsAny<string>()))
|
||||
@@ -190,13 +190,13 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Controllers
|
||||
IDataTypeService dataTypeService,
|
||||
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
|
||||
IBackOfficeSecurity backOfficeSecurity,
|
||||
IPasswordChanger<MembersIdentityUser> passwordChanger,
|
||||
IPasswordChanger<MemberIdentityUser> passwordChanger,
|
||||
IOptions<GlobalSettings> globalSettings,
|
||||
IUser user)
|
||||
{
|
||||
// arrange
|
||||
Member member = SetupMemberTestData(out MemberSave fakeMemberData, out MemberDisplay memberDisplay, ContentSaveAction.Save);
|
||||
var membersIdentityUser = new MembersIdentityUser(123);
|
||||
var membersIdentityUser = new MemberIdentityUser(123);
|
||||
Mock.Get(umbracoMembersUserManager)
|
||||
.Setup(x => x.FindByIdAsync(It.IsAny<string>()))
|
||||
.ReturnsAsync(() => membersIdentityUser);
|
||||
@@ -206,7 +206,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Controllers
|
||||
|
||||
string password = "fakepassword9aw89rnyco3938cyr^%&*()i8Y";
|
||||
Mock.Get(umbracoMembersUserManager)
|
||||
.Setup(x => x.UpdateAsync(It.IsAny<MembersIdentityUser>()))
|
||||
.Setup(x => x.UpdateAsync(It.IsAny<MemberIdentityUser>()))
|
||||
.ReturnsAsync(() => IdentityResult.Success);
|
||||
Mock.Get(memberTypeService).Setup(x => x.GetDefault()).Returns("fakeAlias");
|
||||
Mock.Get(globalSettings);
|
||||
@@ -242,13 +242,13 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Controllers
|
||||
IDataTypeService dataTypeService,
|
||||
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
|
||||
IBackOfficeSecurity backOfficeSecurity,
|
||||
IPasswordChanger<MembersIdentityUser> passwordChanger,
|
||||
IPasswordChanger<MemberIdentityUser> passwordChanger,
|
||||
IOptions<GlobalSettings> globalSettings,
|
||||
IUser user)
|
||||
{
|
||||
// arrange
|
||||
Member member = SetupMemberTestData(out MemberSave fakeMemberData, out MemberDisplay memberDisplay, ContentSaveAction.Save);
|
||||
var membersIdentityUser = new MembersIdentityUser(123);
|
||||
var membersIdentityUser = new MemberIdentityUser(123);
|
||||
Mock.Get(umbracoMembersUserManager)
|
||||
.Setup(x => x.FindByIdAsync(It.IsAny<string>()))
|
||||
.ReturnsAsync(() => membersIdentityUser);
|
||||
@@ -257,7 +257,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Controllers
|
||||
.ReturnsAsync(() => IdentityResult.Success);
|
||||
|
||||
Mock.Get(umbracoMembersUserManager)
|
||||
.Setup(x => x.UpdateAsync(It.IsAny<MembersIdentityUser>()))
|
||||
.Setup(x => x.UpdateAsync(It.IsAny<MemberIdentityUser>()))
|
||||
.ReturnsAsync(() => IdentityResult.Success);
|
||||
Mock.Get(memberTypeService).Setup(x => x.GetDefault()).Returns("fakeAlias");
|
||||
Mock.Get(globalSettings);
|
||||
@@ -289,7 +289,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Controllers
|
||||
Mock.Get(backOfficeSecurity).Setup(x => x.CurrentUser).Returns(user);
|
||||
}
|
||||
|
||||
private static void SetupPasswordSuccess(IMemberManager umbracoMembersUserManager, IPasswordChanger<MembersIdentityUser> passwordChanger, bool successful = true)
|
||||
private static void SetupPasswordSuccess(IMemberManager umbracoMembersUserManager, IPasswordChanger<MemberIdentityUser> passwordChanger, bool successful = true)
|
||||
{
|
||||
var passwordChanged = new PasswordChangedModel()
|
||||
{
|
||||
@@ -322,14 +322,14 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Controllers
|
||||
IDataTypeService dataTypeService,
|
||||
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
|
||||
IBackOfficeSecurity backOfficeSecurity,
|
||||
IPasswordChanger<MembersIdentityUser> passwordChanger,
|
||||
IPasswordChanger<MemberIdentityUser> passwordChanger,
|
||||
IOptions<GlobalSettings> globalSettings,
|
||||
IUser user)
|
||||
{
|
||||
// arrange
|
||||
Member member = SetupMemberTestData(out MemberSave fakeMemberData, out MemberDisplay memberDisplay, ContentSaveAction.SaveNew);
|
||||
Mock.Get(umbracoMembersUserManager)
|
||||
.Setup(x => x.CreateAsync(It.IsAny<MembersIdentityUser>()))
|
||||
.Setup(x => x.CreateAsync(It.IsAny<MemberIdentityUser>()))
|
||||
.ReturnsAsync(() => IdentityResult.Success);
|
||||
Mock.Get(memberTypeService).Setup(x => x.GetDefault()).Returns("fakeAlias");
|
||||
Mock.Get(backOfficeSecurityAccessor).Setup(x => x.BackOfficeSecurity).Returns(backOfficeSecurity);
|
||||
@@ -364,7 +364,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Controllers
|
||||
IDataTypeService dataTypeService,
|
||||
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
|
||||
IBackOfficeSecurity backOfficeSecurity,
|
||||
IPasswordChanger<MembersIdentityUser> passwordChanger,
|
||||
IPasswordChanger<MemberIdentityUser> passwordChanger,
|
||||
IOptions<GlobalSettings> globalSettings,
|
||||
IUser user)
|
||||
{
|
||||
@@ -376,7 +376,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Controllers
|
||||
{
|
||||
roleName
|
||||
};
|
||||
var membersIdentityUser = new MembersIdentityUser(123);
|
||||
var membersIdentityUser = new MemberIdentityUser(123);
|
||||
Mock.Get(umbracoMembersUserManager)
|
||||
.Setup(x => x.FindByIdAsync(It.IsAny<string>()))
|
||||
.ReturnsAsync(() => membersIdentityUser);
|
||||
@@ -384,7 +384,7 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Controllers
|
||||
.Setup(x => x.ValidatePasswordAsync(It.IsAny<string>()))
|
||||
.ReturnsAsync(() => IdentityResult.Success);
|
||||
Mock.Get(umbracoMembersUserManager)
|
||||
.Setup(x => x.UpdateAsync(It.IsAny<MembersIdentityUser>()))
|
||||
.Setup(x => x.UpdateAsync(It.IsAny<MemberIdentityUser>()))
|
||||
.ReturnsAsync(() => IdentityResult.Success);
|
||||
Mock.Get(memberTypeService).Setup(x => x.GetDefault()).Returns("fakeAlias");
|
||||
Mock.Get(backOfficeSecurityAccessor).Setup(x => x.BackOfficeSecurity).Returns(backOfficeSecurity);
|
||||
@@ -429,10 +429,10 @@ namespace Umbraco.Cms.Tests.UnitTests.Umbraco.Web.BackOffice.Controllers
|
||||
IMemberService memberService,
|
||||
IMemberTypeService memberTypeService,
|
||||
IMemberGroupService memberGroupService,
|
||||
IUmbracoUserManager<MembersIdentityUser> membersUserManager,
|
||||
IUmbracoUserManager<MemberIdentityUser> membersUserManager,
|
||||
IDataTypeService dataTypeService,
|
||||
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
|
||||
IPasswordChanger<MembersIdentityUser> passwordChanger,
|
||||
IPasswordChanger<MemberIdentityUser> passwordChanger,
|
||||
IOptions<GlobalSettings> globalSettings,
|
||||
IUser user)
|
||||
{
|
||||
|
||||
@@ -2435,6 +2435,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
.Select(_umbracoMapper.Map<MemberDisplay>)
|
||||
.ToArray();
|
||||
|
||||
//TODO: change to role store
|
||||
var allGroups = _memberGroupService.GetAll().ToArray();
|
||||
var groups = entry.Rules
|
||||
.Where(rule => rule.RuleType == Constants.Conventions.PublicAccess.MemberRoleRuleType)
|
||||
|
||||
@@ -57,7 +57,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
private readonly IBackOfficeSecurityAccessor _backOfficeSecurityAccessor;
|
||||
private readonly IJsonSerializer _jsonSerializer;
|
||||
private readonly IShortStringHelper _shortStringHelper;
|
||||
private readonly IPasswordChanger<MembersIdentityUser> _passwordChanger;
|
||||
private readonly IPasswordChanger<MemberIdentityUser> _passwordChanger;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="MemberController"/> class.
|
||||
@@ -90,7 +90,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
IDataTypeService dataTypeService,
|
||||
IBackOfficeSecurityAccessor backOfficeSecurityAccessor,
|
||||
IJsonSerializer jsonSerializer,
|
||||
IPasswordChanger<MembersIdentityUser> passwordChanger)
|
||||
IPasswordChanger<MemberIdentityUser> passwordChanger)
|
||||
: base(cultureDictionary, loggerFactory, shortStringHelper, eventMessages, localizedTextService, jsonSerializer)
|
||||
{
|
||||
_propertyEditors = propertyEditors;
|
||||
@@ -355,7 +355,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
throw new InvalidOperationException($"No member type found with alias {contentItem.ContentTypeAlias}");
|
||||
}
|
||||
|
||||
var identityMember = MembersIdentityUser.CreateNew(
|
||||
var identityMember = MemberIdentityUser.CreateNew(
|
||||
contentItem.Username,
|
||||
contentItem.Email,
|
||||
memberType.Alias,
|
||||
@@ -445,7 +445,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
ModelState.AddModelError("custom", "An admin cannot lock a user");
|
||||
}
|
||||
|
||||
MembersIdentityUser identityMember = await _memberManager.FindByIdAsync(contentItem.Id.ToString());
|
||||
MemberIdentityUser identityMember = await _memberManager.FindByIdAsync(contentItem.Id.ToString());
|
||||
if (identityMember == null)
|
||||
{
|
||||
return new ValidationErrorResult("Identity member was not found");
|
||||
@@ -586,7 +586,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
/// </summary>
|
||||
/// <param name="contentItem">The member content item</param>
|
||||
/// <param name="identityMember">The member as an identity user</param>
|
||||
private async Task AddOrUpdateRoles(MemberSave contentItem, MembersIdentityUser identityMember)
|
||||
private async Task AddOrUpdateRoles(MemberSave contentItem, MemberIdentityUser identityMember)
|
||||
{
|
||||
// We're gonna look up the current roles now because the below code can cause
|
||||
// events to be raised and developers could be manually adding roles to members in
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.Mapping;
|
||||
@@ -26,17 +28,19 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
private readonly IMemberGroupService _memberGroupService;
|
||||
private readonly UmbracoMapper _umbracoMapper;
|
||||
private readonly ILocalizedTextService _localizedTextService;
|
||||
|
||||
private readonly RoleManager<IdentityRole<string>> _roleManager;
|
||||
|
||||
public MemberGroupController(
|
||||
IMemberGroupService memberGroupService,
|
||||
UmbracoMapper umbracoMapper,
|
||||
ILocalizedTextService localizedTextService
|
||||
ILocalizedTextService localizedTextService,
|
||||
RoleManager<IdentityRole<string>> roleManager
|
||||
)
|
||||
{
|
||||
_memberGroupService = memberGroupService ?? throw new ArgumentNullException(nameof(memberGroupService));
|
||||
_roleManager = roleManager ?? throw new ArgumentNullException(nameof(roleManager));
|
||||
_umbracoMapper = umbracoMapper ?? throw new ArgumentNullException(nameof(umbracoMapper));
|
||||
_localizedTextService =
|
||||
localizedTextService ?? throw new ArgumentNullException(nameof(localizedTextService));
|
||||
_localizedTextService = localizedTextService ?? throw new ArgumentNullException(nameof(localizedTextService));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -46,13 +50,13 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
/// <returns></returns>
|
||||
public ActionResult<MemberGroupDisplay> GetById(int id)
|
||||
{
|
||||
var memberGroup = _memberGroupService.GetById(id);
|
||||
IdentityRole<string> memberGroup = _roleManager.FindByIdAsync(id.ToString()).Result;
|
||||
if (memberGroup == null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
var dto = _umbracoMapper.Map<IMemberGroup, MemberGroupDisplay>(memberGroup);
|
||||
MemberGroupDisplay dto = _umbracoMapper.Map<IdentityRole<string>, MemberGroupDisplay>(memberGroup);
|
||||
return dto;
|
||||
}
|
||||
|
||||
@@ -64,7 +68,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
/// <returns></returns>
|
||||
public ActionResult<MemberGroupDisplay> GetById(Guid id)
|
||||
{
|
||||
var memberGroup = _memberGroupService.GetById(id);
|
||||
IMemberGroup memberGroup = _memberGroupService.GetById(id);
|
||||
if (memberGroup == null)
|
||||
{
|
||||
return NotFound();
|
||||
@@ -82,9 +86,11 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
{
|
||||
var guidUdi = id as GuidUdi;
|
||||
if (guidUdi == null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
|
||||
var memberGroup = _memberGroupService.GetById(guidUdi.Guid);
|
||||
IMemberGroup memberGroup = _memberGroupService.GetById(guidUdi.Guid);
|
||||
if (memberGroup == null)
|
||||
{
|
||||
return NotFound();
|
||||
@@ -95,15 +101,22 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
|
||||
public IEnumerable<MemberGroupDisplay> GetByIds([FromQuery]int[] ids)
|
||||
{
|
||||
return _memberGroupService.GetByIds(ids)
|
||||
.Select(_umbracoMapper.Map<IMemberGroup, MemberGroupDisplay>);
|
||||
var roles = new List<IdentityRole<string>>();
|
||||
|
||||
foreach (int id in ids)
|
||||
{
|
||||
Task<IdentityRole<string>> role = _roleManager.FindByIdAsync(id.ToString());
|
||||
roles.Add(role.Result);
|
||||
}
|
||||
|
||||
return roles.Select(x=> _umbracoMapper.Map<IdentityRole<string>, MemberGroupDisplay>(x));
|
||||
}
|
||||
|
||||
[HttpDelete]
|
||||
[HttpPost]
|
||||
public IActionResult DeleteById(int id)
|
||||
{
|
||||
var memberGroup = _memberGroupService.GetById(id);
|
||||
IMemberGroup memberGroup = _memberGroupService.GetById(id);
|
||||
if (memberGroup == null)
|
||||
{
|
||||
return NotFound();
|
||||
@@ -113,11 +126,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers
|
||||
return Ok();
|
||||
}
|
||||
|
||||
public IEnumerable<MemberGroupDisplay> GetAllGroups()
|
||||
{
|
||||
return _memberGroupService.GetAll()
|
||||
.Select(_umbracoMapper.Map<IMemberGroup, MemberGroupDisplay>);
|
||||
}
|
||||
public IEnumerable<MemberGroupDisplay> GetAllGroups() => _roleManager.Roles.Select(x => _umbracoMapper.Map<IdentityRole<string>, MemberGroupDisplay>(x));
|
||||
|
||||
public MemberGroupDisplay GetEmpty()
|
||||
{
|
||||
|
||||
@@ -86,7 +86,7 @@ namespace Umbraco.Extensions
|
||||
builder.Services.AddUnique<BackOfficeExternalLoginProviderErrorMiddleware>();
|
||||
builder.Services.AddUnique<IBackOfficeAntiforgery, BackOfficeAntiforgery>();
|
||||
builder.Services.AddUnique<IPasswordChanger<BackOfficeIdentityUser>, PasswordChanger<BackOfficeIdentityUser>>();
|
||||
builder.Services.AddUnique<IPasswordChanger<MembersIdentityUser>, PasswordChanger<MembersIdentityUser>>();
|
||||
builder.Services.AddUnique<IPasswordChanger<MemberIdentityUser>, PasswordChanger<MemberIdentityUser>>();
|
||||
|
||||
return builder;
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees
|
||||
_memberGroupService = memberGroupService;
|
||||
}
|
||||
|
||||
//TODO: change to role store
|
||||
protected override IEnumerable<TreeNode> GetTreeNodesFromService(string id, FormCollection queryStrings)
|
||||
{
|
||||
return _memberGroupService.GetAll()
|
||||
@@ -49,6 +50,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees
|
||||
var root = rootResult.Value;
|
||||
|
||||
//check if there are any groups
|
||||
//TODO: change to role store
|
||||
root.HasChildren = _memberGroupService.GetAll().Any();
|
||||
return root;
|
||||
}
|
||||
|
||||
@@ -65,17 +65,17 @@ namespace Umbraco.Extensions
|
||||
public static void AddMembersIdentity(this IServiceCollection services) =>
|
||||
services.BuildMembersIdentity()
|
||||
.AddDefaultTokenProviders()
|
||||
.AddUserStore<MembersUserStore>()
|
||||
.AddUserStore<MemberUserStore>()
|
||||
.AddMembersManager<IMemberManager, MemberManager>();
|
||||
|
||||
|
||||
private static MembersIdentityBuilder BuildMembersIdentity(this IServiceCollection services)
|
||||
private static MemberIdentityBuilder BuildMembersIdentity(this IServiceCollection services)
|
||||
{
|
||||
// Services used by Umbraco members identity
|
||||
services.TryAddScoped<IUserValidator<MembersIdentityUser>, UserValidator<MembersIdentityUser>>();
|
||||
services.TryAddScoped<IPasswordValidator<MembersIdentityUser>, PasswordValidator<MembersIdentityUser>>();
|
||||
services.TryAddScoped<IPasswordHasher<MembersIdentityUser>, PasswordHasher<MembersIdentityUser>>();
|
||||
return new MembersIdentityBuilder(services);
|
||||
services.TryAddScoped<IUserValidator<MemberIdentityUser>, UserValidator<MemberIdentityUser>>();
|
||||
services.TryAddScoped<IPasswordValidator<MemberIdentityUser>, PasswordValidator<MemberIdentityUser>>();
|
||||
services.TryAddScoped<IPasswordHasher<MemberIdentityUser>, PasswordHasher<MemberIdentityUser>>();
|
||||
return new MemberIdentityBuilder(services);
|
||||
}
|
||||
|
||||
private static void RemoveIntParamenterIfValueGreatherThen(IDictionary<string, string> commands, string parameter, int maxValue)
|
||||
|
||||
@@ -10,13 +10,13 @@ namespace Umbraco.Extensions
|
||||
public static class IdentityBuilderExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Adds a <see cref="UserManager{TUser}"/> for the <seealso cref="MembersIdentityUser"/>.
|
||||
/// Adds a <see cref="UserManager{TUser}"/> for the <seealso cref="MemberIdentityUser"/>.
|
||||
/// </summary>
|
||||
/// <typeparam name="TInterface">The usermanager interface</typeparam>
|
||||
/// <typeparam name="TUserManager">The usermanager type</typeparam>
|
||||
/// <returns>The current <see cref="IdentityBuilder"/> instance.</returns>
|
||||
public static IdentityBuilder AddMembersManager<TInterface, TUserManager>(this IdentityBuilder identityBuilder)
|
||||
where TUserManager : UserManager<MembersIdentityUser>, TInterface
|
||||
where TUserManager : UserManager<MemberIdentityUser>, TInterface
|
||||
{
|
||||
identityBuilder.Services.AddScoped(typeof(TInterface), typeof(TUserManager));
|
||||
return identityBuilder;
|
||||
|
||||
@@ -16,21 +16,21 @@ using Umbraco.Extensions;
|
||||
|
||||
namespace Umbraco.Cms.Web.Common.Security
|
||||
{
|
||||
public class MemberManager : UmbracoUserManager<MembersIdentityUser, MemberPasswordConfigurationSettings>, IMemberManager
|
||||
public class MemberManager : UmbracoUserManager<MemberIdentityUser, MemberPasswordConfigurationSettings>, IMemberManager
|
||||
{
|
||||
private readonly IHttpContextAccessor _httpContextAccessor;
|
||||
|
||||
public MemberManager(
|
||||
IIpResolver ipResolver,
|
||||
IUserStore<MembersIdentityUser> store,
|
||||
IOptions<MembersIdentityOptions> optionsAccessor,
|
||||
IPasswordHasher<MembersIdentityUser> passwordHasher,
|
||||
IEnumerable<IUserValidator<MembersIdentityUser>> userValidators,
|
||||
IEnumerable<IPasswordValidator<MembersIdentityUser>> passwordValidators,
|
||||
IUserStore<MemberIdentityUser> store,
|
||||
IOptions<MemberIdentityOptions> optionsAccessor,
|
||||
IPasswordHasher<MemberIdentityUser> passwordHasher,
|
||||
IEnumerable<IUserValidator<MemberIdentityUser>> userValidators,
|
||||
IEnumerable<IPasswordValidator<MemberIdentityUser>> passwordValidators,
|
||||
BackOfficeIdentityErrorDescriber errors,
|
||||
IServiceProvider services,
|
||||
IHttpContextAccessor httpContextAccessor,
|
||||
ILogger<UserManager<MembersIdentityUser>> logger,
|
||||
ILogger<UserManager<MemberIdentityUser>> logger,
|
||||
IOptions<MemberPasswordConfigurationSettings> passwordConfiguration)
|
||||
: base(ipResolver, store, optionsAccessor, passwordHasher, userValidators, passwordValidators, errors, services, logger, passwordConfiguration)
|
||||
{
|
||||
|
||||
@@ -1,106 +0,0 @@
|
||||
using System;
|
||||
using System.Configuration.Provider;
|
||||
using System.Linq;
|
||||
using System.Web.Security;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Persistence.Querying;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Web.Composing;
|
||||
|
||||
namespace Umbraco.Web.Security.Providers
|
||||
{
|
||||
//TODO: Delete: should not be used
|
||||
[Obsolete("We are now using ASP.NET Core Identity instead of membership providers")]
|
||||
public class MembersRoleProvider : RoleProvider
|
||||
{
|
||||
private readonly IMembershipRoleService<IMember> _roleService;
|
||||
private string _applicationName;
|
||||
|
||||
public MembersRoleProvider(IMembershipRoleService<IMember> roleService)
|
||||
{
|
||||
_roleService = roleService;
|
||||
}
|
||||
|
||||
public MembersRoleProvider()
|
||||
: this(Current.Services.MemberService)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsUserInRole(string username, string roleName)
|
||||
{
|
||||
return GetRolesForUser(username).Any(x => x == roleName);
|
||||
}
|
||||
|
||||
public override string[] GetRolesForUser(string username)
|
||||
{
|
||||
return _roleService.GetAllRoles(username).ToArray();
|
||||
}
|
||||
|
||||
public override void CreateRole(string roleName)
|
||||
{
|
||||
_roleService.AddRole(roleName);
|
||||
}
|
||||
|
||||
public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
|
||||
{
|
||||
return _roleService.DeleteRole(roleName, throwOnPopulatedRole);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the specified member role name exists
|
||||
/// </summary>
|
||||
/// <param name="roleName">Member role name</param>
|
||||
/// <returns>True if member role exists, otherwise false</returns>
|
||||
public override bool RoleExists(string roleName) => _roleService.GetAllRoles().Any(x => x.Name == roleName);
|
||||
|
||||
public override void AddUsersToRoles(string[] usernames, string[] roleNames)
|
||||
{
|
||||
_roleService.AssignRoles(usernames, roleNames);
|
||||
}
|
||||
|
||||
public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
|
||||
{
|
||||
_roleService.DissociateRoles(usernames, roleNames);
|
||||
}
|
||||
|
||||
public override string[] GetUsersInRole(string roleName)
|
||||
{
|
||||
return _roleService.GetMembersInRole(roleName).Select(x => x.Username).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets all the member roles
|
||||
/// </summary>
|
||||
/// <returns>A list of member roles</returns>
|
||||
public override string[] GetAllRoles() => _roleService.GetAllRoles().Select(x => x.Name).ToArray();
|
||||
|
||||
public override string[] FindUsersInRole(string roleName, string usernameToMatch)
|
||||
{
|
||||
return _roleService.FindMembersInRole(roleName, usernameToMatch, StringPropertyMatchType.Wildcard).Select(x => x.Username).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The name of the application using the custom role provider.
|
||||
/// </summary>
|
||||
/// <value></value>
|
||||
/// <returns>The name of the application using the custom membership provider.</returns>
|
||||
public override string ApplicationName
|
||||
{
|
||||
get
|
||||
{
|
||||
return _applicationName;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
if (string.IsNullOrEmpty(value))
|
||||
throw new ProviderException("ApplicationName cannot be empty.");
|
||||
|
||||
if (value.Length > 0x100)
|
||||
throw new ProviderException("Provider application name too long.");
|
||||
|
||||
_applicationName = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -176,7 +176,6 @@
|
||||
<Compile Include="Security\MembershipHelper.cs" />
|
||||
<Compile Include="HttpCookieExtensions.cs" />
|
||||
<Compile Include="Security\Providers\MembersMembershipProvider.cs" />
|
||||
<Compile Include="Security\Providers\MembersRoleProvider.cs" />
|
||||
<Compile Include="Security\Providers\UmbracoMembershipProvider.cs" />
|
||||
<Compile Include="HttpRequestExtensions.cs" />
|
||||
<Compile Include="UrlHelperExtensions.cs" />
|
||||
@@ -229,4 +228,4 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
</Project>
|
||||
Reference in New Issue
Block a user