7

プログラムでフォルダー/レジストリ エントリにアクセス許可を割り当てる際に問題が発生しました。次のコードを使用して、継承権限を割り当てることができました。

FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME,
    FileSystemRights.FullControl, InheritanceFlags.ContainerInherit |
    InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly,
    AccessControlType.Allow);

DirectorySecurity security = new DirectorySecurity(); 
security.SetAccessRule(rule);

Directory.CreateDirectory(dir);
Directory.SetAccessControl(dir, security);

これにより、管理者として作成したすべての子フォルダーにファイルのアクセス許可が正しく設定されます。ただし、dirフォルダー自体にアクセス許可を設定するわけではありません。私は継承と伝播のためにかなりの数の順列をいじりましたが、喜びはありませんでした。

たとえば、私は持っています:

dir = %programfiles%\Test

test ( %programfiles%\Test\SubFolder) にフォルダを作成した場合、ユーザーには完全なアクセス許可が割り当てられていますが、 に対する完全なアクセス許可はありません%programfiles%\Test。これは非常に面倒です。ユーザーに、Test ディレクトリに対しても何を行うにも完全なアクセス許可を与えたいからです。

レジストリのアクセス許可に関して同様の問題が発生していますが、1 つを解決できれば、未解決の問題の両方を解決できると思います。

これを解決する方法を知っている人はいますか?

よろしく
トリス

4

2 に答える 2

15

フォルダの場合:

FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME, 
    FileSystemRights.FullControl, AccessControlType.Allow);

サブフォルダーとファイルの場合:

FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME,
    FileSystemRights.FullControl, InheritanceFlags.ContainerInherit |  
    InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, 
    AccessControlType.Allow);

両方の行がプロジェクトに含まれている必要があります。次に、このフォルダー、サブフォルダー、およびファイルに適用されるACLを取得します

于 2009-10-06T20:40:56.613 に答える
10

私はここではほとんど専門家ではありませんが、私自身の目的のためにこれを理解しなければならなかった後、デイブの答えは機能的ではありますが、過度に複雑であると信じています. 1 つのルールだけでこれを達成できるはずです。

FileSystemAccessRule rule = new FileSystemAccessRule(LOGON_USER_NAME,
    FileSystemRights.FullControl,
    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
    PropagationFlags.None, 
    AccessControlType.Allow);

元のPropagationFlags.InheritOnlyコードで OP によって使用されるパラメーターは、アクセス ルールがオブジェクト自体に適用されないようにするものです。

また、.NET はまさにその目的のためにオーバーロードを提供するため、ディレクトリを作成するときにディレクトリのセキュリティを設定することもできます。

Directory.CreateDirectory(dir, security);
于 2012-04-11T17:24:47.993 に答える