Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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(),
            });
        }