Browse Source

Added ObjectValidator.Validate to identity create/edit user.

pull/179/head
Halil İbrahim Kalkan 9 years ago
parent
commit
a8c3c9e7db
  1. 5
      src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/RazorPages/AbpPageModel.cs
  2. 4
      src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/MvcModelValidator.cs
  3. 3
      src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs
  4. 3
      src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs
  5. 18
      src/Volo.Abp/Volo/Abp/Validation/AbpValidationResult.cs
  6. 4
      src/Volo.Abp/Volo/Abp/Validation/IObjectValidator.cs
  7. 10
      src/Volo.Abp/Volo/Abp/Validation/MethodInvocationValidationContext.cs
  8. 16
      src/Volo.Abp/Volo/Abp/Validation/MethodInvocationValidatorBase.cs
  9. 25
      src/Volo.Abp/Volo/Abp/Validation/ObjectValidator.cs

5
src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/RazorPages/AbpPageModel.cs

@ -6,6 +6,7 @@ using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.Guids;
using Volo.Abp.ObjectMapping;
using Volo.Abp.Uow;
using Volo.Abp.Validation;
namespace Volo.Abp.AspNetCore.Mvc.RazorPages
{
@ -19,8 +20,10 @@ namespace Volo.Abp.AspNetCore.Mvc.RazorPages
public ILoggerFactory LoggerFactory { get; set; }
protected IUnitOfWork CurrentUnitOfWork => UnitOfWorkManager?.Current;
public IObjectValidator ObjectValidator { get; set; }
protected IUnitOfWork CurrentUnitOfWork => UnitOfWorkManager?.Current;
protected ILogger Logger => _lazyLogger.Value;
private Lazy<ILogger> _lazyLogger => new Lazy<ILogger>(() => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance, true);

4
src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/MvcModelObjectValidator.cs → src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Validation/MvcModelValidator.cs

@ -5,9 +5,9 @@ using Volo.Abp.Validation;
namespace Volo.Abp.AspNetCore.Mvc.Validation
{
[ExposeServices(typeof(IMvcModelObjectValidator))]
public class MvcModelObjectValidator : ObjectValidator, IMvcModelObjectValidator
public class MvcModelValidator : ObjectValidator, IMvcModelObjectValidator
{
public MvcModelObjectValidator(IOptions<AbpValidationOptions> options)
public MvcModelValidator(IOptions<AbpValidationOptions> options)
: base(options, NullDataAnnotationValidator.Instance)
{
}

3
src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs

@ -35,7 +35,8 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users
public async Task<NoContentResult> OnPostAsync()
{
//TODO: ModelState.IsValid..?
ObjectValidator.Validate(UserInfo, nameof(UserInfo));
ObjectValidator.Validate(Roles, nameof(Roles));
var input = ObjectMapper.Map<UserInfoViewModel, IdentityUserCreateDto>(UserInfo);
input.RoleNames = Roles.Where(r => r.IsAssigned).Select(r => r.Name).ToArray();

3
src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs

@ -45,7 +45,8 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users
public async Task<IActionResult> OnPostAsync()
{
//TODO: ModelState.IsValid..?
ObjectValidator.Validate(UserInfo, nameof(UserInfo));
ObjectValidator.Validate(Roles, nameof(Roles));
var input = ObjectMapper.Map<UserInfoViewModel, IdentityUserUpdateDto>(UserInfo);
input.RoleNames = Roles.Where(r => r.IsAssigned).Select(r => r.Name).ToArray();

18
src/Volo.Abp/Volo/Abp/Validation/AbpValidationResult.cs

@ -0,0 +1,18 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace Volo.Abp.Validation
{
public class AbpValidationResult : IAbpValidationResult
{
public List<ValidationResult> Errors { get; }
public List<IShouldNormalize> ObjectsToBeNormalized { get; }
public AbpValidationResult()
{
Errors = new List<ValidationResult>();
ObjectsToBeNormalized = new List<IShouldNormalize>();
}
}
}

4
src/Volo.Abp/Volo/Abp/Validation/IObjectValidator.cs

@ -2,8 +2,8 @@ namespace Volo.Abp.Validation
{
public interface IObjectValidator
{
void Validate(IAbpValidationResult validationResult, object validatingObject);
void Validate(object validatingObject, string name = null, bool allowNull = false);
void AddValidatationErrors(IAbpValidationResult validationResult, object validatingObject);
void AddValidatationErrors(IAbpValidationResult validationResult, object validatingObject, string name = null, bool allowNull = false);
}
}

10
src/Volo.Abp/Volo/Abp/Validation/MethodInvocationValidationContext.cs

@ -1,10 +1,8 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Reflection;
namespace Volo.Abp.Validation
{
public class MethodInvocationValidationContext : IAbpValidationResult
public class MethodInvocationValidationContext : AbpValidationResult
{
public MethodInfo Method { get; }
@ -12,18 +10,12 @@ namespace Volo.Abp.Validation
public ParameterInfo[] Parameters { get; }
public List<ValidationResult> Errors { get; }
public List<IShouldNormalize> ObjectsToBeNormalized { get; }
public MethodInvocationValidationContext(MethodInfo method, object[] parameterValues)
{
Method = method;
ParameterValues = parameterValues;
Parameters = method.GetParameters();
Errors = new List<ValidationResult>();
ObjectsToBeNormalized = new List<IShouldNormalize>();
}
}
}

16
src/Volo.Abp/Volo/Abp/Validation/MethodInvocationValidatorBase.cs

@ -95,19 +95,11 @@ namespace Volo.Abp.Validation
protected virtual void AddMethodParameterValidationErrors(IAbpValidationResult context, ParameterInfo parameterInfo, object parameterValue)
{
if (parameterValue == null)
{
if (!parameterInfo.IsOptional &&
!parameterInfo.IsOut &&
!TypeHelper.IsPrimitiveExtendedIncludingNullable(parameterInfo.ParameterType, includeEnums: true))
{
context.Errors.Add(new ValidationResult(parameterInfo.Name + " is null!", new[] { parameterInfo.Name }));
}
return;
}
var allowNulls = parameterInfo.IsOptional ||
parameterInfo.IsOut ||
TypeHelper.IsPrimitiveExtendedIncludingNullable(parameterInfo.ParameterType, includeEnums: true);
_objectValidator.AddValidatationErrors(context, parameterValue);
_objectValidator.AddValidatationErrors(context, parameterValue, parameterInfo.Name, allowNulls);
}
}
}

25
src/Volo.Abp/Volo/Abp/Validation/ObjectValidator.cs

@ -1,5 +1,6 @@
using System.Collections;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection;
@ -20,9 +21,11 @@ namespace Volo.Abp.Validation
_options = options.Value;
}
public virtual void Validate(IAbpValidationResult validationResult, object validatingObject)
public virtual void Validate(object validatingObject, string name = null, bool allowNull = false)
{
AddValidatationErrors(validationResult, validatingObject);
var validationResult = new AbpValidationResult();
AddValidatationErrors(validationResult, validatingObject, name, allowNull);
if (validationResult.Errors.Any())
{
@ -31,10 +34,26 @@ namespace Volo.Abp.Validation
validationResult.Errors
);
}
foreach (var objectToBeNormalized in validationResult.ObjectsToBeNormalized)
{
objectToBeNormalized.Normalize();
}
}
public virtual void AddValidatationErrors(IAbpValidationResult validationResult, object validatingObject)
public virtual void AddValidatationErrors(IAbpValidationResult validationResult, object validatingObject, string name = null, bool allowNull = false)
{
if (validatingObject == null && !allowNull)
{
validationResult.Errors.Add(
name == null
? new ValidationResult("Given object is null!")
: new ValidationResult(name + " is null!", new[] { name })
);
return;
}
ValidateObjectRecursively(validationResult, validatingObject, 1);
}

Loading…
Cancel
Save