예제 #1
0
        void Application_AuthenticateRequest()
        {
            var myCookie     = FormsAuthentication.FormsCookieName;
            var myAuthCookie = Context.Request.Cookies[myCookie];

            if (null == myAuthCookie)
            {
                return;
            }

            FormsAuthenticationTicket myAuthTicket;

            try
            {
                myAuthTicket = FormsAuthentication.Decrypt(myAuthCookie.Value);
            }
            catch (Exception ex)
            {
                UtilTools.LogE(ex.StackTrace, ex.Source, ex.GetBaseException().Message);
                return;
            }

            if (null == myAuthTicket)
            {
                return;
            }

            var userDataSplit = myAuthTicket.UserData.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);

            if (!userDataSplit.Any() || userDataSplit.Length != 3)
            {
                return;
            }

            if (!userDataSplit[0].Trim().IsNumeric() || !userDataSplit[1].Trim().IsNumeric())
            {
                return;
            }

            var roles = userDataSplit[2].Split(new[] { ';', ',' }, StringSplitOptions.RemoveEmptyEntries);

            if (!roles.Any())
            {
                return;
            }

            var        id        = new FormsIdentity(myAuthTicket);
            IPrincipal principal = new PlugPortalPrincipal(id, roles);

            Context.User = principal;
        }
예제 #2
0
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
            {
                filterContext.Controller.ViewBag.UserAuthInfo = null;
                base.OnActionExecuting(filterContext);
                return;
            }

            var frmId  = (FormsIdentity)filterContext.HttpContext.User.Identity;
            var usData = frmId.Ticket.UserData;

            if (string.IsNullOrEmpty(usData))
            {
                filterContext.Controller.ViewBag.UserAuthInfo = null;
                base.OnActionExecuting(filterContext);
                return;
            }

            var userDataSplit = usData.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);

            if (!userDataSplit.Any() || userDataSplit.Length != 3)
            {
                filterContext.Controller.ViewBag.UserAuthInfo = null;
                base.OnActionExecuting(filterContext);
                return;
            }

            if (!userDataSplit[0].IsNumeric() || !userDataSplit[1].IsNumeric())
            {
                filterContext.Controller.ViewBag.UserAuthInfo = null;
                base.OnActionExecuting(filterContext);
                return;
            }

            var roles = userDataSplit[2].Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);

            var identity  = new FormsIdentity(frmId.Ticket);
            var principal = new PlugPortalPrincipal(identity, roles);

            var userData = new UserData
            {
                UserId   = int.Parse(userDataSplit[0].Trim()),
                Username = frmId.Name,
                Email    = frmId.Name,
                Roles    = roles,
                UserType = (UserType)int.Parse(userDataSplit[1].Trim()),
            };

            if (!MvcApplication.SetUserData(userData))
            {
                filterContext.Controller.ViewBag.UserAuthInfo = null;
                base.OnActionExecuting(filterContext);
                return;
            }


            filterContext.Controller.ViewBag.UserAuthInfo = userData;
            filterContext.HttpContext.User = principal;
            base.OnActionExecuting(filterContext);
        }