예제 #1
0
 /// <summary>
 /// 刷新菜单
 /// </summary>
 public void setMenuCache()
 {
     using (var db = SugarBase.GetIntance())
     {
         var menu_list_all = db.Queryable <SysModule>().Where(m => m.Status).ToList();
         RedisHelper.StringSet("system:SysModule", MD5CryptHelper.Encrypt(JsonConvert.Serialize(menu_list_all)));
     }
 }
예제 #2
0
        public JsonResult RefreshCache()
        {
            var jsonm = new ResultJson();

            try
            {
                using (var db = SugarBase.GetIntance())
                {
                    //刷新配置项
                    //RedisHelper.StringSet(KeyHelper.CACHE_SITE_CONFIG, LoadConfig(Utils.GetXmlMapPath(KeyHelper.FILE_SITE_XML_CONFING)));
                    BasicConfigHelper.setBasicConfig();
                    //刷新菜单
                    setMenuCache();
                    //刷新当前登录权限
                    var usermodel = db.Queryable <SysUser>().Where(m => m.SysUserID == SysUserModel.UserID).First();
                    if (usermodel != null)
                    {
                        var userModel = new AccountToken();
                        userModel.UserID   = usermodel.SysUserID;
                        userModel.UserName = usermodel.SysNickName;

                        var menu_list = db.Queryable <SysModule, SysRoleModule, SysRole, SysUserRole>((sm, srm, sr, sur) => new object[] {
                            JoinType.Left, sm.ID == srm.ModuleID,
                            JoinType.Left, srm.RoleID == sr.RoleID,
                            JoinType.Left, sr.RoleID == sur.RoleID,
                        })
                                        .Where((sm, srm, sr, sur) => sur.UserID == usermodel.SysUserID)
                                        .OrderBy((sm, srm, sr, sur) => sm.Sort, OrderByType.Desc)
                                        .Select(sm => new SysModule {
                            ID = sm.ID, Href = sm.Href, Business = sm.Business, Icon = sm.Icon, Name = sm.Name, Sort = sm.Sort, Type = sm.Type, ParentID = sm.ParentID
                        }).ToList();

                        userModel.MenuList = menu_list;

                        var daySpan = TimeSpan.FromMinutes(30);
                        RedisHelper.StringSet("system:SysToken:" + userModel.UserID, MD5CryptHelper.Encrypt(JsonConvert.Serialize(userModel)), daySpan);
                    }
                }
            }
            catch (Exception ex)
            {
                jsonm.status = 500;
                jsonm.msg    = "清理失败";
                LogProvider.Error("清理缓存", ex.StackTrace, ex.Message);
            }

            return(Json(jsonm));
        }
예제 #3
0
        public List <SysModule> GetSysModule()
        {
            var list = new List <SysModule>();

            try
            {
                var MenuListStr = RedisHelper.StringGet("system:SysModule");
                if (!string.IsNullOrEmpty(MenuListStr))
                {
                    list = JsonConvert.DeserializeJsonToList <SysModule>(MD5CryptHelper.Decrypt(MenuListStr));
                }
            }
            catch (Exception)
            {
                list = new List <SysModule>();
            }
            return(list);
        }
예제 #4
0
        /// <summary>
        /// 获取登录用户信息
        /// </summary>
        /// <returns></returns>
        public AccountToken getToken()
        {
            var model    = new AccountToken();
            var MenuList = new List <SysModule>();

            try
            {
                var auth = HttpContextHelper.Current.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme).Result;
                if (auth.Succeeded)
                {
                    var tokenCookieModel = new AccountToken()
                    {
                        UserID = HttpContextHelper.Current.User.Claims.First().Value
                    };
                    //}
                    //    var tokenCookie = CookieHelper.GetCookie("systoken");
                    //if (!string.IsNullOrEmpty(tokenCookie))
                    //{
                    //var tokenCookieModel = JsonConvert.Deserialize<AccountToken>(MD5CryptHelper.Decrypt(tokenCookie));

                    if (RedisHelper.KeyExistsAsync("system:SysToken:" + tokenCookieModel.UserID).Result)
                    {
                        var SysTokenStr = RedisHelper.StringGetAsync("system:SysToken:" + tokenCookieModel.UserID).Result;
                        if (!string.IsNullOrEmpty(SysTokenStr))
                        {
                            model = JsonConvert.Deserialize <AccountToken>(MD5CryptHelper.Decrypt(SysTokenStr));
                            if (model == null)
                            {
                                model = new AccountToken();
                            }
                        }
                    }
                }
            }
            catch (Exception)
            {
                model = new AccountToken();
            }

            return(model);
        }
