.net core 如何在asp.net core 2.1项目中保护基于用户的文件夹和文件

.net core 如何在asp.net core 2.1项目中保护基于用户的文件夹和文件,.net-core,asp.net-core-mvc,protected-folders,.net Core,Asp.net Core Mvc,Protected Folders,我的项目中有一个名为archive的文件夹,每个用户都有一个单独的文件夹。样本文件夹结构 Archive(Folder) => User1(Folder) => other folders => files Archive(Folder) => User2(Folder) => other folders => files ... 我不希望用户访问其他用户的文件夹和文件。我还想阻止未登录的用户访问存档文件夹及其内容 如何做到这一点?在操作系统级别创建权限(文

我的项目中有一个名为
archive
的文件夹,每个用户都有一个单独的文件夹。样本文件夹结构

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

如何做到这一点?

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

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



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

有关
静态文件授权
,您可以参考

另一种选择是,您可以编写自己的中间件,在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();

您的意思是希望获得文件系统/操作系统层的权限吗?还是只想在应用层中设置权限?