首先是拦截器

 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. Tether USDT 节点钱包的安装与使用-omni layer

    1 什么是Omni Layer Omni Layer是一种通信协议,它使用比特币区块链实现智能合约,用户货币和分散式点对点交换等功能. Omni Core是基于比特币核心代码库的快速,便携式Omni层 ...

  2. java数组倒序查找值

    java语言里面没有arr[:-2]这种方式取值 只能通过  arr[arr.length-1-x]的方式取值倒数的 x(标示具体的某个值)

  3. 【设计模式】—— 迭代模式Iterator

    前言:[模式总览]——————————by xingoo 模式意图 提供一个方法按顺序遍历一个集合内的元素,而又不需要暴露该对象的内部表示. 应用场景 1 访问一个聚合的对象,而不需要暴露对象的内部表 ...

  4. c++11 noexcept修饰符

    c++11 noexcept修饰符 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> ...

  5. codeforces906 D

    题目链接:http://codeforces.com/contest/906/problem/D 题意: 给你n个数,再给你l~r,求%m 题解: 一开始不会 后来查到了欧拉降幂定理: 然后就会了 这 ...

  6. USACO Section 2.1 Sorting a Three-Valued Sequence 解题报告

    题目 题目描述 给N个整数,每个整数只能是1,2,或3.现在需要对这个整数序列进行从小到大排序,问最少需要进行几次交换.N(1 <= N <= 1000) 样例输入 9 2 2 1 3 3 ...

  7. 洛谷 P1310 表达式的值 解题报告

    P1310 表达式的值 题目描述 对于1 位二进制变量定义两种运算: 运算的优先级是: 先计算括号内的,再计算括号外的. "× "运算优先于"⊕"运算,即计算表 ...

  8. SSO系统的实现

    当一个网站系统比较大型的时候,我们通常采用面向服务的编程,采用分布式的编程.各个子系统共同来实现一个大的系统,这时候登录注册功能的实现也面临着一些问题. 一.WHAT? SSO是什么? sso是单点登 ...

  9. python自带的IDLE如何清屏

    作者:知乎用户 链接:https://www.zhihu.com/question/20917976/answer/32876441 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...

  10. 生成ssh-key for GIthub

    在Github里,如果我们想通过ssh的方式进行身份验证,我们就需要建立ssh-key: 方法一: git GUI,点击help,选择Generate ssh key