예제 #5
0
        /// <summary>
        /// 在资源过滤器之后,绑定模型之后,方法执行之前
        /// </summary>
        /// <param name="context"></param>
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            fcinfo = new filterContextInfo(context);
            var isDefined = false;
            var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;

            if (controllerActionDescriptor != null)
            {
                isDefined = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true)
                            .Any(a => a.GetType().Equals(typeof(MyNoActionFilter)));
            }
            var AreasList = new string[] { "Admin", "SysAdmin" };

            if (isDefined)
            {
                return;
            }
            if (!AreasList.Contains(fcinfo.moduleName))
            {
                return;
            }
            bool result = true;
            var  auth   = HttpContextHelper.Current.AuthenticateAsync(CookieAuthenticationDefaults.AuthenticationScheme).Result;

            if (auth.Succeeded)
            {
                var tokenCookieModel = new AccountToken()
                {
                    UserID = HttpContextHelper.Current.User.Claims.First().Value
                };
                //var tokenCookie = CookieHelper.GetCookie("systoken");
                //if (!string.IsNullOrEmpty(tokenCookie))
                //{
                //var tokenCookieModel = JsonConvert.Deserialize<AccountToken>(MD5CryptHelper.Decrypt(tokenCookie));
                if (tokenCookieModel != null)
                {
                    if (RedisHelper.KeyExistsAsync("system:SysToken:" + tokenCookieModel.UserID).Result)
                    {
                        var SysTokenStr = RedisHelper.StringGetAsync("system:SysToken:" + tokenCookieModel.UserID).Result;
                        if (!string.IsNullOrEmpty(SysTokenStr))
                        {
                            var model = JsonConvert.Deserialize <AccountToken>(MD5CryptHelper.Decrypt(SysTokenStr));
                            if (model != null)
                            {
                                if (model.MenuList != null && (fcinfo.moduleName != "SysAdmin" && fcinfo.controllerName != "Home") || (fcinfo.moduleName == "SysAdmin" && fcinfo.controllerName != "Home"))
                                {
                                    var SysModuleListStr = "";
                                    if (RedisHelper.KeyExistsAsync("system:SysModule").Result)
                                    {
                                        SysModuleListStr = RedisHelper.StringGetAsync("system:SysModule").Result;
                                    }
                                    var  SysModuleList = JsonConvert.DeserializeJsonToList <SysModule>(MD5CryptHelper.Decrypt(SysModuleListStr));
                                    bool isMenu        = false;
                                    foreach (var item in SysModuleList)
                                    {
                                        if (context.HttpContext.Request.Path.Value.Equals(item.Href))
                                        {
                                            isMenu = true;
                                            break;
                                        }
                                    }
                                    if (isMenu)
                                    {
                                        isMenu = false;
                                        foreach (var item in model.MenuList)
                                        {
                                            if (context.HttpContext.Request.Path.Value.Equals(item.Href))
                                            {
                                                isMenu = true;
                                                break;
                                            }
                                        }
                                        if (!isMenu)
                                        {
                                            context.HttpContext.Response.StatusCode = 404;
                                        }
                                    }
                                }

                                result = false;
                            }
                        }
                    }
                }
            }


            if (result)
            {
                //context.Result = new RedirectResult("/SysAdmin/Account/Login");
                //context.Result = new RedirectToRouteResult("SysAdmin/Login", new RouteValueDictionary { });
                context.HttpContext.Response.WriteAsync(
                    " <script type='text/javascript'>window.top.location='/SysAdmin/Account/Login'; </script>");
                context.Result = new EmptyResult();
                return;
            }
            if (context.HttpContext.Response.StatusCode == 404)
            {
                context.Result = new RedirectResult("/error/404");
                return;
            }
            base.OnActionExecuting(context);

            //throw new NotImplementedException();
        }
