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. ant例子

    1.安装ant 下载解压→环境变量配置→cmd输入ant 出现 Buildfile: build.xml does not exist! 代表安装成功 参考文章:http://www.cnblogs. ...

  2. UNIX V6内核源码剖析——unix v6 全貌

    1. UNIX V6 运行硬件环境——PDP-11/40 PDP-11/40指令和数据都是以16比特为单位.对它而言,一个字的宽度为16比特. PDP-11/40以及周边设备的寄存器被映射到内存最高位 ...

  3. nfs文件系统挂载失败解决方法

    nfs文件系统挂载失败解决方法 */--> nfs文件系统挂载失败解决方法 Table of Contents 1. 错误提示 2. 我的配置 1 错误提示 bootserver=255.255 ...

  4. 我的第一篇——nginx+naxsi总结篇1

    今天是我正式在Linux下安装nginx的第一天吧,搜索,查看,安装,这之间肯定是或多或少的遇到了很多的问题,不管是大的还是小的,都应该记录下来,或许以后还会用到,或许会帮到其他人. 首先,先说一下, ...

  5. 关于Eclipse插件开发-----加入首选项(preferencePages)

    选择主菜单"窗口---->首选项"命令打开"首选项"窗口.此窗口是Eclipse设置项的集中营, 修改plugin.xml文件,设置首选项的扩展点: pl ...

  6. sql 理解视图

    可以看作是定义在sqlserver上的虚拟的表,本身并不存储数据,仅仅存储一个select语句和涉及的表的引用 通过视图,客户端不再需要知道底层表结构和其之间的关系,视图提供了一个统一访问数据的接口 ...

  7. 陷阱~SQL全表扫描与聚集索引扫描

    SqlServer中在查询时,我们为了优化性能,通常会为where条件的字段建立索引,如果条件比较固定还会建立组合索引,接下来,我们来看一下索引与查询的相关知识及相关陷阱. SQL表自动为主键加聚集索 ...

  8. asp:时间的显示

    DateTime dt = DateTime.Now;//    Label1.Text = dt.ToString();//2005-11-5 13:21:25//    Label2.Text = ...

  9. spring.net 和 mybatis.net

    demo是整合现有的spring.net 和 mybatis.net 完成的控制台程序,需要注意的地方:关于Config文件夹中的config文件的属性设定:同时保证Providers.config默 ...

  10. 为UITextView添加与UITextField一样的边框——UITextField默认边框颜色、宽度、圆角

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3789052.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...