如何在ASP.NET Core 2.1项目中保护基于用户的文件夹和文件

时间:2019-01-04 07:48:03

标签: .net-core asp.net-core-mvc protected-folders

我在项目中有一个名为protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( new MainReactPackage(), new RNCardViewPackage() ); } 的文件夹,每个用户都有一个单独的文件夹。样本文件夹结构;

archive

我不希望用户访问其他用户的文件夹和文件。我还想防止未登录的用户访问Archive(Folder) => User1(Folder) => other folders => files Archive(Folder) => User2(Folder) => other folders => files ... 文件夹及其内容。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

在操作系统级别创建权限(文件/文件夹级别的所有权)可能很麻烦。如果决定在操作系统级别上进行此操作,则需要对用户进行域身份验证/ Windows身份验证(因此,您需要使用Windows或Active Directory身份验证)

然后,您可以轻松地将所有权授予特定的文件/文件夹,而其他任何人(其他非管理员用户)都无法访问它们


另一方面,您可以决定在应用程序层上创建此机制。在这种情况下,您只需要使用提升的用户身份来模拟您的应用程序,以便您可以创建文件/文件夹。之后,您需要在应用程序级别上创建机制,以识别哪些用户有权访问位置(文件夹)。为此,我本人选择使用缓存的数据库表。

答案 1 :(得分:0)

对于Static file authorization,您可以参考Static file authorization

对于另一种选择,您可以编写自己的中间件以检查之前 app.UseStaticFiles();的身份。

app.Map("/Archive", subApp => {
    subApp.Use(async (context, next) =>
    {
        if (!context.User.Identity.IsAuthenticated)
        {
            context.Response.StatusCode = StatusCodes.Status401Unauthorized;
        }
        else if(context.Request.Path.StartsWithSegments("/Archive/User1") && context.User.Identity.Name != "User1")
        {
            context.Response.StatusCode = StatusCodes.Status401Unauthorized;
        }
    });
});

app.UseStaticFiles();