我有一个页面,我可以将文件实际上传到3个文件夹。我已经相对于web.config中的用户角色保护了这些文件夹。但这还不够,我需要更多的验证过程,我必须只将文件暴露给属于组的角色。有3组人,他们有相同的角色。所以我必须从aspx访问这些文件,我可以在其中定义此验证。必须将Poeple传递给此文件才能从服务器下载文件。他们无法直接在浏览器中访问该文件,因为我需要找出用户来自哪个组并为该组提供确切的文件。
我有什么想法可以做到这一点?
修改:组不会被引用到窗口身份验证组。组是我的应用程序中的一个概念。
感谢。
答案 0 :(得分:1)
首先,由于您说的是群组,我假设您正在使用Windows身份验证。如果情况确实如此,那么Request.IsAuthenticated将告诉您当前请求是否来自经过身份验证的用户,如果是,Context.User将是WindowsPrincipal Identity Response.TransmitFile() property将为您提供用户名及其所属的组。
然后,您可以执行检查并使用HTTP handler将文件发送到客户端(无需缓冲):
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.HeaderEncoding = Response.ContentEncoding;
Response.AppendHeader("content-disposition",
String.Format(CultureInfo.InvariantCulture,
"attachment; filename=\"{0}\"", yourFileName));
Response.AppendHeader("content-length",
yourFileSize.ToString(CultureInfo.InvariantCulture));
Response.TransmitFile(yourFilePath);
Response.End();
尽管如此,请注意,{{3}}通常比ASP.NET页面更适合执行此类工作。
答案 1 :(得分:0)
我不打算用整个aspx页面来处理文件。请改用通用的http处理程序。您的用户可以访问
这样的网址MyFileHandler.ashx?文件名= File1中
然后在您的ProcessRequest方法中,您可以进行角色验证并通过HttpResponse.TransmitFile
答案 2 :(得分:0)
可能有更好的方法来解决这个问题。使用HTTP处理程序可能会更好地完成您要完成的任务。
退房:http://www.15seconds.com/issue/020417.htm
这使您可以更准确地控制通过任何方法访问文件时的操作。处理程序准备就绪后,您可以在IIS中编辑HTTP处理程序映射,并选择HTTP处理程序以允许/禁止文件访问。
您的处理程序可以检查请求的URL的文件夹,并确定是否允许用户查看此文件。一旦你搞清楚它就会非常棒。