ASP.NET按用户名授予对目录的访问权限

时间:2012-06-19 23:36:44

标签: asp.net authorization security httphandler

这可以通过创建一个新的HTTP处理程序来完成,但是有一种简单的方法可以配置以下内容吗?:

  1. 网站是根据用户帐户设置的,用户名为A001,A002 ....等
  2. 用户登录后,可以访问其目录中的资源(/ A001)等...可能包含文件和图像
  3. 我在ASP.NET中使用角色和授权的问题是角色是通用的(由角色定义,例如登录的任何人都可以访问资源)或者在web.config文件中进行硬编码在创建用户帐户的动态环境中显然不可行:

    <authorization>
    
    <allow users="John"/> // allow John only 
    <deny users="*"/>  // deny others
    
    </authorization> 
    

    是否有一种简单的方法可以确保只有某个用户才能访问其文件夹?

1 个答案:

答案 0 :(得分:1)

使用HTTP模块就足够了。

首先这是请求生命周期:

  • 的Application_BeginRequest。
  • Application_AuthenticateRequest。
  • Application_PostAuthenticateRequest。
  • Application_DefaultAuthentication。
  • Application_AuthorizeRequest。
  • Application_PostAuthorizeRequest。
  • Application_ResolveRequestCache。
  • Application_PostResolveRequestCache。
  • Application_MapRequestHandler。仅在服务器以集成模式运行IIS 7并且至少>>>>>
  • 时才触发
  • Application_PostMapRequestHandler。
  • Application_AcquireRequestState。
  • Application_PostAcquireRequestState。
  • Application_PreRequestHandlerExecute。
  • 执行页面事件处理程序。 (参见页面生命周期)
  • Application_PostRequestHandlerExecute。
  • Application_ReleaseRequestState。
  • Application_PostReleaseRequestState
  • Application_UpdateRequestCache。
  • Application_PostUpdateRequestCache
  • Application_LogRequest。仅在服务器是IIS 7集成模式且至少是.Net Framework 3.0
  • 时触发
  • Application_PostLogRequest。仅在服务器是IIS 7集成模式且至少是.Net Framework 3.0
  • 时触发
  • Application_EndRequest。

了解更多信息:http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx

我认为符合您需求的最佳活动是Application_AuthorizeRequest

在这里,您可以获取正在访问的路径,并且您可以在数据库中使用 map 将您的使用与其允许的路径相关联,例如:

UserID         Path
userID1        ~/UserFiles/User1
userID2        ~/UserFiles/User2
userID3        ~/UserFiles/User3

然后在事件中阅读此地图并决定是否应该授权用户