asp.net 基于forms验证的目录角色权限的实现

但是我在使用过程中,发现针对角色的控制并不是那么容易,通过在网上查找资料,终于解决这个问题。下面将主要的注意事项列出来。
1、配置文件中,角色的allow项要放在deny项的前面,users要配置为*,而不是?

代码


代码如下:

<location path="Doctors">
<system.web>
<authorization>
<allow roles="doctors"/> //这个在前
<deny users="*"/>
</authorization>
</system.web>
</location>

2、将角色写入票据

代码


代码如下:

string role="doctors";
FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, username, DateTime.Now, DateTime.Now.AddMinutes(30), false, role, "/");//建立身份验证票对象
string HashTicket = FormsAuthentication.Encrypt(Ticket);//加密序列化验证票为字符串
HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket);
//生成Cookie
Response.Cookies.Add(UserCookie);//输出Cookie
Response.Redirect("");//重定向到用户申请的初始页面

3、身份票据并没有直接提供对role的直接支持,需要在Application_AuthenticateRequest中对role进行解析

代码


代码如下:

string[] roles = authTicket.UserData.Split(new char[] { '|' });
FormsIdentity id = new FormsIdentity(authTicket);
System.Security.Principal.GenericPrincipal principal = new System.Security.Principal.GenericPrincipal(id, roles);
Context.User = principal;

大致弄清这三点,就可以了。
代码打包

(0)

相关推荐

  • 实例说明asp.net中的简单角色权限控制

    角色表+用户表,其中Hope_T_User(用户)中的User_RoleId关联Hope_T_Role(角色)的Role_Id,表中字段均为简单常见英文,不作详解. 主要思路是使用公共类在其中根据角色得出其越权时的操作,然后后台所有需要验证权限的页面均继承此类,使用相应参数判断角色以做相应操作. 公共类:AdminPermission 复制代码 代码如下: /// <summary> /// AdminPermission角色权限验证类 /// </summary> public

  • asp.net+sqlserver实现的简单高效的权限设计示例

    大部分系统都有权限系统.一般来说,它能管控人员对某个否页面的访问:对某些字段.控件可见或者不可见.对gridview中的数据是否可删除.可添加.可新增等等.大部分人都把权限作为一个子系统独立出来.但是这里我不是想设计一个权限管理系统,网上的设计方案太多了,可以说每个开发人员都有自己的开发权限管理系统的想法和思路. 在这篇文章中,我先用简单的C#代码模仿一个用户的权限,再使用sql去模拟.这是一种很简单,很直观,很高效的方式去判定用户的权限. C#: 好吧,先从最简单开始,定义一个用户(User)

  • asp.net 权限管理分析

    权限管理一般分为"用户管理""角色管理""权限管理".而其中的权限管理,主要是针对某一模块实现"添加""修改""删除"的针对性控制,比如某个用户有"添加文章"的权限,但没有"修改(审核)文章"的权限.以下我主要先讲下"权限管理". 首先,存进数据库的格式,看下: 复制代码 代码如下: news:3,gallery:1,users

  • ASP.NET通用权限验证的实现代码思路

    本篇介绍通用权限验证的实现代码思路,总共分为导入参数.解析XML.根据XML配置进行处理.返回结果. 代码架构图 一. 类介绍 1.SFWebPermission:实现IHttpModule接口,权限验证入口: 2.SFConfig:导入XML配置类: 3.SFPermission:解析XML配置进行权限验证: 4.SFAccessOper:数据库操作类: 5.SFPermissionSQL:XML节点实体类: 6.SFParameter:XML节点实体类: 7.SFCommon:系统变量定义类

  • ASP.NET MVC 中实现基于角色的权限控制的处理方法

    [Authorize]public ActionResult Index() 标记的方式,可以实现所标记的ACTION必须是认证用户才能访问: 通过使用 [Authorize(Users="username")] 的方式,可以实现所标记的ACTION必须是某个具体的用户才能访问,以上两种方式使用起来非常方便,在NeedDinner示例程序中已有具休的实现过程, 但是,我们在实际的应用中所使用的大都是基于角色(Roles)的认证方式,NeedDinner中却未给出,本文给出具体实现(基于

  • Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)实现代码

    1.用户登录 验证用户是否登录成功步骤直接忽略,用户登录成功后怎么保存当前用户登录信息(session,cookie),本文介绍的是身份验证(其实就是基于cookie)的,下面看看代码. 引入命名空间 using System.Web.Security; 复制代码 代码如下: Users ModelUser = new Users() { ID = 10000, Name = UserName, UserName = UserName, PassWord = PassWord, Roles =

  • 获取创建Membership的数据库创建脚本

    所以总想有自己的创建脚本,最后找到了如下的方法. aspnet_regsql.exe -E -S localhost -d Northwind -A all -sqlexportonly c:\membership.sql 对于asp.net_regsql.exe的操作可以参考如下链接: http://msdn.microsoft.com/zh-cn/library/ms229862(VS.80).aspx 参考原文如下: http://blog.krisvandermast.com/Creat

  • asp.net membership 密码重设

    在web.config中: 复制代码 代码如下: <connectionStrings> <add name="SqlServices" connectionString="server=.;database=data;uid=sa;pwd=123;" /> </connectionStrings> 复制代码 代码如下: <membership defaultProvider="SqlProvider"

  • 一个基于Asp.Net MVC的权限方案

    1.数据结构Mad_Popedom为权限表,Control记录控制器名,Action记录动作名.Mad_Role为角色表. 2.权限控制的实现此处使用比较简单AOP方式,用MVC的Filter实现,代码如下 复制代码 代码如下: using System.Collections.Generic; using System.Web.Mvc; using Madnet.Model.MadAdmin; using Madnet.BLL.MadAdmin; namespace Madnet.Contro

  • asp.net Forms身份验证和基于角色的权限访问

    主要思想:Forms身份验证用来判断是否合法用户,当用户合法后,再通过用户的角色决定能访问的页面. 具体步骤:     1.创建一个网站,结构如下:         网站根目录             Admin目录            ---->    管理员目录                 Manager.aspx        ---->    管理员可以访问的页面             Users目录            ---->    注册用户目录         

  • 初识 ASP.NET Membership 用户管理

    一.与session的不同点 Membership 一般指用微软的aspnetdb数据库来进行身份认证 Session是指网站用户的会话信息 二.Membership 类提供的功能可用于: 1.创建新用户. 2.将成员资格信息(用户名.密码.电子邮件地址及支持数据)存储在 Microsoft SQL Server 或其他类似的数据存储区. 3.对访问网站的用户进行身份验证.可以以编程方式对用户进行身份验证,也可以使用 Login 控件创建一个只需很少代码或无需代码的完整的身份验证系统. 4.管理

  • asp.net BasePage类+Session通用用户登录权限控制

    但是很多人都喜欢在 复制代码 代码如下: protected void Page_Load(object sender, EventArgs e) {} 里面来写代码,甚至在某些按钮里面写判断session是否存在~~ 这样当然是能实现效果的,问题就在,如果有1000个页面~~你需ctrl+C...Ctrl+V 很多次~~~ 我的思路就是写一个BasePage类继承 System.Web.UI.Page 复制代码 代码如下: public class BasePage : System.Web.

随机推荐