ASP.NET自定义授权模块,用于文件下载

时间:2012-02-16 16:04:35

标签: asp.net file download authorization

在ASP.NET 3.5应用程序中,我有以下场景:

用户可以创建可以上传文件的文件夹。这些文件存储在服务器的文件系统中,然后可以通过请求格式为

的URL进行下载

主机名/ UsersFolders /的用户1 / Folder1中 /requested_file_name.jpeg,

问题是,我只希望 User1 以及 User1 授予访问权限的其他用户能够下载 Folder1 <中的文件/ strong>而不是任何其他用户。

我已经为用户和文件夹之间的n-n关系实现了业务逻辑,现在我只是尝试将请求授权给位于名为 UsersFolders 的文件夹中的文件,并且根据哪个用户请求哪个文件夹来授予或拒绝访问权限。 这样做的最佳方法是什么?

谢谢。

2 个答案:

答案 0 :(得分:0)

我可能会写一个HTTPModule like this,检查传入的请求。如果URL请求是针对“UsersFolder”的子项,则将经过身份验证的用户的凭据与请求的用户文件夹进行比较。如果他们没有访问权限,则返回HTTP错误代码401。

More info about HttpModules

答案 1 :(得分:0)

Authenticate_Request 期间,只需在 global.asax 中检查每个请求的网址,我就可以获得与编写 HttpModule 相同的结果。事件。由于 HttpModules是针对每个请求实例化的,这种方法的缺点是,无论请求的资源是否公开,我都必须为我的应用程序调用绝对每个传入请求的授权方法(例如 .js / .css文件)。

我认为更好的方法是编写一个名为 MyHttpHandler 的HttpHandler,并将相应的配置文件放在 UsersFolders 文件夹中,如下所述:

<system.web>
  <httpHandlers>
    <add  verb="GET" path="*" type="MyHttpHandler" />
  </httpHandlers>
</system.web>

这样只有在请求来自UsersFolder的文件时才会实例化处理程序。