如何使用ASP.NET MVC将安全权限应用于静态文件



我正在尝试使用ASP.NET MVC具有一个Web应用程序,该应用程序将获取有关父项目的详细信息,并允许上传和共享与名称相关联的文件并存储父母项目。

我要保护的文件以这种方式存储:〜/files/{item-guid}/{filename}。{ext}

该项目固定可用于查询数据库以确保该项目的安全权限。(用户被记录为Ad Sids(

我需要知道如何在路径〜/files/中响应这些文件的文件请求〜/files/,然后使用/item-guid/在将文件提供给用户之前检查安全权限,然后投掷身份验证如果用户未登录或无法访问父项目,则错误。

我感谢我应该从哪里开始的任何链接或建议。预先感谢。

我通常会创建一个从oferitizeattribute类派生的自定义许可类。这是您可以在任何控制器操作上创建自定义权限过滤器的一种方式。

public MyPermissionsFilter : AuthorizeAttribute
{
    private readonly string _permissionName;
    public PermissionsFilter(string permissionName)
    {
        _permissionName = permissionName;
    }
}

覆盖了攻击方法。

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访问单个文件,则最好在接收文件base参数的SaveFile方法中调用安全检查。您可以从文件名中获取GUID,然后将其传递给权限检查。如果失败,则只需重定向到适当的视图。

最新更新