ユーザーはおそらく、 などのグループのメンバーシップを通じてフォルダーへの追加の権利を継承しているため、許可Everyone
ルールを設定すると、ユーザーは既に実行できることを実行できるようになります。
例:
- 根
[許可: 読み取り/書き込み (全員)]
- 親フォルダー
[許可: 読み取り/書き込み (全員) - ルートから継承]
- 制限付きフォルダー
[許可: 読み取り/書き込み (全員) - ルートから継承]
[許可: 読み取り (制限付きユーザー) - これは効果がありません!]
おそらく、代わりに拒否ルールを設定する必要があります。これにより、継承されたアクセス許可または書き込みが許可されているグループのメンバーシップに関係なく、ユーザーがフォルダーに書き込みまたはフォルダーを削除できないようにする必要があります。
DirectorySecurity ds = Directory.GetAccessControl(folderPath);
FileSystemRights allExceptRead =
FileSystemRights.FullControl & ~FileSystemRights.ReadAndExecute;
// Use AccessControlType.Deny instead of Allow.
FileSystemAccessRule fsa = new FileSystemAccessRule(username,
allExceptRead,
AccessControlType.Deny);
ds.AddAccessRule(fsa);
Directory.SetAccessControl(folderPath, ds);
その後、階層は次のようになります。
- 根
[許可: 読み取り/書き込み (全員)]
- 親フォルダー
[許可: 読み取り/書き込み (全員) - ルートから継承]
- 制限付きフォルダー
[拒否: 書き込み (制限付きユーザー) - 継承されたアクセス許可をオーバーライドします]
[許可: 読み取り/書き込み (全員) - ルートから継承]
ユーザーが継承またはグループ メンバーシップによってフォルダーの読み取りをまだ許可されていない可能性がある場合は、2 つのアクセス ルールを追加する必要があります。読み取り以外は禁止します)。その後の階層の例:
- 根
[許可: 読み取り/書き込み (全員)]
- 親フォルダー
[許可: 読み取り/書き込み (全員)]
// ParentFolder の権限が子に伝播されないようにします
【子フォルダへの権限継承禁止】
- 制限付きフォルダー
[拒否: 書き込み (制限付きユーザー)]
// 「Everyone」権限は継承されないことに注意してください。
// 明示的に読み取りを許可しないと、ユーザーはこのフォルダに対して何もできません
[許可: 読み取り (制限付きユーザー) - 明示的に読み取りを許可]
アップデート
このリンクによるとDelete
、フォルダー自体の許可を拒否するだけでは十分ではありません。Delete subfolders and files
フォルダーの親フォルダーも拒否する必要があります。したがって、フォルダー階層は次のようになります。
- 根
[許可: 読み取り/書き込み (全員)]
- 親フォルダー
[拒否: サブフォルダーとファイルの削除 (制限付きユーザー)]
[許可: 読み取り/書き込み (全員) - ルートから継承]
- 制限付きフォルダー
[拒否: 書き込み (制限付きユーザー) - 継承されたアクセス許可をオーバーライドします]
[許可: 読み取り/書き込み (全員) - ルートから継承]