YbRapidSolution.Mvc判断不同用户登录不同页面

AccountController.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Text.RegularExpressions;

using System.Web;

using System.Web.Mvc;

using System.Web.Script.Serialization;

using System.Web.Security;

using Newtonsoft.Json;

using Yb.Data.Provider;

using Yb.PermissionModel;

using Yb.PermissionModel.Provider;

using YbRapidSolution.Data;

using YbRapidSolution.Entities;

using YbRapidSolution.Mvc.Models;

using YbRapidSolution.Presenter.Compression;

using YbRapidSolution.Services;



namespace YbRapidSolution.Mvc.Controllers.Security

{

    [MvcCompression]

    public class AccountController : Controller

    {

        private readonly ICustomerService _service;

        public AccountController(ICustomerService service)

        {

            _service = service;

        }



        #region 后台登录与注销

        //

        // GET: /Logon/

        [AllowAnonymous]

        public ActionResult Login()

        {

            return View(new LoginModel());

        }



        [AllowAnonymous]

        [AcceptVerbs(HttpVerbs.Post)]

        public ActionResult Login(LoginModel model)

        {

            if (!ModelState.IsValid)

            {

                if (string.IsNullOrWhiteSpace(model.UserName))

                    ViewBag.EasyUIMessage = "请输入用户名";

                else if (string.IsNullOrWhiteSpace(model.Password))

                    ViewBag.EasyUIMessage = "请输入登录密码";

                else

                {

                    AuditLogApi.Info(string.Format("用户‘{0}’登录失败,IP地址:{1}", model.UserName, GetIP4Address()));

                    ViewBag.EasyUIMessage = "验证失败,必须输入用户名和密码";

                }

                return View(model);

            }

            try

            {

                var result = PersonApi.ValidatePerson(model.UserName, model.Password);

                if (result!=null)

                {

                    var psm = OrgApi.FindPersonMembersBy(result.ID).Where(c=>c.Status>0).Select(c=>c.Parent);

                    var authCookie = FormsAuthentication.GetAuthCookie(model.UserName, model.RememberMe);

                    var ticket = FormsAuthentication.Decrypt(authCookie.Value);

                    var userModel = new IdentifyModel

                        {

                            ID = result.ID,

                            UserName = result.UserName,

                            DisplayName = result.DisplayName,

                            Code = result.Code,

                            Email = result.Email,

                            IDCard = result.IDCard,

                            PasswordTimeLimit = result.PasswordTimeLimit,

                            MainOrgID = result.MainOrgID,

                            Lang = result.Lang,

                            Theme = result.Theme

                        };

                    userModel.SetOrgIds(psm);



                    var userData = JsonConvert.SerializeObject(userModel);

                    

                    //var userData = "1";

                    //var userData = SerializerUtility.StringSerialize(userModel);

                    var newTicket = new FormsAuthenticationTicket(

                        ticket.Version, ticket.Name, ticket.IssueDate,

                        ticket.Expiration, ticket.IsPersistent, userData);

                    // 将新的Ticke转变为Cookie值,然后添加到Cookies集合中

                    authCookie.Value = FormsAuthentication.Encrypt(newTicket);

                    this.HttpContext.Response.Cookies.Add(authCookie);



                    AuditLogApi.Info(string.Format("用户‘{0}’登录成功,IP地址:{1}", model.UserName, GetIP4Address()));



                    // 获得 来到登录页之前的页面,即url中return参数的值

                    string url = FormsAuthentication.GetRedirectUrl(model.UserName, model.RememberMe);

                    return Redirect(url);

                }

                ViewBag.EasyUIMessage = "错误的用户名或密码";

                return View(model);

            }

            catch (Exception er)

            {

                ViewBag.EasyUIMessage = er.Message;

                return View(model);

            }

        }



        [AllowAnonymous]

        public ActionResult SignOut()

        {

            FormsAuthentication.SignOut();

            return Redirect("~/Account/Login");

        }



        #endregion



        #region 前台登录、注销方法



        [AllowAnonymous]

        public ActionResult Logon()

        {

            var model = new LoginModel();

            var cookies = this.Request.Cookies;

            var cookie=cookies.Get("Customer");

            if (cookie!=null && cookie.HasKeys)

            {

                model.UserName= cookie["tel"];

            }

            return View(model);

        }

        

        [AllowAnonymous]

        [AcceptVerbs(HttpVerbs.Post)]

        public ActionResult Logon(LoginModel model)

