`

代码阅读总结之ASP.NET StartKit TimeTracker(角色权限)

阅读更多


最近开始看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构建的船务公司网站的基础架构。ASP.NET StartKit是由微软提供的一个开源项目模板,用于快速搭建Web应用程序,特别是针对ASP.NET Core平台...

    C51 StartKit学习板

    ### C51 StartKit 学习板知识点解析 #### 一、C51 StartKit 学习板概述 C51 StartKit是一款专为初学者设计的51单片机及C51语言入门学习系统,由西安电子科技大学测控技术与仪器教研中心研发。该学习板采用低成本的...

    Fusion startkit高级实验例程

    在本文中,我们将深入探讨"Fusion Startkit"高级实验例程,这是一套专为Actel FPGA(现场可编程门阵列)设计的实践教程,适用于周立功Fusion Startkit开发板。此套例程旨在帮助用户在Libero IDE 8.0环境下提升FPGA...

    StartKit串口调试助手使用说明1

    【StartKit串口调试助手使用说明1】 StartKit串口调试助手是一款专为物联网设备调试设计的工具,它提供了一种简单易用的界面来配置串口通信参数,并且具有丰富的菜单功能,如日志管理和AT命令操作。下面将详细介绍...

    Fusion startkit资料-实验例程-基础实验

    周立功Fusion startkit资料的实验例程的基础实验部分,libero ide8.0版本下运行

    周立功Fusion StartKit,fpga开发板的实验例程,adc

    周立功Fusion StartKit是一款专门用于FPGA(Field-Programmable Gate Array)开发的实验平台,旨在帮助用户快速理解和实践FPGA设计。ADC(Analog-to-Digital Converter)是该开发板上的一个重要组件,它能够将模拟...

    sw_startkit_examples:startKIT 开发板的示例代码

    startKIT 开发板示例 最新发布: 1.2.0rc0 维护者: 达维尔克斯莫斯 描述: startKIT 示例程序 所需软件(依赖项) sc_i2s ( :xcore/sc_i2s) sc_i2c ( :xcore/sc_i2c) sc_slicekit_support ( ) sw_audio_...

    基于开发板的开发指南_StartKit_NB_V1.0 (1)1

    【基于开发板的开发指南StartKit_NB_V1.0】是中国电信集团公司于2019年9月发布的一份详细指导文档,旨在帮助开发者利用特定的开发板进行NB-IoT(窄带物联网)通信卡的开发工作。该文档主要分为六个部分,包括清单...

    周立功Fusion StartKit,fpga开发板的实验例程electric current

    周立功公司是一家知名的电子技术企业,提供各种FPGA开发工具和解决方案,包括Fusion StartKit开发板。这个"electric current"标签的实验例程是针对FPGA开发板上的电流监控功能进行的,旨在帮助开发者学习如何利用...

    ProASIC3 StartKit开发板原理图-周立功

    ### ProASIC3 StartKit开发板原理图解析 #### 核心概述 ProASIC3 StartKit是一款专为Actel公司的ProASIC3系列FPGA设计的开发板。该开发板旨在为工程师提供一个易于使用的平台,以便进行原型设计、评估以及开发基于...

    周立功Fusion StartKit,fpga开发板的实验例程Flash Memory RAM

    周立功是一家专注于嵌入式系统与FPGA技术的公司,他们推出的Fusion StartKit是专为FPGA初学者和开发者设计的一款开发板,集成了丰富的功能和实验例程,帮助用户快速上手FPGA应用。 本实验例程重点围绕"Flash Memory...

    VisualSVN Server的配置和使用方法

    - 使用“Add...”按钮将用户添加到权限列表,并根据角色赋予不同权限。 - starter拥有只读权限,Tester1同样,Developer1和Manager1具有读写权限。 - 可以通过Groups管理多个用户,简化权限分配。 5. **...

    SVN服务端与Tortoise客户端的配置方法

    可以将用户添加至特定代码库,并根据角色为其设定不同的访问权限。例如,新入职的员工(如用户`starter`)通常只拥有读取权限;测试人员(如用户`tester1`)也需要读取权限但通常不参与编码;而开发者(如`Developer...

    SVN服务器安装文档

    - 如果遇到权限问题,如无法签入或签出代码,检查用户在`VisualSVNServer Manager`中的权限设置。 - 调整相应用户的权限,确保其拥有正确的访问级别。 **2. 客户端连接问题** - **连接失败**: - 如果...

    1.2、网络文件 VisualSVN Server的配置和使用方法(项目部署到svn上)1

    总结,VisualSVN Server提供了一种有效的方式来管理和控制项目代码版本,而TortoiseSVN作为客户端工具,使得开发者能够方便地进行代码签入、签出和版本控制。通过合理的权限分配,团队成员可以协同工作,确保代码的...

    SVN操作[收集].pdf

    SVN(Subversion)是一种版本控制系统,用于管理软件开发过程中的源代码和其他文件的变更历史。VisualSVN Server是一款在Windows上部署和管理SVN服务器的工具,而TortoiseSVN则是一个与Windows资源管理器集成的SVN...

Global site tag (gtag.js) - Google Analytics