Как применить разрешения безопасности к статическим файлам с 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, который получает базовый параметр файла. Вы можете получить руководство по имени файла, чтобы затем перейти к проверке прав доступа. Если это не удается, просто перенаправьте на соответствующий вид.

Другие вопросы по тегам