最近开始看ASP.NET StartKit TimeTracker中代码,它是一个典型的项目追踪系统。
它比我前几天看的ASP.NET StartKit Commerce复杂了许多。
例如:在ASP.NET StartKit TimeTracker开始有明显的三层结构的设计。PL层,BLL层和DAL层。
同时开始在项目中引进了角色权限管理功能等等。
今天我们先讨论角色权限的实现问题。
让我们先看一角色权限设置的参考资料:
http://www.cnblogs.com/kwklover/archive/2004/06/29/19455.aspx
先说说大概步骤:
1.在用户成功登陆后,将用户的角色数据经过FormsAuthentication.Encrypt加密放到验证coolie
2.在Application_AuthenticateRequest事件中取回验证cookie(FormsAuthentication.FormsCookieName),再FormsAuthentication.Decrypt方法解密
3.创建IPrincipal对象并存在HttpContext.User中
ASP.NET StartKit TimeTracker中的方式和我以上说的差不多
你存放角色数据的cookie是自己另外单独创建的
现在假如我们系统中有3 种角色:Service,Work,Manage
要是我们想在WebForm1.aspx禁止Service,Manage这2类角色的登陆用户访问,我们可以在Web.config文件中做下面设置:
<location path="WebForm1.aspx">
<system.web>
<authorization>
<deny roles="Service,Manage" />
<deny users="?" />
</authorization>
</system.web>
</location>
还有一种方式就是:建立三个文件夹,某一角色的人只能访问某一文件夹里的ASPX.NET文件
假如我有用户a,他有Service,Work这2种角色,假如有页面abc.aspx,它允许Work,Manage这2种角色的用户访问。
个人感觉这样设置的灵活性不好,有没有通过代码控制的方法呢?
我编写了如下代码:实现单用户可以多角色,单页面多角色访问。
让我们先看Global.asax.cs中代码,请注意看事件Application_AuthenticateRequest中的代码实现。
using System;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Threading;
using System.Globalization;
using System.Configuration;
namespace BluepieCustomerService
{
/**//// <summary>
/// Global 的摘要说明。
/// </summary>
public class Global : System.Web.HttpApplication
{
/**//// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/**//// <summary>
/// 本系统自定义的角色之一“服务人员”
/// </summary>
public const string ConstUserRoleNameService="Service";
/**//// <summary>
/// 本系统自定义的角色之一“普通工作人员”
/// </summary>
public const string ConstUserRoleNameWork="Work";
/**//// <summary>
/// 本系统自定义的角色之一“管理人员”
/// </summary>
public const string ConstUserRoleNameManage="Manage";
/**//// <summary>
/// 逗号字符串
/// </summary>
public const string ConstStringComma=",";
/**//// <summary>
/// 百分号字符串
/// </summary>
public const string ConstStringPercent="%";
/**//// <summary>
/// char 类型逗号
/// </summary>
public const char ConstCharComma=',';
/**//// <summary>
/// char 类型百分号
/// </summary>
public const char ConstCharPercent='%';
/**//// <summary>
/// 发生权限访问错误时,转向的错误提示页面
/// </summary>
public const string ConstRoleErrorPageName="RoleError.aspx?Index=-1";
/**//// <summary>
/// DB的连接字符串
/// </summary>
public const string ConstWebConfigFileKeyName_ConnectionString="ConnectionString";
public Global()
{
InitializeComponent();
}
protected void Application_Start(Object sender, EventArgs e)
{
}
protected void Session_Start(Object sender, EventArgs e)
{
}
protected void Application_BeginRequest(Object sender, EventArgs e)
{
}
protected void Application_EndRequest(Object sender, EventArgs e)
{
}
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (HttpContext.Current.User!=null)
{
//用户已经通过验证
if (Request.IsAuthenticated )
{
//得到用户的角色Cookie的名称
string userRolesCookieName=FormsAuthentication.FormsCookieName;
//得到用户的角色Cookie
string currentCookieValue=Context.Request.Cookies[userRolesCookieName].Value;
//解密
FormsAuthenticationTicket currentFormsAuthenticationTicket = FormsAuthentication.Decrypt(currentCookieValue);
//得到cookie中的用户数据
string[] userData = BCSTool.StringToArray(currentFormsAuthenticationTicket.UserData,ConstCharPercent);
//取得用户的个人详细信息数组
int userId=Convert.ToInt32( userData[0]);
string userDisPlayName=userData[1];
string userName=userData[2];
string userEmail=userData[3];
//按当初加入的规则分解为数组
分享到:
相关推荐
基于ASP.net Startkit开发的一款船务公司网站框架,供网友分享参考。
周立功Fusion startkit资料的实验例程的高级实验部分,libero ide8.0版本下运行
周立功Fusion startkit资料的实验例程的基础实验部分,libero ide8.0版本下运行
Fusion-StartKit白皮书(周立功)-超级详细
c51的学习板等等c51的学习板等等c51的学习板等等c51的学习板等等
周立功Fusion StartKit,fpga开发板的实验例程,adc
1. 概述3 2. 配置串口3 3. 菜单简介3 3..1.3 停止自动保存日志3 1. 概述 2. 配置串口 3. 菜单简介 3..1.3 停止自动保存日志
周立功Fusion StartKit,fpga开发板的实验例程electric current
startKIT 开发板示例 最新发布: 1.2.0rc0 维护者: 达维尔克斯莫斯 描述: startKIT 示例程序 所需软件(依赖项) sc_i2s ( :xcore/sc_i2s) sc_i2c ( :xcore/sc_i2c) sc_slicekit_support ( ) sw_audio_...
周立功Fusion StartKit,fpga开发板的实验例程Flash Memory RAM
ProASIC3 StartKit开发板原理图-周立功
西电startkit电路板图,有板子没有电路图的可以看下,很清晰
1. 代码结构介绍7 2. 开发开发板程序10 3. 编译开发板程序10 4. 下载开发板程序10 1. 在断电条件下插入电信 NB-IOT 通信卡(必须事先实
周立功Fusion StartKit,fpga开发板的实验例程FlashROM
假如我们使用VisualStudio在文件夹StartKit中创建了一个项目,我们要把这个项目的源代码签入到SVN Server上的代码库中里,首先右键点击StartKit文件夹,这时候的右键菜单如下图所示:图2-2-1点击Import,弹出下面的...
ACTEL A3P StartKit FPGA开发全套文挡(含测试源码) FPGA_Design PCB_Design Actel A3P1000 Evaluation Board Demo
wxapp-startkit 微信小程序 StartKit (Gulp + Babel + Sass) 使用ES6(ES2015)提供的语法进行开发,构建时用Babel进行转译 使用SASS作为样式表预处理器 编译后的代码进行了压缩优化,并生成必要的Source Map文件 待...
微信小程序的优势在于它方便快捷、轻量级、跨平台、丰富的推广方式、丰富的功能接口、数据分析与优化、结合微信支付、支持多场景应用、社交功能以及多端同步等。这些优点使得小程序能够满足用户的多种需求,提供更好...
一、签入源代码到SVN服务器假如我们使用VisualStudio在文件夹StartKit中创建了一个项目,我们要把这个项目的源代码签入到SVNServer上的代码库中里,首先右键点击StartKit文件夹,这时候的右键菜单如下图所示:图2-2-...