mdtaslim
5/3/2015 - 2:24 PM

MVC 4 Session Attribute

MVC 4 Session Attribute

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using WebPortal.ViewModels.SystemUser;
using WebPortal.Helpers;
using WebPortal.Models;

namespace WebPortal.Helpers
{
    public class SessionAttribute : ActionFilterAttribute
    {

        //
        // GET: /SessionAttribute/

        string actionName = System.Web.HttpContext.Current.Request.RequestContext.RouteData.GetRequiredString("action").ToLower();
        string controllerName = System.Web.HttpContext.Current.Request.RequestContext.RouteData.GetRequiredString("controller").ToLower();
        //string actionId = System.Web.HttpContext.Current.Request.RequestContext.RouteData.GetRequiredString("id");
        SystemUser sysUser = new SystemUser();
        List<UserPermission> uPer = new List<UserPermission>();

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (filterContext.HttpContext.Session["SystemUser"] == null)
            {
                var values = new
                {
                    controller = "User",
                    action = "Index",
                    returnUrl = filterContext.HttpContext.Request.Url
                };
                var result = new RedirectToRouteResult("Default", new RouteValueDictionary(values));

                filterContext.Result = result;
            }
            else
            {
                sysUser = HttpContext.Current.Session["SystemUser"] as SystemUser;
                uPer = HttpContext.Current.Session["lstUserPermissions"] as List<UserPermission>;

                if (sysUser.ruleType == true && actionName == "Index" && controllerName == "User")
                {
                    var values = new
                    {
                        controller = "Dashboard",
                        action = "Index",
                        //  returnUrl = filterContext.HttpContext.Request.Url
                    };
                    var result = new RedirectToRouteResult("Default", new RouteValueDictionary(values));

                    filterContext.Result = result;
                }
                else if (actionName == "Index" && controllerName == "User")
                {
                    var values = new
                    {
                        controller = "profile",
                        action = "details",
                        id = sysUser.profileId
                        //  returnUrl = filterContext.HttpContext.Request.Url
                    };
                    var result = new RedirectToRouteResult("Default", new RouteValueDictionary(values));

                    filterContext.Result = result;
                }
                else
                {
                    var vPer = uPer.Find(f => f.C_controllerName.ToLower() == controllerName && f.C_actionName.ToLower() == actionName);

                    if (sysUser.ruleType != vPer.C_isAdmin)
                    {
                        var values = new
                        {
                            controller = "profile",
                            action = "details",
                            id = sysUser.profileId
                            // returnUrl = filterContext.HttpContext.Request.Url
                        };
                        var result = new RedirectToRouteResult("Default", new RouteValueDictionary(values));

                        filterContext.Result = result;
                    }
                }
            }
        }
    }
}