Как получить название представления, из которого было вызвано действие? - PullRequest
0 голосов
/ 10 октября 2018

Я использую атрибут Authorize для аутентификации на основе ролей

 public class CheckAuthorizationAttribute : AuthorizeAttribute
{
    private class Http401Result : ActionResult
    {
        public override void ExecuteResult(ControllerContext context)
        {
            // Set the response code to 401.
            context.HttpContext.Response.StatusCode = 401;
            context.HttpContext.Response.StatusDescription = "NotAuthorized";
            context.HttpContext.Response.End();
        }
    }

    string strActionName;

    public CheckAuthorizationAttribute(string ActionName = null)
    {
        strActionName = ActionName;
    }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var rd = httpContext.Request.RequestContext.RouteData;

        int RoleId = SessionManager.SystemRoleID;
        int UserID = SessionManager.SystemUserID;
        strActionName = strActionName ?? rd.GetRequiredString("action");
        string ControllerName = rd.GetRequiredString("controller");
        string[] AllowedPages = { "ChangePassword", "Logout", "PageNotFound", "LoadData", "Index" };
        //Type MyType = Type.GetType("System.Reflection.FieldInfo");
        //MethodInfo Mymethodinfo = MyType.GetMethod(ActionName);
        //var vReuslt = Mymethodinfo.ReturnType;

        if (RoleId != (int)EnumList.RoleType.Administrator /*&& !AllowedPages.Contains(strActionName)*/)
        {
            IList<usp_GetPermissionList_Result> lstPermission = new List<usp_GetPermissionList_Result>();
            if (RoleId != 0 && UserID != 0)
                lstPermission = new BLSystemRole().BL_GetPermissionList(new SystemRole() { SystemRoleID = RoleId, UserID = UserID, ControllerName = ControllerName, ActionName = strActionName, IntStatus = 1 });

            if (lstPermission.Count() == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        else
        {
            return true;
        }
    }

    //public override void OnAuthorization(AuthorizationContext filterContext)
    //{
    //    int RoleId = SessionManager.SystemRoleID;
    //    int UserID = SessionManager.SystemUserID;
    //    strActionName = strActionName ?? filterContext.ActionDescriptor.ActionName;
    //    string ControllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
    //    string[] AllowedPages = { "ChangePassword", "Logout", "PageNotFound", "LoadData", "Index" };
    //    //Type MyType = Type.GetType("System.Reflection.FieldInfo");
    //    //MethodInfo Mymethodinfo = MyType.GetMethod(ActionName);
    //    //var vReuslt = Mymethodinfo.ReturnType;

    //    if (RoleId != (int)EnumList.RoleType.Administrator /*&& !AllowedPages.Contains(strActionName)*/)
    //    {

    //        IList<usp_GetPermissionList_Result> lstPermission=new List<usp_GetPermissionList_Result>();
    //        if (RoleId != 0 && UserID != 0)
    //            lstPermission = new BLSystemRole().BL_GetPermissionList(new SystemRole() { SystemRoleID = RoleId, UserID = UserID, ControllerName = ControllerName, ActionName = strActionName, IntStatus = 1 });

    //        if (lstPermission.Count() == 0)
    //        {
    //            if (filterContext.HttpContext.Request.IsAjaxRequest())
    //            {
    //                filterContext.HttpContext.Response.StatusCode = 401;
    //                filterContext.HttpContext.Response.StatusDescription = "NotAuthorized";
    //                //filterContext.HttpContext.Response.SuppressFormsAuthenticationRedirect = true;
    //                HandleUnauthorizedRequest(filterContext);
    //                filterContext.HttpContext.Response.End();
    //            }
    //            else
    //                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "action", "Index" }, { "controller", "Unauthorised" } });
    //        }
    //    }
    //}

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
        {
            //Ajax request doesn't return to login page, it just returns 401 error.
            filterContext.Result = new Http401Result();
        }
        else
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "action", "Index" }, { "controller", "Unauthorised" } });
    }
}

это класс, как вы можете видеть, конструктор принимает свойство, которое возвращает имя действия

Как это

 [CheckAuthorization("Edit")]
    public JsonResult UpdateStatus(MST_Country pObjCountry)
    {
        Dictionary<string, object> dcResponse = new Dictionary<string, object>();

        if (pObjCountry.CountryID != 0)
        {
            pObjCountry.ModifiedBy = SessionManager.SystemUserID;
            pObjCountry.ModifiedDate = CommUtil.GetCurrentDateTime();
            FuncResponse mObjFuncResponse = new BLCountry().BL_UpdateStatus(pObjCountry);
            dcResponse["success"] = mObjFuncResponse.Success;
            dcResponse["Message"] = mObjFuncResponse.Message;
        }
        else
        {
            dcResponse["success"] = false;
            dcResponse["Message"] = "Invalid Action";
        }

        return Json(dcResponse, JsonRequestBehavior.AllowGet);
    }

но у меня есть некоторый результат JSON, который называется из разных представлений, таких как добавление или редактирование. Как динамически определить, какое представление вызывает [CheckAuthorization (динамические данные должны быть здесь))

отредактированный кодздесь:

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var rd = httpContext.Request.RequestContext.RouteData;

        int intRoleId = SessionManager.SystemRoleID;
        int intUserID = SessionManager.SystemUserID;
        string strControllerName = rd.GetRequiredString("controller");

        strActionName =rd.GetRequiredString("action");

        if (httpContext.Request.IsAjaxRequest())
        {
            var values = RouteDataContext.RouteValuesFromUri(httpContext.Request.UrlReferrer);
            strActionName = values["action"].ToString();
        }


        if (intRoleId != (int)EnumList.RoleType.Administrator)
        {
            IList<usp_GetPermissionList_Result> lstPermission = SessionManager.lstPermissionList.Where(t => t.ActionName == strActionName && t.ControllerName == strControllerName).ToList();
            //lstPermission = new BLSystemRole().BL_GetPermissionList(new SystemRole() { SystemRoleID = intRoleId, UserID = intUserID, ControllerName = strControllerName, ActionName = strActionName, IntStatus = 1 });

            if (lstPermission.Count() == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        else
        {
            return true;
        }
    }
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
        {
            //Ajax request doesn't return to login page, it just returns 401 error.
            filterContext.Result = new Http401Result();
        }
        else
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "action", "Index" }, { "controller", "Unauthorised" } });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...