kill user membership provider, adds some passwords api abstractions, moves membership provider logic out of Core/services, removes membership scenario and other membership code we don't want anymore.

This commit is contained in:
Shannon
2019-11-25 21:20:00 +11:00
parent 6c5c256e62
commit 1136e15a27
75 changed files with 1138 additions and 2062 deletions

View File

@@ -11,6 +11,7 @@ using Umbraco.Core.Services;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Core.Services.Implement;
using UserProfile = Umbraco.Web.Models.ContentEditing.UserProfile;
using Umbraco.Web.Security;
namespace Umbraco.Web.Models.Mapping
{
@@ -85,7 +86,6 @@ namespace Umbraco.Web.Models.Mapping
target.Id = source.Id;
target.Key = source.Key;
target.MemberProviderFieldMapping = GetMemberProviderFieldMapping();
target.MembershipScenario = GetMembershipScenario();
target.Name = source.Name;
target.Owner = _commonMapper.GetOwner(source, context);
target.ParentId = source.ParentId;
@@ -154,34 +154,10 @@ namespace Umbraco.Web.Models.Mapping
target.Properties = context.MapEnumerable<IProperty, ContentPropertyDto>(source.Properties);
}
private MembershipScenario GetMembershipScenario()
{
var provider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
if (provider.IsUmbracoMembershipProvider())
{
return MembershipScenario.NativeUmbraco;
}
var memberType = _memberTypeService.Get(Constants.Conventions.MemberTypes.DefaultAlias);
return memberType != null
? MembershipScenario.CustomProviderWithUmbracoLink
: MembershipScenario.StandaloneCustomProvider;
}
private static IDictionary<string, string> GetMemberProviderFieldMapping()
{
var provider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
if (provider.IsUmbracoMembershipProvider() == false)
{
return new Dictionary<string, string>
{
{Constants.Conventions.Member.IsLockedOut, Constants.Conventions.Member.IsLockedOut},
{Constants.Conventions.Member.IsApproved, Constants.Conventions.Member.IsApproved},
{Constants.Conventions.Member.Comments, Constants.Conventions.Member.Comments}
};
}
var provider = MembershipProviderExtensions.GetMembersMembershipProvider();
var umbracoProvider = (IUmbracoMemberTypeMembershipProvider)provider;
return new Dictionary<string, string>

View File

@@ -11,6 +11,7 @@ using Umbraco.Core.Security;
using Umbraco.Core.Services;
using Umbraco.Web.Models.ContentEditing;
using Umbraco.Core.Dictionary;
using Umbraco.Web.Security;
namespace Umbraco.Web.Models.Mapping
{
@@ -42,7 +43,7 @@ namespace Umbraco.Web.Models.Mapping
/// <remarks>Overridden to deal with custom member properties and permissions.</remarks>
public override IEnumerable<Tab<ContentPropertyDisplay>> Map(IMember source, MapperContext context)
{
var provider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
var provider = MembershipProviderExtensions.GetMembersMembershipProvider();
var memberType = _memberTypeService.Get(source.ContentTypeId);
@@ -53,29 +54,16 @@ namespace Umbraco.Web.Models.Mapping
var resolved = base.Map(source, context);
if (provider.IsUmbracoMembershipProvider() == false)
{
// it's a generic provider so update the locked out property based on our known constant alias
var isLockedOutProperty = resolved.SelectMany(x => x.Properties).FirstOrDefault(x => x.Alias == Constants.Conventions.Member.IsLockedOut);
if (isLockedOutProperty?.Value != null && isLockedOutProperty.Value.ToString() != "1")
{
isLockedOutProperty.View = "readonlyvalue";
isLockedOutProperty.Value = _localizedTextService.Localize("general/no");
}
}
else
{
var umbracoProvider = (IUmbracoMemberTypeMembershipProvider)provider;
var umbracoProvider = (IUmbracoMemberTypeMembershipProvider)provider;
// This is kind of a hack because a developer is supposed to be allowed to set their property editor - would have been much easier
// if we just had all of the membership provider fields on the member table :(
// TODO: But is there a way to map the IMember.IsLockedOut to the property ? i dunno.
var isLockedOutProperty = resolved.SelectMany(x => x.Properties).FirstOrDefault(x => x.Alias == umbracoProvider.LockPropertyTypeAlias);
if (isLockedOutProperty?.Value != null && isLockedOutProperty.Value.ToString() != "1")
{
isLockedOutProperty.View = "readonlyvalue";
isLockedOutProperty.Value = _localizedTextService.Localize("general/no");
}
// This is kind of a hack because a developer is supposed to be allowed to set their property editor - would have been much easier
// if we just had all of the membership provider fields on the member table :(
// TODO: But is there a way to map the IMember.IsLockedOut to the property ? i dunno.
var isLockedOutProperty = resolved.SelectMany(x => x.Properties).FirstOrDefault(x => x.Alias == umbracoProvider.LockPropertyTypeAlias);
if (isLockedOutProperty?.Value != null && isLockedOutProperty.Value.ToString() != "1")
{
isLockedOutProperty.View = "readonlyvalue";
isLockedOutProperty.Value = _localizedTextService.Localize("general/no");
}
var umbracoContext = _umbracoContextAccessor.UmbracoContext;
@@ -107,7 +95,7 @@ namespace Umbraco.Web.Models.Mapping
protected override IEnumerable<ContentPropertyDisplay> GetCustomGenericProperties(IContentBase content)
{
var member = (IMember)content;
var membersProvider = Core.Security.MembershipProviderExtensions.GetMembersMembershipProvider();
var membersProvider = MembershipProviderExtensions.GetMembersMembershipProvider();
var genericProperties = new List<ContentPropertyDisplay>
{
@@ -149,7 +137,7 @@ namespace Umbraco.Web.Models.Mapping
// TODO: Hard coding this because the changepassword doesn't necessarily need to be a resolvable (real) property editor
View = "changepassword",
// initialize the dictionary with the configuration from the default membership provider
Config = new Dictionary<string, object>(membersProvider.GetConfiguration(_userService))
Config = new Dictionary<string, object>(membersProvider.PasswordConfiguration.GetConfiguration())
{
// the password change toggle will only be displayed if there is already a password assigned.
{"hasPassword", member.RawPasswordValue.IsNullOrWhiteSpace() == false}
@@ -226,18 +214,8 @@ namespace Umbraco.Web.Models.Mapping
Value = member.Username
};
var scenario = memberTypeService.GetMembershipScenario();
// only allow editing if this is a new member, or if the membership provider is the Umbraco one
if (member.HasIdentity == false || scenario == MembershipScenario.NativeUmbraco)
{
prop.View = "textbox";
prop.Validation.Mandatory = true;
}
else
{
prop.View = "readonlyvalue";
}
prop.View = "textbox";
prop.Validation.Mandatory = true;
return prop;
}