From 2936ff0bf9cc6553d04fdb8ad18d21e5bdb36ffa Mon Sep 17 00:00:00 2001 From: Shannon Date: Mon, 15 Dec 2014 20:44:00 +1100 Subject: [PATCH] Makes provider user key type for new membership provider configurable, by default it is int --- src/Umbraco.Core/Models/Member.cs | 35 +------------------ .../Membership/MembershipUserExtensions.cs | 4 +-- .../Membership/UmbracoMembershipMember.cs | 5 +-- src/Umbraco.Core/Models/Membership/User.cs | 33 ----------------- .../Providers/MembersMembershipProvider.cs | 12 ++++++- .../Providers/UsersMembershipProvider.cs | 2 +- 6 files changed, 18 insertions(+), 73 deletions(-) diff --git a/src/Umbraco.Core/Models/Member.cs b/src/Umbraco.Core/Models/Member.cs index 1706ba5ab1..c4c0362acc 100644 --- a/src/Umbraco.Core/Models/Member.cs +++ b/src/Umbraco.Core/Models/Member.cs @@ -20,7 +20,6 @@ namespace Umbraco.Core.Models private string _email; private string _rawPasswordValue; private object _providerUserKey; - private Type _userTypeKey; /// /// Constructor for creating an empty Member object @@ -114,7 +113,6 @@ namespace Umbraco.Core.Models private static readonly PropertyInfo EmailSelector = ExpressionHelper.GetPropertyInfo(x => x.Email); private static readonly PropertyInfo PasswordSelector = ExpressionHelper.GetPropertyInfo(x => x.RawPasswordValue); private static readonly PropertyInfo ProviderUserKeySelector = ExpressionHelper.GetPropertyInfo(x => x.ProviderUserKey); - private static readonly PropertyInfo UserTypeKeySelector = ExpressionHelper.GetPropertyInfo(x => x.ProviderUserKeyType); /// /// Gets or sets the Username @@ -502,38 +500,7 @@ namespace Umbraco.Core.Models } } - /// - /// Gets or sets the type of the provider user key. - /// - /// - /// The type of the provider user key. - /// - [IgnoreDataMember] - internal Type ProviderUserKeyType - { - get - { - return _userTypeKey; - } - private set - { - SetPropertyValueAndDetectChanges(o => - { - _userTypeKey = value; - return _userTypeKey; - }, _userTypeKey, UserTypeKeySelector); - } - } - - /// - /// Sets the type of the provider user key. - /// - /// The type. - internal void SetProviderUserKeyType(Type type) - { - ProviderUserKeyType = type; - } - + /// /// Method to call when Entity is being saved /// diff --git a/src/Umbraco.Core/Models/Membership/MembershipUserExtensions.cs b/src/Umbraco.Core/Models/Membership/MembershipUserExtensions.cs index 6008c0ae02..2289983033 100644 --- a/src/Umbraco.Core/Models/Membership/MembershipUserExtensions.cs +++ b/src/Umbraco.Core/Models/Membership/MembershipUserExtensions.cs @@ -7,9 +7,9 @@ namespace Umbraco.Core.Models.Membership { internal static class MembershipUserExtensions { - internal static UmbracoMembershipMember AsConcreteMembershipUser(this IMembershipUser member, string providerName) + internal static UmbracoMembershipMember AsConcreteMembershipUser(this IMembershipUser member, string providerName, bool providerKeyAsGuid = false) { - var membershipMember = new UmbracoMembershipMember(member, providerName); + var membershipMember = new UmbracoMembershipMember(member, providerName, providerKeyAsGuid); return membershipMember; } diff --git a/src/Umbraco.Core/Models/Membership/UmbracoMembershipMember.cs b/src/Umbraco.Core/Models/Membership/UmbracoMembershipMember.cs index 1b8c7f5393..0f02f4f73b 100644 --- a/src/Umbraco.Core/Models/Membership/UmbracoMembershipMember.cs +++ b/src/Umbraco.Core/Models/Membership/UmbracoMembershipMember.cs @@ -1,5 +1,6 @@ using System; using System.Web.Security; +using Umbraco.Core.Configuration; namespace Umbraco.Core.Models.Membership { @@ -25,7 +26,7 @@ namespace Umbraco.Core.Models.Membership //NOTE: We are not calling the base constructor which will validate that a provider with the specified name exists which causes issues with unit tests. The ctor // validation for that doesn't need to be there anyways (have checked the source). - public UmbracoMembershipMember(IMembershipUser member, string providerName) + public UmbracoMembershipMember(IMembershipUser member, string providerName, bool providerKeyAsGuid = false) { _member = member; //NOTE: We are copying the values here so that everything is consistent with how the underlying built-in ASP.Net membership user @@ -37,7 +38,7 @@ namespace Umbraco.Core.Models.Membership if (member.PasswordQuestion != null) _passwordQuestion = member.PasswordQuestion.Trim(); _providerName = providerName; - _providerUserKey = member.ProviderUserKey; + _providerUserKey = providerKeyAsGuid ? member.ProviderUserKey : member.Id; _comment = member.Comments; _isApproved = member.IsApproved; _isLockedOut = member.IsLockedOut; diff --git a/src/Umbraco.Core/Models/Membership/User.cs b/src/Umbraco.Core/Models/Membership/User.cs index ba9b89d779..c9b55bd937 100644 --- a/src/Umbraco.Core/Models/Membership/User.cs +++ b/src/Umbraco.Core/Models/Membership/User.cs @@ -58,7 +58,6 @@ namespace Umbraco.Core.Models.Membership private IUserType _userType; private string _name; - private Type _userTypeKey; private List _addedSections; private List _removedSections; private ObservableCollection _sectionCollection; @@ -80,7 +79,6 @@ namespace Umbraco.Core.Models.Membership private static readonly PropertyInfo StartMediaIdSelector = ExpressionHelper.GetPropertyInfo(x => x.StartMediaId); private static readonly PropertyInfo AllowedSectionsSelector = ExpressionHelper.GetPropertyInfo>(x => x.AllowedSections); private static readonly PropertyInfo NameSelector = ExpressionHelper.GetPropertyInfo(x => x.Name); - private static readonly PropertyInfo UserTypeKeySelector = ExpressionHelper.GetPropertyInfo(x => x.ProviderUserKeyType); private static readonly PropertyInfo UsernameSelector = ExpressionHelper.GetPropertyInfo(x => x.Username); private static readonly PropertyInfo EmailSelector = ExpressionHelper.GetPropertyInfo(x => x.Email); @@ -101,37 +99,6 @@ namespace Umbraco.Core.Models.Membership set { throw new NotSupportedException("Cannot set the provider user key for a user"); } } - /// - /// Gets or sets the type of the provider user key. - /// - /// - /// The type of the provider user key. - /// - [IgnoreDataMember] - internal Type ProviderUserKeyType - { - get - { - return _userTypeKey; - } - private set - { - SetPropertyValueAndDetectChanges(o => - { - _userTypeKey = value; - return _userTypeKey; - }, _userTypeKey, UserTypeKeySelector); - } - } - - /// - /// Sets the type of the provider user key. - /// - /// The type. - internal void SetProviderUserKeyType(Type type) - { - ProviderUserKeyType = type; - } [DataMember] public string Username diff --git a/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs b/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs index 4ad0836a12..916194b5cc 100644 --- a/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs +++ b/src/Umbraco.Web/Security/Providers/MembersMembershipProvider.cs @@ -42,6 +42,7 @@ namespace Umbraco.Web.Security.Providers private string _defaultMemberTypeAlias = "Member"; private volatile bool _hasDefaultMember = false; private static readonly object Locker = new object(); + private bool _providerKeyAsGuid = false; public override string ProviderName { @@ -58,7 +59,7 @@ namespace Umbraco.Web.Security.Providers protected override MembershipUser ConvertToMembershipUser(IMember entity) { - return entity.AsConcreteMembershipUser(Name); + return entity.AsConcreteMembershipUser(Name, _providerKeyAsGuid); } public string LockPropertyTypeAlias { get; private set; } @@ -85,6 +86,15 @@ namespace Umbraco.Web.Security.Providers } _hasDefaultMember = true; } + + //devs can configure the provider user key to be a guid if they want, by default it is int + if (config["providerKeyType"] != null) + { + if (config["providerKeyType"] == "guid") + { + _providerKeyAsGuid = true; + } + } } public override string DefaultMemberTypeAlias diff --git a/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs b/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs index 16ce523645..5d18039fb6 100644 --- a/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs +++ b/src/Umbraco.Web/Security/Providers/UsersMembershipProvider.cs @@ -47,7 +47,7 @@ namespace Umbraco.Web.Security.Providers protected override MembershipUser ConvertToMembershipUser(IUser entity) { //the provider user key is always the int id - return entity.AsConcreteMembershipUser(Name); + return entity.AsConcreteMembershipUser(Name, true); } public override void Initialize(string name, System.Collections.Specialized.NameValueCollection config)