Beispiel #1
0
        //methods
        public SecuredUrl GetActionPermission(string relativeUrl)
        {
            SecuredUrl securedUrl = ExtractActionFromUrl(relativeUrl);

            _urlPermissionValidator.CheckUrlPermission(securedUrl);
            return(securedUrl);
        }
Beispiel #2
0
        public SecuredUrl GetActionPermission(string actionName, string controllerFullName, RouteValueDictionary routeValues = null)
        {
            string controllerName = GetShortControllerName(controllerFullName);
            string url            = _urlHelper.Action(actionName, controllerName, routeValues);

            SecuredUrl securedUrl = new SecuredUrl()
            {
                Url                = url,
                ActionName         = actionName,
                ControllerFullName = controllerFullName
            };

            _urlPermissionValidator.CheckUrlPermission(securedUrl);
            return(securedUrl);
        }
Beispiel #3
0
        protected SecuredUrl ExtractActionFromUrl(string relativeUrl)
        {
            SecuredUrl securedUrl = new SecuredUrl
            {
                Url = relativeUrl
            };

            // From relative to absolute uri
            Uri result;

            if (!Uri.TryCreate(relativeUrl, UriKind.Absolute, out result))
            {
                Uri baseUri = new Uri("http://www.contoso.com");
                Uri fullUri = new Uri(baseUri, relativeUrl);
                relativeUrl = fullUri.AbsoluteUri;
            }

            // Split the url to url + QueryString
            int    questionMarkIndex = relativeUrl.IndexOf('?');
            string queryString       = null;
            string url = relativeUrl;

            if (questionMarkIndex != -1)
            {
                url         = relativeUrl.Substring(0, questionMarkIndex);
                queryString = relativeUrl.Substring(questionMarkIndex + 1);
            }

            // Arrange
            var             request         = new HttpRequest(null, url, queryString);
            var             response        = new HttpResponse(new StringWriter());
            HttpContext     httpContext     = new HttpContext(request, response);
            HttpContextBase httpContextBase = new HttpContextWrapper(HttpContext.Current);

            RouteData routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext));

            if (routeData == null)
            {
                throw new Exception("Was not able to construct RouteData from url provided.");
            }

            // Extract from route values.
            RouteValueDictionary routeValue = routeData.Values;
            string areaName       = (string)routeValue["area"] ?? string.Empty;
            string controllerName = (string)routeValue["controller"] ?? string.Empty;

            securedUrl.ActionName = (string)routeValue["action"] ?? string.Empty;

            IControllerFactory controllerFactory = ControllerBuilder.Current.GetControllerFactory();
            var         requestContext           = new RequestContext(httpContextBase, routeData);
            IController controller = (ControllerBase)controllerFactory.CreateController(requestContext, controllerName);

            securedUrl.ControllerFullName = controller.GetType().FullName;
            controllerFactory.ReleaseController(controller);

            if (securedUrl.ActionName != string.Empty)
            {
                return(securedUrl);
            }

            var routeDataAsListFromMsDirectRouteMatches      = (List <RouteData>)routeValue["MS_DirectRouteMatches"];
            var routeValueDictionaryFromMsDirectRouteMatches = routeDataAsListFromMsDirectRouteMatches.FirstOrDefault();

            if (routeValueDictionaryFromMsDirectRouteMatches == null)
            {
                return(securedUrl);
            }

            securedUrl.ActionName = routeValueDictionaryFromMsDirectRouteMatches.Values["action"].ToString();
            if (securedUrl.ActionName == string.Empty)
            {
                securedUrl.ActionName = "Index";
            }
            return(securedUrl);
        }