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.Guids;
using Volo.Abp.ObjectMapping; using Volo.Abp.ObjectMapping;
using Volo.Abp.Uow; using Volo.Abp.Uow;
using Volo.Abp.Validation;
namespace Volo.Abp.AspNetCore.Mvc.RazorPages namespace Volo.Abp.AspNetCore.Mvc.RazorPages
{ {
@ -19,8 +20,10 @@ namespace Volo.Abp.AspNetCore.Mvc.RazorPages
public ILoggerFactory LoggerFactory { get; set; } 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; protected ILogger Logger => _lazyLogger.Value;
private Lazy<ILogger> _lazyLogger => new Lazy<ILogger>(() => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance, true); 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 namespace Volo.Abp.AspNetCore.Mvc.Validation
{ {
[ExposeServices(typeof(IMvcModelObjectValidator))] [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) : 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() 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); var input = ObjectMapper.Map<UserInfoViewModel, IdentityUserCreateDto>(UserInfo);
input.RoleNames = Roles.Where(r => r.IsAssigned).Select(r => r.Name).ToArray(); 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() 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); var input = ObjectMapper.Map<UserInfoViewModel, IdentityUserUpdateDto>(UserInfo);
input.RoleNames = Roles.Where(r => r.IsAssigned).Select(r => r.Name).ToArray(); 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 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; using System.Reflection;
namespace Volo.Abp.Validation namespace Volo.Abp.Validation
{ {
public class MethodInvocationValidationContext : IAbpValidationResult public class MethodInvocationValidationContext : AbpValidationResult
{ {
public MethodInfo Method { get; } public MethodInfo Method { get; }
@ -12,18 +10,12 @@ namespace Volo.Abp.Validation
public ParameterInfo[] Parameters { get; } public ParameterInfo[] Parameters { get; }
public List<ValidationResult> Errors { get; }
public List<IShouldNormalize> ObjectsToBeNormalized { get; }
public MethodInvocationValidationContext(MethodInfo method, object[] parameterValues) public MethodInvocationValidationContext(MethodInfo method, object[] parameterValues)
{ {
Method = method; Method = method;
ParameterValues = parameterValues; ParameterValues = parameterValues;
Parameters = method.GetParameters(); 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) protected virtual void AddMethodParameterValidationErrors(IAbpValidationResult context, ParameterInfo parameterInfo, object parameterValue)
{ {
if (parameterValue == null) var allowNulls = parameterInfo.IsOptional ||
{ parameterInfo.IsOut ||
if (!parameterInfo.IsOptional && TypeHelper.IsPrimitiveExtendedIncludingNullable(parameterInfo.ParameterType, includeEnums: true);
!parameterInfo.IsOut &&
!TypeHelper.IsPrimitiveExtendedIncludingNullable(parameterInfo.ParameterType, includeEnums: true))
{
context.Errors.Add(new ValidationResult(parameterInfo.Name + " is null!", new[] { parameterInfo.Name }));
}
return;
}
_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.Collections;
using System.ComponentModel; using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq; using System.Linq;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -20,9 +21,11 @@ namespace Volo.Abp.Validation
_options = options.Value; _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()) if (validationResult.Errors.Any())
{ {
@ -31,10 +34,26 @@ namespace Volo.Abp.Validation
validationResult.Errors 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); ValidateObjectRecursively(validationResult, validatingObject, 1);
} }

Loading…
Cancel
Save