custom membership providers now working in the back office.

This commit is contained in:
Shannon
2013-11-18 15:29:53 +11:00
parent 4d31512ef0
commit f8e17b711e
3 changed files with 74 additions and 33 deletions

View File

@@ -31,6 +31,8 @@ namespace Umbraco.Web.Models.Mapping
//FROM MembershipUser TO IMember - used when using a non-umbraco membership provider
config.CreateMap<MembershipUser, IMember>()
.ConstructUsing(user => MemberService.CreateGenericMembershipProviderMember(user.UserName, user.Email, user.UserName, ""))
//we're giving this entity an ID - we cannot really map it but it needs an id so the system knows it's not a new entity
.ForMember(member => member.Id, expression => expression.MapFrom(user => int.MaxValue))
.ForMember(member => member.Comments, expression => expression.MapFrom(user => user.Comment))
.ForMember(member => member.CreateDate, expression => expression.MapFrom(user => user.CreationDate))
.ForMember(member => member.UpdateDate, expression => expression.MapFrom(user => user.LastActivityDate))
@@ -63,8 +65,8 @@ namespace Umbraco.Web.Models.Mapping
.ForMember(display => display.MemberProviderFieldMapping,
expression => expression.ResolveUsing<MemberProviderFieldMappingResolver>())
.ForMember(display => display.MembershipScenario,
expression => expression.ResolveUsing(new MembershipScenarioMappingResolver(new Lazy<IMemberTypeService>(() => applicationContext.Services.MemberTypeService))))
.AfterMap(MapGenericCustomProperties);
expression => expression.ResolveUsing(new MembershipScenarioMappingResolver(new Lazy<IMemberTypeService>(() => applicationContext.Services.MemberTypeService))))
.AfterMap((member, display) => MapGenericCustomProperties(applicationContext.Services.MemberService, member, display));
//FROM IMember TO ContentItemBasic<ContentPropertyBasic, IMember>
config.CreateMap<IMember, ContentItemBasic<ContentPropertyBasic, IMember>>()
@@ -90,13 +92,14 @@ namespace Umbraco.Web.Models.Mapping
/// <summary>
/// Maps the generic tab with custom properties for content
/// </summary>
/// <param name="memberService"></param>
/// <param name="member"></param>
/// <param name="display"></param>
private static void MapGenericCustomProperties(IMember member, MemberDisplay display)
private static void MapGenericCustomProperties(IMemberService memberService, IMember member, MemberDisplay display)
{
TabsAndPropertiesResolver.MapGenericProperties(
member, display,
GetLoginProperty(member, display),
GetLoginProperty(memberService, member, display),
new ContentPropertyDisplay
{
Alias = string.Format("{0}email", Constants.PropertyEditors.InternalGenericPropertiesPrefix),
@@ -139,6 +142,7 @@ namespace Umbraco.Web.Models.Mapping
/// <summary>
/// Returns the login property display field
/// </summary>
/// <param name="memberService"></param>
/// <param name="member"></param>
/// <param name="display"></param>
/// <returns></returns>
@@ -147,7 +151,7 @@ namespace Umbraco.Web.Models.Mapping
/// the membership provider is a custom one, we cannot allow chaning the username because MembershipProvider's do not actually natively
/// allow that.
/// </remarks>
internal static ContentPropertyDisplay GetLoginProperty(IMember member, MemberDisplay display)
internal static ContentPropertyDisplay GetLoginProperty(IMemberService memberService, IMember member, MemberDisplay display)
{
var prop = new ContentPropertyDisplay
{
@@ -155,8 +159,11 @@ namespace Umbraco.Web.Models.Mapping
Label = ui.Text("login"),
Value = display.Username
};
var scenario = memberService.GetMembershipScenario();
//only allow editing if this is a new member, or if the membership provider is the umbraco one
if (member.HasIdentity == false || Membership.Provider.Name == Constants.Conventions.Member.UmbracoMemberProviderName)
if (member.HasIdentity == false || scenario == MembershipScenario.NativeUmbraco)
{
prop.View = "textbox";
prop.Config = new Dictionary<string, object> {{"IsRequired", true}};