Change IsLockedOut property to readonly when it's true (only allow unlocking members)

This commit is contained in:
Ronald Barendse
2021-11-08 11:22:07 +01:00
parent 5bda825fd1
commit 4bf598d9a4
2 changed files with 12 additions and 19 deletions

View File

@@ -4,6 +4,7 @@
<umb-toggle input-id="{{model.alias}}"
checked="renderModel.value"
disabled="model.readonly"
on-click="toggle()"
show-labels="{{model.config.showLabels}}"
label-position="right"

View File

@@ -53,29 +53,21 @@ namespace Umbraco.Web.Models.Mapping
var resolved = base.Map(source, context);
if (provider.IsUmbracoMembershipProvider() == false)
// IMember.IsLockedOut can't be set to true, so make it readonly when that's the case (you can only unlock)
var isLockedOutPropertyAlias = Constants.Conventions.Member.IsLockedOut;
if (provider.IsUmbracoMembershipProvider() &&
provider is IUmbracoMemberTypeMembershipProvider umbracoProvider)
{
// 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;
// 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");
}
isLockedOutPropertyAlias = umbracoProvider.LockPropertyTypeAlias;
}
var isLockedOutProperty = resolved.SelectMany(x => x.Properties).FirstOrDefault(x => x.Alias == isLockedOutPropertyAlias);
if (isLockedOutProperty?.Value != null && isLockedOutProperty.Value.ToString() != "1")
{
isLockedOutProperty.Readonly = true;
}
return resolved;