        {

            var tel = "";

            var pwd = "";

            if (!ModelState.IsValid)

            {

                if (string.IsNullOrWhiteSpace(model.UserName))

                {

                    ViewBag.EasyUIMessage = "请输入电话号码";

                    return View("Logon", model);

                }

                if (string.IsNullOrWhiteSpace(model.Password))

                {

                    ViewBag.EasyUIMessage = "请输入验证码";

                    return View("Logon", model);

                }

            }

            tel = model.UserName.Trim();



            if (!IsMobilePhone(tel))

            {

                ViewBag.EasyUIMessage = "手机号码格式不正确";

                return View("Logon", model);

            }

            pwd = model.Password.Trim();

            if (!IsValidCode(pwd))

            {

                ViewBag.EasyUIMessage = "验证码格式不对,验证码为4为数字";

                return View("Logon", model);

            }



            try

            {

                var user = _service.GetByTel(model.UserName);

                if (user != null)

                {

                    if (user.DeleteStatus == (int)DeleteStatus.Deleted)

                    {

                        ViewBag.EasyUIMessage = "当前用户已被禁用,请联系管理员";

                        return View("Logon", model);

                    }

                    

                    if (user.SendDate < DateTime.Now.AddMinutes(-30))

                    {

                        ViewBag.EasyUIMessage = "验证码已过期,请重新获取验证码.";

                        return View("Logon", model);

                    }

                    

                    if (user.ValidationCode!=model.Password)

                    {

                        ViewBag.EasyUIMessage = "验证码错误,请确认后重新输入.";

                        return View("Logon", model);

                    }

             

                    var authCookie = FormsAuthentication.GetAuthCookie(model.UserName, true);

                    var ticket = FormsAuthentication.Decrypt(authCookie.Value);

                    var userModel = new IdentifyModel

                    {

                        ID = user.Id,

                        UserName = model.UserName

                    };



                    var userData = JsonConvert.SerializeObject(userModel);

                    //var userData = "1";

                    //var userData = SerializerUtility.StringSerialize(userModel);

                    var newTicket = new FormsAuthenticationTicket(

                        ticket.Version, ticket.Name, ticket.IssueDate,

                        ticket.Expiration.AddYears(30), true, userData);

                    // 将新的Ticke转变为Cookie值,然后添加到Cookies集合中

                    authCookie.Value = FormsAuthentication.Encrypt(newTicket);

                    authCookie.Expires = ticket.Expiration.AddYears(30);

                    this.HttpContext.Response.Cookies.Add(authCookie);

              

                    var cookie = new HttpCookie("Customer");

                    cookie["tel"] = model.UserName;

                    cookie.Expires = DateTime.Now.AddYears(30);

                    this.Response.Cookies.Add(cookie);



                    AuditLogApi.Info(string.Format("用户‘{0}’登录成功,IP地址:{1}", model.UserName, GetIP4Address()));



                    var url = "";

                    if (this.TempData.ContainsKey("Url"))

                    {

                        var value = this.TempData["Url"];

                        if (value != null)

                        {

                            url = value.ToString();

                        }

                    }

                    else

                    {

                        url = FormsAuthentication.GetRedirectUrl(model.UserName, model.RememberMe);

                    }

                    if (string.IsNullOrWhiteSpace(url) || url.ToLower().Contains("/admin"))

                    {

                        return RedirectToAction("Index", "Home");

                    }

                    return Redirect(url);

                }

                ViewBag.EasyUIMessage = "请首先获取验证码";

                return View("Logon", model);

            }

            catch (Exception er)

            {

                ViewBag.EasyUIMessage = er.Message;

                return View("Logon", model);

            }

        }

        [AllowAnonymous]

        public ActionResult SignOutHome()

        {

            return Redirect("/Account/Logon");

        }



        #endregion



        #region Help 方法



        public static bool IsMobilePhone(string input)

        {

            Regex regex = new Regex("^1\\d{10}$");

            return regex.IsMatch(input);

        }

        public static bool IsValidCode(string input)

        {

            Regex regex = new Regex("\\d{4}");

            return regex.IsMatch(input);

        }

        public static string GetIP4Address()

        {

            string IP4Address = String.Empty;



            foreach (IPAddress IPA in Dns.GetHostAddresses(System.Web.HttpContext.Current.Request.UserHostAddress))

            {

                if (IPA.AddressFamily.ToString() == "InterNetwork")

                {

                    IP4Address = IPA.ToString();

                    break;

                }

            }



            if (IP4Address != String.Empty)

            {

                return IP4Address;

            }



            foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))

            {

                if (IPA.AddressFamily.ToString() == "InterNetwork")

                {

                    IP4Address = IPA.ToString();

                    break;

                }

            }

            return IP4Address;

        }



        #endregion

    }

}

 

你可能感兴趣的:(mvc)