我的archive
项目中有一个文件夹,每个用户都有一个单独的文件夹。示例文件夹结构;
Archive(Folder) => User1(Folder) => other folders => files
Archive(Folder) => User2(Folder) => other folders => files ...
我不希望用户访问其他用户的文件夹和文件。我还想阻止未登录的用户访问该archive
文件夹及其内容。
我怎样才能做到这一点?
我的archive
项目中有一个文件夹,每个用户都有一个单独的文件夹。示例文件夹结构;
Archive(Folder) => User1(Folder) => other folders => files
Archive(Folder) => User2(Folder) => other folders => files ...
我不希望用户访问其他用户的文件夹和文件。我还想阻止未登录的用户访问该archive
文件夹及其内容。
我怎样才能做到这一点?
对于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();
在操作系统级别创建权限(文件/文件夹级别所有权)可能很麻烦。如果您决定在操作系统级别进行此操作,则需要您的用户进行域身份验证/Windows 身份验证(因此您需要使用 Windows 或 Active Directory 身份验证)
然后您可以轻松地授予特定文件/文件夹的所有权,并且其他任何人(其他非管理员用户)都无法访问它们
另一方面,您可能决定在应用层创建这种机制。在这种情况下,您只需使用提升的用户模拟您的应用程序,以便您可以创建文件/文件夹。之后,您需要在应用程序级别创建机制来识别哪些用户可以访问哪里(文件夹)。为此,我自己选择使用缓存数据库表。