예제 #6
0
        public JsonResult LoginSubmit(string username, string password, string vercode = "")
        {
            var jsonm = new ResultJson();

            try
            {
                ;
                var sessionid = CookieHelper.GetCookie("sessionid");
                var result    = false;

                if (RedisHelper.KeyExists("imgcode:" + sessionid))
                {
                    var code = RedisHelper.StringGet("imgcode:" + sessionid);

                    if (code.Trim().ToUpper() == vercode.Trim().ToUpper())
                    {
                        result = true;
                    }
                    else
                    {
                        jsonm.status = 500;
                        jsonm.msg    = "验证码错误";
                    }
                }

                if (result)
                {
                    using (var db = SugarBase.GetIntance())
                    {
                        if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
                        {
                            var model = db.Queryable <SysUser>().Where(m => m.Status == 1 && m.SysUserName.Equals(username.Trim()) && m.SysUserPwd.Equals(SHACryptHelper.SHA256Encrypt(password))).First();
                            if (model != null)
                            {
                                var userModel = new AccountToken();
                                userModel.UserID   = model.SysUserID;
                                userModel.UserName = model.SysNickName;

                                var menu_list = db.Queryable <SysModule, SysRoleModule, SysRole, SysUserRole>((sm, srm, sr, sur) => new object[] {
                                    JoinType.Left, sm.ID == srm.ModuleID,
                                    JoinType.Left, srm.RoleID == sr.RoleID,
                                    JoinType.Left, sr.RoleID == sur.RoleID,
                                })
                                                .Where((sm, srm, sr, sur) => sur.UserID == model.SysUserID && sm.Status)
                                                .OrderBy((sm, srm, sr, sur) => sm.Sort, OrderByType.Desc)
                                                .OrderBy((sm, srm, sr, sur) => sm.CreateTime, OrderByType.Asc)
                                                .Select(sm => new SysModule {
                                    ID = sm.ID, Href = sm.Href, Business = sm.Business, Icon = sm.Icon, Name = sm.Name, Sort = sm.Sort, Type = sm.Type, ParentID = sm.ParentID
                                }).ToList();

                                CookieHelper.WriteCookie("systoken", MD5CryptHelper.Encrypt(JsonConvert.Serialize(userModel)), 30);


                                var claims = new[] {
                                    new Claim("UserID", model.SysUserID),
                                    new Claim("UserName", model.SysNickName)
                                };
                                var             claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
                                ClaimsPrincipal user           = new ClaimsPrincipal(claimsIdentity);

                                //var identity = new ClaimsIdentity();
                                //identity.AddClaim(new Claim(ClaimTypes.Sid, userModel.UserID));
                                //identity.AddClaim(new Claim(ClaimTypes.Name, userModel.UserName));
                                HttpContextHelper.Current.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, user);



                                userModel.MenuList = menu_list;


                                var daySpan = TimeSpan.FromMinutes(30);
                                RedisHelper.StringSet("system:SysToken:" + userModel.UserID, MD5CryptHelper.Encrypt(JsonConvert.Serialize(userModel)), daySpan);
                                setMenuCache();

                                SetSysLog("【系统登录】" + userModel.UserName, 1, 1);
                                //HttpContext.Session.SetString("SysToken", MD5CryptHelper.Encrypt(JsonConvert.Serialize(userModel)));
                                jsonm.status = 200;
                                jsonm.msg    = "登录成功";
                            }
                            else
                            {
                                jsonm.status = 500;
                                jsonm.msg    = "账号或密码错误";
                            }
                        }
                        else
                        {
                            jsonm.status = 500;
                            jsonm.msg    = "请填写账号信息";
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                jsonm.status = 500;
                jsonm.msg    = "登录失败";
                LogProvider.Error("登录", ex.StackTrace, ex.Message);
            }
            return(Json(jsonm));
        }