1

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

我要保护的文件以这种方式存储:~/Files/{Item-GUID}/{Filename}.{ext}

Item-Guid 可用于查询数据库以获取项目的安全权限。(用户被记录为 AD SID)

我需要知道如何让 ASP.Net 响应对路径 ~/Files/ 中这些文件的文件请求,并在将文件提供给用户之前使用 /Item-GUID/ 检查安全权限,如果用户未登录或无权访问父项。

对于我应该从哪里开始的任何链接或建议,我将不胜感激。提前致谢。

4

1 回答 1

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 方法中调用安全检查。您可以从文件名中获取 guid,然后传递给权限检查。如果失败,则只需重定向到适当的视图。

于 2017-06-05T15:45:43.563 回答