Как применить разрешения безопасности к статическим файлам с ASP.NET MVC?
Я пытаюсь использовать ASP.NET MVC, чтобы иметь веб-приложение, которое будет принимать сведения о родительском элементе и разрешать загрузку и обмен файлами, которые связаны и хранятся под именем родительского элемента.
Файлы, которые я хочу защитить, хранятся следующим образом: ~/Files/{Item-GUID}/{Filename}.{Ext}
Item-Guid может использоваться для запроса базы данных о разрешениях безопасности для элемента. (пользователи зарегистрированы как AD SID)
Мне нужно знать, как ASP.Net реагировать на запросы файлов для этих файлов по пути ~ / Files / и использовать /Item-GUID/ для проверки разрешений безопасности перед передачей файла пользователю, и выдавать ошибки аутентификации, если пользователь не авторизован или не имеет доступа к родительскому элементу.
Буду признателен за любые ссылки или советы о том, где я должен начать здесь. Заранее спасибо.
1 ответ
Я часто использую пользовательский класс разрешений, который наследуется от класса AuthorizeAttribute. Это один из способов создания настраиваемого фильтра разрешений для любого действия контроллера.
public MyPermissionsFilter : AuthorizeAttribute
{
private readonly string _permissionName;
public PermissionsFilter(string permissionName)
{
_permissionName = permissionName;
}
}
Переопределите метод OnAuthorization.
public override void OnAuthorization(AuthorizationContext filterContext)
{
//Perform Check with _permissionName
//Redirect to error / unauthorised
}
Затем украсьте свой контроллер действия.
[HttpPost]
[PermissionsFilter("PermissionName")]
public void SaveFile(HttpPostedFileBase file)
{
//Do file stuff
}
Я надеюсь, что это то, что вы хотите, и поможет вам.
Дополнение: я переименовал GetFile в SaveFile.. и это то, что должно было быть.
Я также думал об этом снова, и это может быть не лучшим решением для вас. Если вам нужно проверить права пользователей на доступ к одному файлу на основе его GUID, возможно, вам лучше вызвать проверку безопасности в методе SaveFile, который получает базовый параметр файла. Вы можете получить руководство по имени файла, чтобы затем перейти к проверке прав доступа. Если это не удается, просто перенаправьте на соответствующий вид.