Asp.net mvc 权限过滤和单点登录(禁止重复登录)
编程学习 2021-07-04 22:41www.dzhlxh.cn编程入门
这篇文章主要介绍了Asp.net mvc 权限过滤和单点登录(禁止重复登录)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
1.权限控制使用controller和 action来实现,权限方式有很多种,最近开发项目使用控制控制器方式实现代码如下
/// <summary> /// 用户权限控制 /// </summary> public class UserAuthorize : AuthorizeAttribute { /// <summary> /// 授权失败时呈现的视图 /// </summary> public string AuthorizationFailView { get; set; } /// <summary> /// 请求授权时执行 /// </summary> /// <param name="filterContext">上下文</param> public override void OnAuthorization(AuthorizationContext filterContext) { // 获取url请求里的 controller 和 action string controllerName = filterContext.RouteData.Values["controller"].ToString(); string actionName = filterContext.RouteData.Values["action"].ToString(); // 获取用户信息 UserLoginBaseInfo _userLoginInfo = filterContext.HttpContext.Session[Property.UerLoginSession] as UserLoginBaseInfo; //根据请求过来的controller和action去查询可以被哪些角色操作: 这是查询数据库 roleid使用 1,2,3,4格式 RoleWithControllerAction roleWithControllerAction = SampleData.roleWithControllerAndAction.FirstOrDefault(r => r.ControllerName.ToLower() == controllerName.ToLower() && r.ActionName.ToLower() == actionName.ToLower() && r.RoleIds.contails("3")); // 有值处理 if (roleWithControllerAction != null) { //有权限操作当前控制器和Action的角色id this.Roles = roleWithControllerAction.RoleIds; } else { //请求失败输出空结果 filterContext.Result = new EmptyResult(); //打出提示文字 HttpContext.Current.Response.Write("对不起,你没有权限操作!"); } base.OnAuthorization(filterContext); } /// <summary> /// 自定义授权检查(返回False则授权失败) /// </summary> protected override bool AuthorizeCore(HttpContextBase httpContext) { //if (httpContext.User.Identity.IsAuthenticated) //{ // string userName = httpContext.User.Identity.Name; //当前登录用户的用户名 // User user = SampleData.users.Find(u => u.UserName == userName); //当前登录用户对象 // if (user != null) // { // Role role = SampleData.roles.Find(r => r.Id == user.RoleId); //当前登录用户的角色 // foreach (string roleid in Roles.Split(',')) // { // if (role.Id.ToString() == roleid) // return true; // } // return false; // } // else // return false; /