Esempio n. 1
0
        /// <summary>
        /// 获取正在执行的Action的相关功能信息
        /// </summary>
        public static IFunction GetExecuteFunction(this ActionContext context)
        {
            IServiceProvider provider = context.HttpContext.RequestServices;
            ScopedDictionary dict     = provider.GetService <ScopedDictionary>();

            if (dict.Function != null)
            {
                return(dict.Function);
            }
            string area       = context.GetAreaName();
            string controller = context.GetControllerName();
            string action     = context.GetActionName();
            // todo: 当权限模块没启用时,应取消权限验证,如何判断权限模块已启用?
            IFunctionHandler functionHandler = provider.GetService <IFunctionHandler>();

            if (functionHandler == null)
            {
                throw new OsharpException("获取正在执行的功能时 IFunctionHandler 无法解析");
            }
            IFunction function = functionHandler.GetFunction(area, controller, action);

            if (function != null)
            {
                dict.Function = function;
            }
            return(function);
        }
Esempio n. 2
0
        /// <summary>
        /// 获取指定URL的功能信息
        /// </summary>
        public static IFunction GetFunction(this ControllerBase controller, string url)
        {
            url = url.StartsWith("https://") || url.StartsWith("http://")
                ? new Uri(url).AbsolutePath : !url.StartsWith("/") ? $"/{url}" : url;
            IServiceProvider    provider    = controller.HttpContext.RequestServices;
            IHttpContextFactory factory     = provider.GetService <IHttpContextFactory>();
            HttpContext         httpContext = factory.Create(controller.HttpContext.Features);

            httpContext.Request.Path   = url;
            httpContext.Request.Method = "POST";
            RouteContext     routeContext = new RouteContext(httpContext);
            IRouteCollection router       = controller.RouteData.Routers.OfType <IRouteCollection>().FirstOrDefault();

            if (router == null)
            {
                return(null);
            }
            router.RouteAsync(routeContext).Wait();
            if (routeContext.Handler == null)
            {
                return(null);
            }
            RouteValueDictionary dict       = routeContext.RouteData.Values;
            string           areaName       = dict.GetOrDefault("area")?.ToString();
            string           controllerName = dict.GetOrDefault("controller")?.ToString();
            string           actionName     = dict.GetOrDefault("action")?.ToString();
            IFunctionHandler handler        = provider.GetService <IFunctionHandler>();

            return(handler?.GetFunction(areaName, controllerName, actionName));
        }
        /// <summary>
        /// 获取当前执行的功能信息
        /// </summary>
        public static IFunction GetExecuteFunction(this HttpRequestMessage request, IServiceProvider provider)
        {
            const string key = Constants.CurrentWebApiFunctionKey;
            IDictionary <string, object> items = request.Properties;

            if (items.ContainsKey(key))
            {
                return((IFunction)items[key]);
            }
            string           area       = request.GetAreaName();
            string           controller = request.GetControllerName();
            string           action     = request.GetActionName();
            IFunctionHandler handler    = provider.GetService <IFunctionHandler>();

            if (handler == null)
            {
                return(null);
            }
            IFunction function = handler.GetFunction(area, controller, action);

            if (function != null)
            {
                items.Add(key, function);
            }
            return(function);
        }
Esempio n. 4
0
        /// <summary>
        /// 获取MVC操作的相关功能信息
        /// </summary>
        public static IFunction GetExecuteFunction(this ControllerContext context, IServiceProvider provider)
        {
            const string key   = Constants.CurrentMvcFunctionKey;
            IDictionary  items = context.HttpContext.Items;

            if (items.Contains(key))
            {
                return((IFunction)items[key]);
            }
            string           area            = context.GetAreaName();
            string           controller      = context.GetControllerName();
            string           action          = context.GetActionName();
            IFunctionHandler functionHandler = provider.GetService <IFunctionHandler>();

            if (functionHandler == null)
            {
                return(null);
            }
            IFunction function = functionHandler.GetFunction(area, controller, action);

            if (function != null)
            {
                items.Add(key, function);
            }
            return(function);
        }
Esempio n. 5
0
        /// <summary>
        /// 获取正在执行的Action的相关功能信息
        /// </summary>
        public static IFunction GetExecuteFunction(this ActionContext context)
        {
            Check.NotNull(context, nameof(context));

            IServiceProvider provider = context.HttpContext.RequestServices;
            ScopedDictionary dict     = provider.GetService <ScopedDictionary>();

            if (dict.Function != null)
            {
                return(dict.Function);
            }
            string area       = context.GetAreaName();
            string controller = context.GetControllerName();
            string action     = context.GetActionName();
            // todo: 当权限模块没启用时,应取消权限验证,如何判断权限模块已启用?
            IFunctionHandler functionHandler = provider.GetService <IFunctionHandler>();

            if (functionHandler == null)
            {
                return(null);
            }
            IFunction function = functionHandler.GetFunction(area, controller, action);

            if (function != null)
            {
                dict.Function = function;
            }
            return(function);
        }
Esempio n. 6
0
        /// <summary>
        /// 获取正在执行的Action相关功能信息
        /// </summary>
        public static IFunction GetExecuteFunction(this RouteEndpoint endpoint, HttpContext context)
        {
            IServiceProvider provider = context.RequestServices;
            ScopedDictionary dict     = provider.GetService <ScopedDictionary>();

            if (dict.Function != null)
            {
                return(dict.Function);
            }

            string area       = endpoint.GetAreaName(),
                   controller = endpoint.GetControllerName(),
                   action     = endpoint.GetActionName();
            IFunctionHandler functionHandler = provider.GetService <IFunctionHandler>();

            if (functionHandler == null)
            {
                throw new OsharpException("获取正在执行的功能时 IFunctionHandler 无法解析");
            }

            IFunction function = functionHandler.GetFunction(area, controller, action);

            if (function != null)
            {
                dict.Function = function;
            }

            return(function);
        }
Esempio n. 7
0
        /// <summary>
        /// 获取正在执行的Action的相关功能信息
        /// </summary>
        public static IFunction GetExecuteFunction(this ActionContext context)
        {
            const string key = OsharpConstants.CurrentMvcFunctionKey;
            IDictionary <object, object> items = context.HttpContext.Items;

            if (items.ContainsKey(key))
            {
                return(items[key] as IFunction);
            }
            string           area            = context.GetAreaName();
            string           controller      = context.GetControllerName();
            string           action          = context.GetActionName();
            IFunctionHandler functionHandler = ServiceLocator.Instance.GetService <IFunctionHandler>();

            if (functionHandler == null)
            {
                throw new OsharpException("获取正在执行的功能时 IFunctionHandler 无法解析");
            }
            IFunction function = functionHandler.GetFunction(area, controller, action);

            if (function != null)
            {
                items.Add(key, function);
            }
            return(function);
        }
Esempio n. 8
0
        /// <summary>
        /// 检测当前用户是否有指定功能的功能权限
        /// </summary>
        public static bool CheckFunctionAuth(this ControllerBase controller, string actionName, string controllerName, string areaName = null)
        {
            IServiceProvider provider        = controller.HttpContext.RequestServices;
            IFunctionHandler functionHandler = provider.GetService <IFunctionHandler>();
            IFunction        function        = functionHandler?.GetFunction(areaName, controllerName, actionName);

            if (function == null)
            {
                return(false);
            }
            IFunctionAuthorization authorization = provider.GetService <IFunctionAuthorization>();

            return(authorization.Authorize(function, controller.User).IsOk);
        }