brownpaperpackage.aspx? ID = {GUID}
В событии Load файла media.aspx вы проверяете, что пользователь прошел проверку подлинности, затем проверяете, имеет ли пользователь право просматривать мультимедиа, и если они это делают, загружают мультимедиа как поток и подают его в ответ страницы. как продемонстрировано Spikolynn .
Почему так? Его легко кодировать, и вы получаете все преимущества служб аутентификации ASP.NET и IIS, из которых вы можете найти пользователя, запрашивающего носитель. Это тривиально, чтобы сопоставить этого пользователя со списком доступа для ваших медиа-объектов. И страница имеет объект запроса прямо здесь. Вы также скрываете название СМИ, поэтому не можете сказать, что происходит по URL.
Как вы удерживаете людей от прямого доступа к вашим медиа? Ваши мультимедийные файлы не могут быть сохранены в виртуальном каталоге IIS. Если они есть, есть вероятность, что они могут быть загружены напрямую. Вы можете хранить их в базе данных в виде байтового массива (BLOB-объектов) или хранить их на диске вне виртуального веб-каталога. Пользователи должны пройти через ASP.NET для доступа к файлам
Как вы отслеживаете, какие пользователи имеют доступ к каким медиа? Вы отслеживаете своих пользователей torugh asp.net членство. Это означает, что у каждого пользователя есть идентификатор в таблице aspnet_users. Создайте таблицу для вашего медиа с идентификатором и именем файла (или большим двоичным объектом, содержащим фактический медиа). Тогда вам просто нужно создать третью таблицу, которая соединит их. Эта таблица будет содержать идентификатор пользователя и идентификатор носителя, что означает, что этот пользователь может просматривать этот носитель. С идентификатором пользователя (из членства asp.net) и медиа-идентификатором (из URL) вам просто нужно
select count(*) from UserMedia where UserId = @UserGuid and MediaId = @MediaIdFromUrl
и, если число> 0, пользователь может просматривать мультимедиа.
Пример использования URL:
<asp:image
runat="server"
ImageUrl="brownpaperpackage.aspx?id=53a2ea4(snip)76ca8b" />