首先是拦截器

 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. 如何取消mysql的密码?

    有两种方法: 1.mysql命令 SET PASSWORD FOR root@localhost=PASSWORD(''); 2.运行  mysqladmin 命令 mysqladmin -u roo ...

  2. JVM学习笔记(四):类加载机制

    虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 一.类加载的时机1. 类从被加载到虚拟机内存 ...

  3. BZOJ5465 APIO2018选圆圈(KD-Tree+堆)

    考虑乱搞,用矩形框圆放KD-Tree上,如果当前删除的圆和矩形有交就递归下去删.为防止被卡,将坐标系旋转一定角度即可.注意eps稍微设大一点,最好开上long double. #include< ...

  4. 【刷题】BZOJ 3522 [Poi2014]Hotel

    Description 有一个树形结构的宾馆,n个房间,n-1条无向边,每条边的长度相同,任意两个房间可以相互到达.吉丽要给他的三个妹子各开(一个)房(间).三个妹子住的房间要互不相同(否则要打起来了 ...

  5. dp乱写3:环形区间dp(数字游戏)

    状态: fmax[i,j]//表示前i个数分成j个部分的最大值 fmin[i,j]//表示前i个数分成j个部分的最小值 边界:fmax[i,1]:=(sum[i] mod 10+10) mod 10( ...

  6. vue axios的使用

    详细可以看:https://www.kancloud.cn/yunye/axios/234845 这里介绍日常使用得比较多的get和post: import axios from 'axios' // ...

  7. logstash收集ngx日志

    if [type] =~ "ngx-" { #去掉重复的行 mutate { add_field => {"line_message" => &qu ...

  8. ORACLE递归查询(适用于ID,PARENTID结构数据表)

    Oracle 树操作(select…start with…connect by…prior) oracle树查询的最重要的就是select…start with…connect by…prior语法了 ...

  9. bzoj千题计划238:bzoj3668: [Noi2014]起床困难综合症

    http://www.lydsy.com/JudgeOnline/problem.php?id=3668 这..一位一位的来就好了呀 #include<cstdio> #include&l ...

  10. 何凯文每日一句打卡||DAY14