Hi Steve,
The whole Repository team is doing a great job! One of the most challenging things in .Net programming for web applications is setting up a secure place to store information in a way that only authorized users can get to restricted files. I have come across this situation in several projects and although you can set HTTPModules to try to block access to certain files, IIS will not run the code in the HTTP module when the ISAPI extension is not mapped to the aspnet_isapi.dll. This makes it risky to store files such as applications (.exe), pdf documents, htm documents and other documents for which the HTTP module's code will not run and as a result it would not be possible to control unauthorized access. I tried at some point a wildcard mapping to the aspnet_isapi.dll but this is definitely not the best approach as for one part it is difficult to implement for most web site hosting providers and it can be easily disabled without the web site owner's knowledge.
I notice that you have used an interresting approach by adding a GUID (known only to the Repository) to the file names, which makes it very unlikely for any user to "hit" the file unless the request is submitted using the Repository. However, the file is still "exposed". I have worked other projects using Microsoft Content Management Server (MCMS), which stores the web site's content in the SQL database. While this approach is cumbersome, and it implies the need to have a "Site Manager" which adds a lot of unnecesary complexity, I have come to think that a combination of the two models would yield a very high degree of security and a simpler implementation. When the user uploads a file, a "shortcut" would be placed in the file system, allowing the system to leverage on its benefits, and making it easy to add, move, delete, change file attributes, etc. However, the actual content of the file would be stored in the database (using a GUID) and secure from unauthorized access. A side benefit would be that it would be included automatically in database backup procedures.
Regards and I look forward to the 4.0 version of the Repository