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. Android(java)学习笔记119:继承中父类没有无参构造

    /* 如果父类没有无参构造方法,那么子类的构造方法会出现什么现象呢? 报错. 如何解决呢? A:在父类中加一个无参构造方法 B:通过使用super关键字去显示的调用父类的带参构造方法 C:子类通过th ...

  2. 学习jQuery后的部分总结

    1.remove和empty <div id="div1"> <ul id="ul1"> <li>嘿嘿</li> ...

  3. C++ (P160—)多继承 二义性 虚基类 “向上转型”

    1 多继承中,必须给每个基类指定一种派生类型,如果缺省,相应的基类则取私有派生类型,而不是和前一个基类取相同的派生类型 2 一个类的保护成员只能被本类的成员函数或者它的派生类成员函数访问 3 由于c+ ...

  4. css3过度和动画

    一.过度(transition) transition:[transition-property] || [transition-duration] || [transition-timing-fun ...

  5. 在webservice中传递Hashtable

    webservice中不支持hashtable的数据类型,那么如何在webservice中传递hashtable呢?我们可以通过将hashtable转化为webservice中支持的数组的类型来进行传 ...

  6. Oracle、DB2、SQLSERVER、Mysql、Access分页SQL语句梳理

    最近把平时在项目中常用到的数据库分页sql总结了下.大家可以贴出分页更高效的sql语句.sqlserver分页 第一种分页方法 需用到的参数: pageSize 每页显示多少条数据 pageNumbe ...

  7. kettle Add XML 、 XML Join

    1.将文件1.文件2组合成xml文件 文件1 f1;f2;f3 1;张三;24 2;李四;25 文件2 张三;语文;78 张三;数学;88 xml文件 <students> <stu ...

  8. 解决IIS7中出现An error occurred on the server when processing the URL错误提示的方法

    相信用过IIS7的朋友在调试程序的时候都遇到过下面这样的错误提示:    An error occurred on the server when processing the URL. Please ...

  9. vJine.Core 0.3.0.49 正式发布

    nuget: https://www.nuget.org/packages/vJine.Core/ oschina: http://git.oschina.net/vjine/vJine.Core/a ...

  10. 05_XML的解析_01_dom4j 解析

    [简述] Xml文件出了给开发者看,更多情况使用程序读取xml文件里的内容,这叫做xml解析. 根据解析方式分为:DOM解析 和 SAX解析 [解析工具] (一). 使用DOM解析原理的工具: 1.J ...