首先是拦截器

 public class AuthLoginAttribute : ActionFilterAttribute
{
public bool IsLogin = true;
/// <summary>
/// 登录状态
/// </summary>
public AuthLoginAttribute()
{
IsLogin = true;
} /// <summary>
/// 登录状态
/// </summary>
/// <param name="islogin"></param>
public AuthLoginAttribute(bool islogin)
{
IsLogin = islogin;
} /// <summary>
/// 判断登录状态
/// </summary>
/// <param name="filterContext"></param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//排除例外
if (!IsLogin)
return;
string loginUrl = "/Home/Login";
//上一次请求地址
string refUrl = filterContext.HttpContext.Request.UrlReferrer != null ? filterContext.HttpContext.Request.UrlReferrer.ToString() : loginUrl;
//控制器
string controlName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.ToLower();
//方法
string actionName = filterContext.ActionDescriptor.ActionName.ToLower();
//子方法
bool isChildAction = filterContext.IsChildAction;
//是否为异步请求
bool isAjax = filterContext.HttpContext.Request.IsAjaxRequest();
UserBaseController controller = filterContext.Controller as UserBaseController;
if (!controller.IsLogin)
{
//异步处理
if (isAjax)
{
//这里可以添加一些过滤登录的异步操作如:公共上传图片
JsonResult jr = new JsonResult();
jr.Data = new BaseResponse<object>
{
ErrorCode = ,
Message = "请先登录!",
Data = "need login"
};
filterContext.Result = jr;
}
else if (filterContext.IsChildAction)
{
filterContext.Result = new ContentResult() { Content = "请先登录!" };
}
else
{
string pq = null;
if (filterContext.HttpContext.Request.Url != null)
{
pq = filterContext.HttpContext.Request.Url.PathAndQuery;
}
filterContext.Result = new RedirectResult(loginUrl);
}
}
else
{
//权限判断
var userAuthority = OperSession.UserAuthority;
string noAuth = "/Home/NoAuthorityUser?back=" + HttpUtility.UrlEncode(refUrl);
if (userAuthority == null || userAuthority.Count == )
{
filterContext.Result = new RedirectResult(noAuth);
}
else
{
string route = "/" + controlName + "/" + actionName;
//排除首页登陆,异步
if (route == "/home/index" || route == "/home/login" || isAjax || route == "/admin/userprofile" || route == "/admin/index") return;
//进行检测 是否有可访问的权限
if (!userAuthority.Exists(a => a.Action?.ToLower() == actionName && a.Controller?.ToLower() == controlName))
{
filterContext.Result = new RedirectResult(noAuth);
} }
}
}
}

登陆验证代码

  /// <summary>
/// 用户登录
/// </summary>
/// <param name="uName"></param>
/// <param name="uPwd"></param>
/// <param name="uIP">客户端IP</param>
/// <param name="sessionID">sessionID</param>
/// <param name="isMD5">是否MD5加密</param>
/// <returns></returns>
public LoginResult ValidateLogin(string uName, string uPwd, string uIP, string sessionID, bool isMD5 = true)
{
string pwdMd5 = uPwd;
if (isMD5)
{
pwdMd5 = uPwd.Crypt_MD5_Encode();
}
VUser loginUser = GetUser(uName, pwdMd5);
if (loginUser == null)
{
return new LoginResult()
{
Message = "账号或密码错误。",
ResultType =
};
}
if (!loginUser.IsEnable)
{
return new LoginResult()
{
Message = "账号已禁用,请联系管理员。",
ResultType =
};
}
//用户权限初始化
var urCatalogue = loginUser.Permissions.IsNullOrEmpty()?new List<VPermission>():PermissionBll.GetIntence().GetUserCatalog(loginUser.Permissions);
if (urCatalogue.Count > )
{
//IList<Dictionary<int, IEnumerable<SysRoleExtensionInfo>>> menuData = new IList<Dictionary<int, IEnumerable<SysRoleExtensionInfo>>>();
//var pMenu = urCatalogue.Where(a => a.ParentID == 0);
//foreach (var pItem in pMenu)
//{
// var cMenu = urCatalogue.Where(a => a.ParentID == pItem.ID);
// foreach (var cItem in cMenu)
// {
// var ccMenu = urCatalogue.Where(a => a.ParentID == cItem.ID);
// foreach (var ccItem in ccMenu)
// {
// menuData.Add(pItem.CatalogueID, urCatalogue.Where(a => a.ParentID == pItem.ID));
// }
// }
//}
loginUser.ProjPermissions = loginUser.DataPermissions.IsNullOrEmpty()?new List<DataPermission>():loginUser.DataPermissions.ToObjectFromJson<List<DataPermission>>();
//权限记录
OperSession.UserAuthority = urCatalogue.ToList();
//记录登录用户信息
loginUser.LoginSessionID = sessionID;
loginUser.LoginIP = uIP;
Helper.OperSession.UserInfo = loginUser;
return new LoginResult()
{
Message = "登录成功。",
ResultType =
};
}
return new LoginResult()
{
Message = "该登录用户没有权限。",
ResultType =
};
}
public class OperSession
{
/// <summary>
/// 后台操作员登录信息
/// </summary>
public static VUser UserInfo
{
get
{
if (HttpContext.Current.Session[ConstVar.UserSessionKey] != null)
{
return HttpContext.Current.Session[ConstVar.UserSessionKey] as VUser;
}
return null;
}
set
{
HttpContext.Current.Session[ConstVar.UserSessionKey] = value;
}
} /// <summary>
/// 用户权限
/// </summary>
public static List<VPermission> UserAuthority
{
get
{
if (HttpContext.Current.Session[ConstVar.UserAuthorityKey] != null)
{
return HttpContext.Current.Session[ConstVar.UserAuthorityKey] as List<VPermission>;
}
return null;
}
set
{
HttpContext.Current.Session[ConstVar.UserAuthorityKey] = value;
}
}
}
 public class BaseResponse
{
public bool Success { get; set; } public int ErrorCode { get; set; } public string Message { get; set; } public object Data { get; set; }
}

