streamlined the new membership provider classes so now they all share the same logic and use IMembershipMemberService<T> which is used by both IMember and IUser services

This commit is contained in:
Shannon
2014-01-06 15:38:34 +11:00
parent c3a6c7c473
commit cd82bc6d21
16 changed files with 762 additions and 735 deletions

View File

@@ -14,7 +14,6 @@ namespace Umbraco.Core.Models.Membership
string PasswordAnswer { get; set; }
string Comments { get; set; }
bool IsApproved { get; set; }
//bool IsOnline { get; set; }
bool IsLockedOut { get; set; }
DateTime LastLoginDate { get; set; }
DateTime LastPasswordChangeDate { get; set; }

View File

@@ -5,13 +5,13 @@ namespace Umbraco.Core.Models.Membership
{
internal static class MembershipExtensions
{
internal static UmbracoMembershipMember AsConcreteMembershipUser(this IMember member)
internal static UmbracoMembershipMember AsConcreteMembershipUser(this IMembershipUser member, string providerName)
{
var membershipMember = new UmbracoMembershipMember(member);
var membershipMember = new UmbracoMembershipMember(member, providerName);
return membershipMember;
}
internal static IMember AsIMember(this UmbracoMembershipMember membershipMember)
internal static IMembershipUser AsIMember(this UmbracoMembershipMember membershipMember)
{
var member = membershipMember;
if (member != null)

View File

@@ -1,66 +1,127 @@
using System.Web.Security;
using System;
using System.Web.Security;
namespace Umbraco.Core.Models.Membership
{
//TODO: THere's still a bunch of properties that don't exist in this use that need to be mapped somehow.
internal class UmbracoMembershipMember : MembershipUser
{
private readonly IMember _member;
private readonly IMembershipUser _member;
private readonly string _userName;
private readonly object _providerUserKey;
private readonly string _passwordQuestion;
private readonly bool _isLockedOut;
private readonly DateTime _lastLockoutDate;
private readonly DateTime _creationDate;
private DateTime _lastLoginDate;
private readonly DateTime _lastPasswordChangedDate;
private readonly string _providerName;
private string _email;
private string _comment;
private bool _isApproved;
private DateTime _lastActivityDate;
public UmbracoMembershipMember(IMember member)
//NOTE: We are only overriding the properties that matter, we don't override things like IsOnline since that is handled with the sub-class and the membership providers.
//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)
{
_member = member;
_member = member;
//NOTE: We are copying the values here so that everything is consistent with how the underlying built-in ASP.Net membership user
// handles data! We don't want to do anything differently there but since we cannot use their ctor we'll need to handle this logic ourselves.
if (member.Username != null)
_userName = member.Username.Trim();
if (member.Email != null)
_email = member.Email.Trim();
if (member.PasswordQuestion != null)
_passwordQuestion = member.PasswordQuestion.Trim();
_providerName = providerName;
_providerUserKey = member.ProviderUserKey;
_comment = member.Comments;
_isApproved = member.IsApproved;
_isLockedOut = member.IsLockedOut;
_creationDate = member.CreateDate.ToUniversalTime();
_lastLoginDate = member.LastLoginDate.ToUniversalTime();
//TODO: We currently don't really have any place to store this data!!
_lastActivityDate = member.LastLoginDate.ToUniversalTime();
_lastPasswordChangedDate = member.LastPasswordChangeDate.ToUniversalTime();
_lastLockoutDate = member.LastLockoutDate.ToUniversalTime();
}
internal IMember Member
internal IMembershipUser Member
{
get { return _member; }
}
public override string Email
public override string UserName
{
get { return _member.Email; }
set { _member.Email = value; }
get { return _userName; }
}
public override object ProviderUserKey
{
get { return _member.Key; }
get { return _providerUserKey; }
}
public override System.DateTime CreationDate
public override string Email
{
get { return _member.CreateDate; }
get { return _email; }
set { _email = value; }
}
public override string UserName
public override string PasswordQuestion
{
get { return _member.Username; }
get { return _passwordQuestion; }
}
public override string Comment
{
get { return _member.Comments; }
set { _member.Comments = value; }
get { return _comment; }
set { _comment = value; }
}
public override bool IsApproved
{
get { return _member.IsApproved; }
set { _member.IsApproved = value; }
get { return _isApproved; }
set { _isApproved = value; }
}
public override bool IsLockedOut
{
get { return _member.IsLockedOut; }
get { return _isLockedOut; }
}
public override System.DateTime LastLoginDate
public override DateTime LastLockoutDate
{
get { return _member.LastLoginDate; }
set { _member.LastLoginDate = value; }
get { return _lastLockoutDate; }
}
public override DateTime CreationDate
{
get { return _creationDate; }
}
public override DateTime LastLoginDate
{
get { return _lastLoginDate; }
set { _lastLoginDate = value; }
}
public override DateTime LastActivityDate
{
get { return _lastActivityDate; }
set { _lastActivityDate = value; }
}
public override DateTime LastPasswordChangedDate
{
get { return _lastPasswordChangedDate; }
}
public override string ProviderName
{
get { return _providerName; }
}
}
}

View File

@@ -58,7 +58,7 @@ namespace Umbraco.Core.Models.Membership
private string _username;
private string _email;
private string _password;
private object _providerUserKey;
private Guid _key;
private bool _isApproved;
private bool _isLockedOut;
private string _language;
@@ -71,7 +71,7 @@ namespace Umbraco.Core.Models.Membership
private static readonly PropertyInfo AllowedSectionsSelector = ExpressionHelper.GetPropertyInfo<User, IEnumerable<string>>(x => x.AllowedSections);
private static readonly PropertyInfo IdSelector = ExpressionHelper.GetPropertyInfo<User, object>(x => x.Id);
private static readonly PropertyInfo NameSelector = ExpressionHelper.GetPropertyInfo<User, string>(x => x.Name);
private static readonly PropertyInfo ProviderUserKeySelector = ExpressionHelper.GetPropertyInfo<User, object>(x => x.ProviderUserKey);
private static readonly PropertyInfo KeySelector = ExpressionHelper.GetPropertyInfo<User, Guid>(x => x.Key);
private static readonly PropertyInfo UserTypeKeySelector = ExpressionHelper.GetPropertyInfo<User, Type>(x => x.ProviderUserKeyType);
private static readonly PropertyInfo UsernameSelector = ExpressionHelper.GetPropertyInfo<User, string>(x => x.Username);
@@ -102,7 +102,22 @@ namespace Umbraco.Core.Models.Membership
}
}
public Guid Key { get; set; }
[IgnoreDataMember]
public Guid Key
{
get
{
return _key;
}
set
{
SetPropertyValueAndDetectChanges(o =>
{
_key = value;
return _key;
}, _key, KeySelector);
}
}
#endregion
@@ -111,17 +126,18 @@ namespace Umbraco.Core.Models.Membership
[IgnoreDataMember]
public object ProviderUserKey
{
get
{
return _providerUserKey;
}
get { return Key; }
set
{
SetPropertyValueAndDetectChanges(o =>
var result = value.TryConvertTo<Guid>();
if (result.Success)
{
_providerUserKey = value;
return _id;
}, _providerUserKey, ProviderUserKeySelector);
Key = result.Result;
}
else
{
throw new NotSupportedException("The User object cannot have a ProviderUserKey of anything other than a GUID");
}
}
}
@@ -197,25 +213,6 @@ namespace Umbraco.Core.Models.Membership
}
}
[DataMember]
public string PasswordQuestion
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
[DataMember]
public string PasswordAnswer
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
[DataMember]
public string Comments
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
[DataMember]
public bool IsApproved
{
@@ -242,39 +239,58 @@ namespace Umbraco.Core.Models.Membership
return _isLockedOut;
}, _isLockedOut, IsLockedOutSelector);
}
}
}
[DataMember]
//TODO: Figure out how to support all of this!
[IgnoreDataMember]
public string PasswordQuestion
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
[IgnoreDataMember]
public string PasswordAnswer
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
[IgnoreDataMember]
public string Comments
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
[IgnoreDataMember]
public DateTime CreateDate
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
[DataMember]
[IgnoreDataMember]
public DateTime UpdateDate
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
[DataMember]
[IgnoreDataMember]
public DateTime LastLoginDate
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
[DataMember]
[IgnoreDataMember]
public DateTime LastPasswordChangeDate
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
[DataMember]
[IgnoreDataMember]
public DateTime LastLockoutDate
{
get { throw new NotImplementedException(); }
set { throw new NotImplementedException(); }
}
[DataMember]
[IgnoreDataMember]
public int FailedPasswordAttempts
{
get { throw new NotImplementedException(); }