1、新建一个类,设置角色:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Mvc;
using System.Web.Security; namespace InfoData.Enum
{
public enum ERoles
{
Admin,
User
} public class ERolesHelper
{
public static string GetValue(ERoles role)
{
return role == ERoles.Admin ? "Admin" : "User";
}
} public class ERolesAttribute : AuthorizeAttribute
{
//重载此方法,模拟自定义的角色授权机制
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
//获得当前的验证cookie
HttpCookie authCookie = httpContext.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie == null || authCookie.Value == "")
{
return false;
}
else
{
FormsAuthenticationTicket authTicket;
try
{
//对当前的cookie进行解密
authTicket = FormsAuthentication.Decrypt(authCookie.Value);
if (authTicket != null)
{
//和存入时的分隔符有关系,此处存入时的分隔符为逗号
var userRoles = authTicket.UserData.Split(new[] { ',' }).ToList();
var roles = Roles.Split(new[] { ',' }).ToList();
return roles.Any(x => userRoles.Contains(x));
}
else
{
return false;
}
}
catch
{
return false;
}
}
} //没授权时跳到页面
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectResult("/UserManage/Admin/Login"); ;
}
}
}

2、登录代码:

 DateTime now = DateTime.Now;
string roles = ERolesHelper.GetValue(ERoles.Admin);
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(, userName, now, now.AddMinutes(), false, roles);//写入用户角色
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);//对authTicket进行加密
SessionCookieHelper.SetCookie(FormsAuthentication.FormsCookieName, encryptedTicket, now.AddMinutes());

3、退出代码:

            FormsAuthentication.SignOut();
SessionCookieHelper.ClearCookie(this.AdminCookieName);

4、Action或Controller添加:[ERolesAttribute(Roles = "Admin")]

如果允许匿名访问,添加:[AllowAnonymous]

[ERolesAttribute(Roles = "Admin")]
public class AdminController : Controller
{
[AllowAnonymous]
public ActionResult Login()
{
ViewBag.aaa = EncryptionHelper.DesEncrypt("xiaoming");
Dataprovider.Sys_AdminDAO.Logout();
return View();
} [AllowAnonymous]
[HttpPost]
public ActionResult Login(Admin_Login info)
{
if (ModelState.IsValid)
{
Dataprovider.Sys_AdminDAO.Login(info.UserName, info.Password);
}
return View();
} public ActionResult AdminList()
{
return View();
}
}

MVC-登录并设置角色的更多相关文章

  1. 给Asp.net MVC Forms 验证设置角色访问控制

    当我们使用Asp.net MVC Forms方式验证用户, 然后设置Controller 或 Action 的 Authorize属性时, 默认情况下只有Users属性可以设置(这里的Users通常是 ...

  2. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  3. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  4. 设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用

    设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo ...

  5. uniapp根据登录用户的角色动态的改变tabBar的数量和内容

    此文章借鉴于https://blog.csdn.net/fuyuumiai/article/details/109746357,在此基础上修改小部分内容,适用于我这种uniapp小白 介绍: 现在我们 ...

  6. MVC中如何设置路由指定默认页

    MVC中怎么设置默认页,在webform中 只要右键设置起始页就可以,但MVC中却没有这个功能,其实MVC更简单 如下: Login是控制器,Index 是动作 在全局Global.asax中改动下即 ...

  7. Spring mvc登录拦截器

    自己实现的第一个Spring mvc登录拦截器 题目要求:拒绝未登录用户进入系统,只要发现用户未登录,则将用户请求转发到/login.do要求用户登录 实现步骤: 1.在spring的配置文件中添加登 ...

  8. MVC的路由设置【转】

    转,MVC的路由设置. 后端获取路由里面action的参数,函数需要设置相同的参数名称才行. routes.MapRoute( "Default", "{controll ...

  9. OA之为用户设置角色和为用户设置权限

    1.为用户设置角色 { Layout = null; } @using OA.Model <!DOCTYPE html> <html> <head> <met ...

随机推荐

  1. Java 如何连接 SQL 2008 R2

    前提: 1. 复制sqljdbc_auth.dll到C:\Windows\System32这个路径下. 2. 添加sqljdbc4.jar到Libraries里面. 代码示例: import java ...

  2. 手动开启tomacat服务器

    四.配置Tomcat环境变量 1,新建变量名(关键,你的tomacat安装目录):CATALINA_BASE,变量值:E:\apache-tomcat-6.0.37 2,新建变量名(关键,你的toma ...

  3. web前端开发前景怎么样?

    对于web前端开发,对现今前端的发展,中国的发展还很落后,中国没有Jquery,没有Node.js,其中最主要的一点是,中国的前端比较封锁,大家都没有分享的觉悟.回头看看,那些发展比较快的行业.软件, ...

  4. C语言结构体的引入

    #include <stdio.h> struct student{ int ID; ]; int age; }; int main(){ //赋值: , }; ,.name=}; , , ...

  5. AAPT: libpng error: Not a PNG file 问题解决

    导入项目到Android Studio的时候,Gradle Build失败了,报的错是 FAILURE: Build failed with an exception. Execution faile ...

  6. [转]Best way to sort a DropDownList in MVC3 / Razor using helper method

    本文转自:http://stackoverflow.com/questions/7223185/best-way-to-sort-a-dropdownlist-in-mvc3-razor-using- ...

  7. 【转】必需知道的 SharePoint 权限 Tips

    SharePoint Tips about Permissions: What you need to know         I have been writing tips about Shar ...

  8. web app开发中 iPhone、iPad默认按钮样式问题

    webapp开发过程中,用html5+css3很方便,而且可以很方便的编译到Android ios等不同平台,但是ios需要单独处理一下,不然会出现一些想象不到的问题.下面就介绍一下各种问题的解决方法 ...

  9. web开发常用图片格式

    web开发常用图片格式有:gif   jpg/jpeg    png gif:图片压缩率高,可以显示动画,但是只能显示256色,可能造成颜色丢失. jpg:图片压缩率高(有损压缩),可以用小文件来显示 ...

  10. ios开发之UIView的frame、bounds跟center属性的区别(附图)

    博文暂时想到什么写什么,不顺理成章,不顺章成篇. 先看几个概念 坐标点Poit:向右侧为X轴正方向的值x,原点下侧为Y轴正方向的值y 大小Size:由宽度width和高度height构成,表示一个矩形 ...