3

長い質問を前もって申し訳ありません。私が本当に興味を持っているのは、実行中の Windows ID が ASP.NET Web サービス アプリケーションのディレクトリ (またはファイル) に書き込むための十分な Windows 特権を持っているかどうかをプログラムで確認する方法です。しかし、特定のディレクトリまたはファイルに対するユーザーの有効な削除 (変更) 権限を取得することに落ち着きます。問題は、一時ファイルを書き込むか、必ずしも IO アクションを実行して例外を処理することなく、これを実行できるようにしたいということです。

はい、これについては既に質問があります ( .Net で C# を使用して書き込み権限があるかどうかをプログラムで判断するにはどうすればよいですか? を参照してください)。通常、最善の方法は IO アクションを試して、例外 -- System.IO メソッドは System.UnauthorizedAccessException をスローして、権限拒否の結果としての失敗を示します。ただし、ファイルのアップロードの場合、問題のファイルまたはフォルダーを書き込もうとするのはアップロード後のみであるため、データをアップロードする時間とリソースを浪費する前に権限を確認したいと思います。http 経由で 2 GB のファイルをアップロードしているユーザーが、アップロードが完了した後に、ファイルを宛先にアップロードする権限がないことを通知されるだけであることに同情します。

実際の書き込みを実行したくない場合に書き込みアクセスをテストする通常の方法は、一時ファイルに書き込むことです。他の質問には、これを指摘する答えがあります。これが私たちのコードが現在行っていることです。ただし、Windows セキュリティでは、削除権限なしで書き込みアクセスが許可されます。書き込みアクセス権のみを持ち、削除権限を持たないユーザーは、あらゆる種類の削除されていない .tmp ファイルを残してしまいます。いいえ、ドメイン管理者アカウントを使用して tmp ファイルの ACL をリセットしてから削除したくはありません。私が取っているアプローチは、ユーザーが System.IO.Directory.GetAccessControl(..) または System.IO.File.GetAccessControl(..) を使用して書き込み権限を持っているかどうかを確認し、さまざまなアクセス ルールと ACE の戻り値を処理することです。 ...しかし、これでもまだ EFFECTIVE 権限の扱いに問題があります。つまり、ほとんどの場合、ユーザーも検索する必要があります。オブジェクトに対するアクセス許可を持っている、ACE にリストされているグループのいずれかのメンバーシップ。もっと簡単な方法があるに違いありません....ありませんか?

4

2 に答える 2

3

ユーザーエクスペリエンスをさらに向上させ、クリーンなプログラム構造を維持しようとしていることに敬意を表します. おそらく、アップロードするだけの場合は、最終的な 2GB ファイルと同じ名前の空の「プレースホルダー」ファイルを作成してから、上書きしてください。空のファイルになってしまう可能性があるため、完璧ではありませんが、非常に簡単で、少なくともいくつかの代替手段よりもエレガントです。

于 2008-12-15T18:41:14.013 に答える
1

「access_test.txt」などの永続的なファイルを作成することもできます。これを日付スタンプなどで上書きして、現在のアクセスを最初にテストします。

于 2008-12-15T20:42:38.417 に答える