最近开始看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)" 指的是一个使用ASP.NET StartKit构建的船务公司网站的基础架构。ASP.NET StartKit是由微软提供的一个开源项目模板,用于快速搭建Web应用程序,特别是针对ASP.NET Core平台...
### C51 StartKit 学习板知识点解析 #### 一、C51 StartKit 学习板概述 C51 StartKit是一款专为初学者设计的51单片机及C51语言入门学习系统,由西安电子科技大学测控技术与仪器教研中心研发。该学习板采用低成本的...
在本文中,我们将深入探讨"Fusion Startkit"高级实验例程,这是一套专为Actel FPGA(现场可编程门阵列)设计的实践教程,适用于周立功Fusion Startkit开发板。此套例程旨在帮助用户在Libero IDE 8.0环境下提升FPGA...
【StartKit串口调试助手使用说明1】 StartKit串口调试助手是一款专为物联网设备调试设计的工具,它提供了一种简单易用的界面来配置串口通信参数,并且具有丰富的菜单功能,如日志管理和AT命令操作。下面将详细介绍...
周立功Fusion startkit资料的实验例程的基础实验部分,libero ide8.0版本下运行
周立功Fusion StartKit是一款专门用于FPGA(Field-Programmable Gate Array)开发的实验平台,旨在帮助用户快速理解和实践FPGA设计。ADC(Analog-to-Digital Converter)是该开发板上的一个重要组件,它能够将模拟...
startKIT 开发板示例 最新发布: 1.2.0rc0 维护者: 达维尔克斯莫斯 描述: startKIT 示例程序 所需软件(依赖项) sc_i2s ( :xcore/sc_i2s) sc_i2c ( :xcore/sc_i2c) sc_slicekit_support ( ) sw_audio_...
【基于开发板的开发指南StartKit_NB_V1.0】是中国电信集团公司于2019年9月发布的一份详细指导文档,旨在帮助开发者利用特定的开发板进行NB-IoT(窄带物联网)通信卡的开发工作。该文档主要分为六个部分,包括清单...
周立功公司是一家知名的电子技术企业,提供各种FPGA开发工具和解决方案,包括Fusion StartKit开发板。这个"electric current"标签的实验例程是针对FPGA开发板上的电流监控功能进行的,旨在帮助开发者学习如何利用...
### ProASIC3 StartKit开发板原理图解析 #### 核心概述 ProASIC3 StartKit是一款专为Actel公司的ProASIC3系列FPGA设计的开发板。该开发板旨在为工程师提供一个易于使用的平台,以便进行原型设计、评估以及开发基于...
周立功是一家专注于嵌入式系统与FPGA技术的公司,他们推出的Fusion StartKit是专为FPGA初学者和开发者设计的一款开发板,集成了丰富的功能和实验例程,帮助用户快速上手FPGA应用。 本实验例程重点围绕"Flash Memory...
- 使用“Add...”按钮将用户添加到权限列表,并根据角色赋予不同权限。 - starter拥有只读权限,Tester1同样,Developer1和Manager1具有读写权限。 - 可以通过Groups管理多个用户,简化权限分配。 5. **...
可以将用户添加至特定代码库,并根据角色为其设定不同的访问权限。例如,新入职的员工(如用户`starter`)通常只拥有读取权限;测试人员(如用户`tester1`)也需要读取权限但通常不参与编码;而开发者(如`Developer...
- 如果遇到权限问题,如无法签入或签出代码,检查用户在`VisualSVNServer Manager`中的权限设置。 - 调整相应用户的权限,确保其拥有正确的访问级别。 **2. 客户端连接问题** - **连接失败**: - 如果...
总结,VisualSVN Server提供了一种有效的方式来管理和控制项目代码版本,而TortoiseSVN作为客户端工具,使得开发者能够方便地进行代码签入、签出和版本控制。通过合理的权限分配,团队成员可以协同工作,确保代码的...
SVN(Subversion)是一种版本控制系统,用于管理软件开发过程中的源代码和其他文件的变更历史。VisualSVN Server是一款在Windows上部署和管理SVN服务器的工具,而TortoiseSVN则是一个与Windows资源管理器集成的SVN...