由于某些文件系统权限,Directory.Exist(...)失败

时间:2014-10-27 13:36:40

标签: c# impersonation file-exists

我的服务器上有一个文件系统和一个特定的路径结构,由模拟用户访问。

有一种情况是用户无法检查自己的文件夹是否存在。

我的文件夹结构如下。

Base Path(only admin)
   +->User Profile(only admin)
      +->User's Area( owner user and andmin )

举个例子:

  

... \ Base Path \ John的个人资料\ John的区域

在文件系统上(NTFS权限),John只有权访问(NTFS权限)John's Area。我需要以编程方式检查John's area是否存在。

Directory.Exists("...some other path parts...\Base Path\John's Profile\John's Area");

如果我模拟管理员,则返回true,但如果我冒充John,则返回false。

我认为John能够检查他自己的文件夹存在 - 即使他无法浏览Base Path -> John's Profile到他的区域,他也可以直接转到...\Base Path\John's Profile\John's Area

检查文件夹是否存在需要什么权限?或者我遗失了什么基本的东西?

1 个答案:

答案 0 :(得分:0)

嗯,听起来这可能是一个 ASP.NET 网站。如果是这种情况,您的应用程序将由 Internet信息服务托管。因此,您必须确保系统的工作进程具有对目录的适当权限。没有它, I / O 功能将无法成功。

  • IIS_IUsr我相信用户。

您必须记住,虽然它在 IIS 中的服务器上运行,但它并未使用已登录的用户。它使用 IIS内置用户

如果这不是在 IIS 中托管,那么您的模拟方法应该有效。确保它正确模仿帐户。

您也可以像这样进行检查以验证:

public static bool ValidateIOPermission(string path)
{
     try
     {
          if(Directory.Exist(path))
               return true;

          else { Directory.CreateDirectory(path); }
     }

     catch(Exception ex) { return false; }
}

所以,如果它存在,它将return true;如果它没有尝试写目录。然后它将throw exception如果它无法写入,则返回false。所以你知道它是否失败了。