.net MVC 登陆模块后台代码的更多相关文章

  1. mvc 登陆界面+后台代码

    上代码 前端+js(懒得分文件了) @{ ViewBag.Title = "MVC权限系统架构学习-登录"; Layout = "/Views/Shared/_LoadJ ...

  2. ASP.NET -- WebForm -- Cookie的使用 应用程序权限设计 权限设计文章汇总 asp.net后台管理系统-登陆模块-是否自动登陆 C# 读写文件摘要

    ASP.NET -- WebForm -- Cookie的使用 ASP.NET -- WebForm --  Cookie的使用 Cookie是存在浏览器内存或磁盘上. 1. Test3.aspx文件 ...

  3. php截取后台登陆密码的代码

    php截取后台登陆密码的代码,很多时候黑客留了这样的代码,大家一定要注意下if($_POST[loginsubmit]!=){ //判断是否点了登陆按钮 $sb=user:.$_POST[userna ...

  4. ASP.NET MVC搭建项目后台UI框架—2、菜单特效

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  5. Spring py登陆模块(包含 记录登陆时间,记录ip,增加积分)

    嘛基于最近的复习准备写个关于spring登陆模块的小程序 虽然小但是五脏俱全呐 话不多说让我来介绍一下今天的登陆程序. 这些是 基于Spring JDBC 的持久层实现 基于Spring 声明事物的业 ...

  6. 微信小程序 人脸识别登陆模块

    微信小程序---人脸识别登陆的实现 关键词:微信小程序 人脸识别 百度云接口 前言 这是一篇关于一个原创微信小程序开发过程的原创文章.涉及到的核心技术是微信小程序开发方法和百度云人脸识别接口.小程序的 ...

  7. 基于AOP的MVC拦截异常让代码更优美

    与asp.net 打交道很多年,如今天微软的优秀框架越来越多,其中微软在基于mvc的思想架构,也推出了自己的一套asp.net mvc 框架,如果你亲身体验过它,会情不自禁的说‘漂亮’.回过头来,‘漂 ...

  8. ASP.NET MVC搭建项目后台UI框架—1、后台主框架

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  9. ASP.NET MVC搭建项目后台UI框架—11、自动加载下拉框查询

    ASP.NET MVC搭建项目后台UI框架—1.后台主框架 需求:在查询记录的时候,输入第一个字,就自动把以这个字开头的相关记录查找出来,输入2个字就过滤以这两个子开头的记录,依次类推. 突然要用到这 ...

随机推荐

  1. CUDA ---- device管理

    device管理 NVIDIA提供了集中凡是来查询和管理GPU device,掌握GPU信息查询很重要,因为这可以帮助你设置kernel的执行配置. 本博文将主要介绍下面两方面内容: CUDA run ...

  2. BZOJ5462 APIO2018新家(线段树+堆)

    一个显然的做法是二分答案后转化为查询区间颜色数,可持久化线段树记录每个位置上一个同色位置,离线后set+树状数组套线段树维护.这样是三个log的. 注意到我们要知道的其实只是是否所有颜色都在该区间出现 ...

  3. mininet invalid literal for int() with base 10: 'cpu.cfs_period_us:'

    问题产生原因:内核编译时没有加入 CONFIG_CFS_BANDWIDTH 选项 http://www.haifux.org/lectures/299/netLec7.pdf https://mail ...

  4. nginx mp3

    location /mp3 { alias "d:/mp3"; default_type audio/mpeg; autoindex on; }

  5. 学习Spring Boot:(十)使用hibernate validation完成数据后端校验

    前言 后台数据的校验也是开发中比较注重的一点,用来校验数据的正确性,以免一些非法的数据破坏系统,或者进入数据库,造成数据污染,由于数据检验可能应用到很多层面,所以系统对数据校验要求比较严格且追求可变性 ...

  6. 【bzoj1030】 JSOI2007—文本生成器

    http://www.lydsy.com/JudgeOnline/problem.php?id=1030 (题目链接) 题意 给出$n$个单词,问有多少个长度为$m$的文本中至少包含一个单词. Sol ...

  7. linux c 编程 ------ 串口编程

    http://blog.csdn.net/specialshoot/article/details/50707965 对于串口的打开操作,必须使用O_NOCTTY参数.O_NOCTTY如果路径名指向终 ...

  8. python命名空间与闭包函数详解

    python命名空间与闭包函数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客主要介绍的知识点如下: 1>.三元运算 2>.命名空间 3>.globa ...

  9. ubuntu 发送邮件

    1. 使用下面命令安装 sudo apt-get install heirloom-mailx 2. 编辑配置信息 vim /etc/nail.rc //此时如果打印没有权限则使用sudo命令,并且在 ...

  10. 谷歌AMP和百度MIP是什么鬼?

    首先我们来看定义: 谷歌AMP(Accelerated Mobile Pages,加速移动页面)是Google推出的一种为静态内容构建 web 页面,提供可靠和快速的渲染,加快页面加载的时间,特别是在 ...