Esempio n. 1
0
        /// <summary>
        /// Запечатан. Для определения дополнительной логики авторизации следует воспользоваться атрибутом <see cref="AuthorizeAttribute"/>.
        /// </summary>
        protected override void OnAuthorization(AuthorizationContext filterContext)
        {
            var isAllowed = true;

            var moduleActionAttribute = (filterContext?.ActionDescriptor as ReflectedActionDescriptor)?.MethodInfo?.GetCustomAttributes <ModuleActionAttribute>(true).FirstOrDefault();

            if (moduleActionAttribute != null && moduleActionAttribute.Permission != Guid.Empty)
            {
                isAllowed = ModuleBase.CheckPermission(ModuleBase.GetAppCore().GetUserContextManager().GetCurrentUserContext(), moduleActionAttribute.Permission) == CheckPermissionVariant.Allowed;
            }

            if (!isAllowed)
            {
                var moduleAuth = AppCore.Get <OnXap.Modules.Auth.ModuleAuth>();
                moduleAuth.RememberUserContextRequestedAddressWhenRedirectedToAuthorization(filterContext.RequestContext.HttpContext.Request.Url);

                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary {
                    { "controller", moduleAuth.UrlName },
                    { "action", "unauthorized" }, // todo заменить unauthorized на ссылку на метод. Но как, если возвращаемый результат ActionResult известен только при привязке к asp.net mvc/core?
                    { "area", AreaConstants.User }
                });
            }
        }