Base controller in MVC 5

Base controller in MVC 5

 public class BaseController : Controller
 {
        public UserSession _userSession { set; get; }
        AuthenticationManager _authenticationManager = new AuthenticationManager();
       
        public BaseController()
        {
            if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated)
            {
                (new UserManager()).CreateUserSession();
            }
            else
            {
                //2. if user not authenticated then redirect to login controller.
                RedirectToControllers(ControllerHelper.Controller.ACCOUNT, ControllerHelper.Controller.Action.ACCOUNT_LOGIN);
            }
        }

        /// <summary>
        /// Override onAuthentication filter is use to check authentication.
        /// </summary>
        /// <param name="filterContext"></param>
        protected override void OnAuthentication(AuthenticationContext filterContext)
        {
            //1. authentication manager will check that user authenticated and user session created sucessfully.
            if (_authenticationManager.IsUserAuthenticated())   
            {
                //1.1. get user session and set into to _usersession member to consume into inherited controller.
                _userSession = UserManager.GetUserSession();   
            }
            else
            {
                //2. if user not authenticated then redirect to login controller.
                RedirectToControllers(ControllerHelper.Controller.ACCOUNT, ControllerHelper.Controller.Action.ACCOUNT_LOGIN);
            }
        }

        /// <summary>
        /// Override onAuthentication filter is use to check authentication.
        /// </summary>
        /// <param name="filterContext"></param>
        protected override void OnException(ExceptionContext filterContext)
        {
            AppException appException = new AppException();
            appException.Type = filterContext.GetType().ToString();
            appException.StackTrace = filterContext.Exception.StackTrace;
            appException.Source = filterContext.Exception.Source;
            appException.InnerException = Convert.ToString(filterContext.Exception.InnerException);

            (new ExceptionManager()).ExceptionLog(appException);

            // if the request is AJAX return JSON else view.
            if (IsAjax(filterContext))
            {
                //Because its a exception raised after ajax invocation
                //Lets return Json
                filterContext.Result = new JsonResult()
                {
                    Data = filterContext.Exception.Message,
                    JsonRequestBehavior = JsonRequestBehavior.AllowGet
                };

                filterContext.ExceptionHandled = true;
                filterContext.HttpContext.Response.Clear();
            }
            else
            {
                if (AppConfigurationManager.GetCustomApplicationError())
                {
                    filterContext.ExceptionHandled = true;
                    //RedirectToControllers(ControllerHelper.Controller.ACCOUNT, ControllerHelper.Controller.Action.APPLICATIONERROR, true);
                }
            }
        }

        private bool IsAjax(ExceptionContext filterContext)
        {
            return filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest";
        }

        /// <summary>
        /// Override onAuthorization filter is use for authorization use request.
        /// </summary>
        /// <param name="filterContext"></param>
        protected override void OnAuthorization(AuthorizationContext filterContext)
        {
            AuthorizationManager authorizationManager = new AuthorizationManager();
            if(!authorizationManager.IsAuthorized(_userSession))
            {
                RedirectToControllers(ControllerHelper.Controller.ACCOUNT, ControllerHelper.Controller.Action.ACCOUNT_LOGIN);
            }
        }

        /// <summary>
        /// Redirect to particular controller and their action.
        /// </summary>
        /// <param name="control">Name of contoller to redirect</param>
        /// <param name="action">Name of action to redirect</param>
private void RedirectToControllers(string control, string action, bool redirectCheck = false)
{
            var routeData = new RouteData();
            routeData.Values["controller"] = control;
            routeData.Values["action"] = action;
            IController controller = null;

            if (control == Constants.Alerts)
            {
                controller = new AlertsController();
            }
            else if (control == Constants.Account)
            {
                controller = new AccountController();
            }

            if (controller != null)
            {
              if (redirectCheck)
              {
                  ((IController)controller).Execute(new RequestContext(new HttpContextWrapper(System.Web.HttpContext.Current), routeData));
                 
              }
              else
                 {
                   string returnUrl = System.Web.HttpContext.Current.Request.Url.AbsolutePath;
                   System.Web.HttpContext.Current.Response.Redirect(string.Format("/{0}/{1}?" + returnUrl, ControllerHelper.Controller.ACCOUNT, ControllerHelper.Controller.Action.ACCOUNT_LOGIN));        
                 }
          }
     }
}


public class AuthenticationManager:BaseManager
{
      [LogAspect]
        /// <summary>
        /// Return boolean value if user authenticated then return true else return false.
        /// </summary>
        /// <returns>Return boolean</returns>
        public bool IsUserAuthenticated()
        {
            if (HttpContext.Current.User.Identity.IsAuthenticated && UserManager.GetUserSession() != null)
            {
                return true;
            }
            return false;
    }
}
ANIL SINGH

Hey! I'm Anil Singh. I author this blog. I'm Active Blogger, Programmer. I love learning new technologies, programming, blogging and participating the forum discussions more...
My Blogs - http://www.code-sample.com and http://www.code-sample.xyz
My Books - Google Amazon and Flipkart Book Store!

You Might Also Like
Post a Comment
www.code-sample.com/. Powered by Blogger.
ASK Questions
SQL Server NodeJs TypeScript JavaScript Angular SQL Server My Book