public Result Add(string roleId, AddRoleAssignmentRequest addRoleAssignment) { ValidationResult validationResult = _addRoleAssignmentValidator.Validate(addRoleAssignment); if (!validationResult.IsValid) { _logger.LogWarning($"Invalid AddRoleAssignmentRequest model"); return(Result.Fail(validationResult.Errors)); } if (roleId == addRoleAssignment.RoleId) { _logger.LogError($"Can not assign Role to itself. RoleId {roleId}"); return(Result.Fail("can_not_assigne_to_itself", "Can not assign Role to itself")); } Result roleExist = ValidateRole(roleId); if (roleExist.Failure) { return(Result.Fail(roleExist.Errors)); } Result canAssigneRoleExist = ValidateRole(addRoleAssignment.RoleId); if (canAssigneRoleExist.Failure) { return(Result.Fail(canAssigneRoleExist.Errors)); } BaseSpecification <RoleAssignmentEntity> roleAlreadyAssignedSpecification = new BaseSpecification <RoleAssignmentEntity>(); roleAlreadyAssignedSpecification.AddFilter(x => x.RoleId == roleId); roleAlreadyAssignedSpecification.AddFilter(x => x.CanAssigneRoleId == addRoleAssignment.RoleId); bool roleAlreadyAssigned = _groupRoleAssignmentRepository.Exist(roleAlreadyAssignedSpecification); if (roleAlreadyAssigned) { _logger.LogError($"Role is already assigned. RoleId {roleId}, CanAssigneRoleId {addRoleAssignment.RoleId}"); return(Result.Fail("role_is_already_assigned", "Role is already assigned")); } //TODO: check for recursion loop if we are going to use role assignment recursion RoleAssignmentEntity roleAssignment = new RoleAssignmentEntity( roleId: roleId, canAssigneRoleId: addRoleAssignment.RoleId); bool addResult = _groupRoleAssignmentRepository.Add(roleAssignment); if (!addResult) { _logger.LogError($"Failed to add GroupRoleAssignment, RoleId {roleId}, CanAssignedRoleId {addRoleAssignment.RoleId}"); return(Result.Fail("failed_to_add_role_assignment", "Failed to add RoleAssignment")); } return(Result.Ok()); }
public IActionResult Add([FromRoute] string roleId, [FromBody] AddRoleAssignmentRequest addRoleAssignment) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } Result result = _roleAssignmentService.Add(roleId, addRoleAssignment); if (result.Failure) { ModelState.AddErrors(result.Errors); return(BadRequest(ModelState)); } return(Ok(new EmptyResult())); }