/// <summary> /// /// </summary> /// <param name="handlerContext"></param> /// <returns></returns> async Task ExecuteMethod(ServiceHandlerRequestContext handlerContext) { var serviceConfig = ServiceHandlerConfiguration.Current; var methodToInvoke = handlerContext.MethodContext.MethodInfo; var serviceType = handlerContext.ServiceInstanceConfiguration.ServiceType; var httpVerb = handlerContext.HttpRequest.Method; if (httpVerb == "OPTIONS" && serviceConfig.Cors.UseCorsPolicy) { // emty response - ASP.NET will provide CORS headers via applied policy handlerContext.HttpResponse.StatusCode = StatusCodes.Status204NoContent; return; } // Let DI create the Service instance var inst = HttpContext.RequestServices.GetService(serviceType); if (inst == null) { throw new InvalidOperationException(string.Format(Resources.UnableToCreateTypeInstance, serviceType)); } var principal = HttpContext.User; UserPrincipalHelper.AddPrincipal(inst, principal); if (MethodContext.AuthorizationRoles != null && MethodContext.AuthorizationRoles.Count > 0) { ValidateRoles(MethodContext.AuthorizationRoles, principal); } try { var parameterList = GetMethodParameters(handlerContext); if (!handlerContext.MethodContext.IsAsync) { handlerContext.ResultValue = methodToInvoke.Invoke(inst, parameterList); } else { handlerContext.ResultValue = await(dynamic) methodToInvoke.Invoke(inst, parameterList); } } catch (Exception ex) { throw new InvalidOperationException(string.Format(Resources.UnableToExecuteMethod, methodToInvoke.Name, ex.Message)); } finally { UserPrincipalHelper.RemovePrincipal(inst); } }
public override void Validate() { base.Validate(); if (!AssignedRoles.Any()) { throw new NullReferenceException($"Member {Name} must have at least one Role."); } if (!UserPrincipalHelper.IsUserExisted(Name)) { throw new InstanceNotFoundException(Name); } }
public virtual AzUserInfo GetUserInfo(string userName) { userName = UserPrincipalHelper.GetUserNameWithoutDomain(userName); Guard.ArgumentIsNotNull(userName, nameof(userName)); var operations = new List <AzOperation>(); var roles = this.RoleAssignments.Where(r => r.Members.AnyIgnoreCase(userName)).Select(r => r.Name).ToList(); foreach (var role in this.Roles.Where(r => roles.Contains(r.Name))) { operations.AddRange(role.AssignedOperations); } return(new AzUserInfo(this.Name, userName) { Operations = operations.Select(o => o.Name).ToArray(), Roles = roles.ToArray(), Groups = this.Groups.Where(g => g.Members.Any(m => m.NameWithoutDomain.EqualsIgnoreCase(userName))).Select(g => g.Name).ToArray(), }); }