【发布时间】:2016-09-13 23:07:41
【问题描述】:
我希望应用程序创建一个文件夹并限制当前和管理员以外的用户访问它。 由于下面的代码,虽然当前用户也失去了访问权限并且无法删除该文件夹。
string rootPath = Environment.GetEnvironmentVariable("TEMP");
var rootDirectory = new DirectoryInfo(rootPath);
DirectoryInfo subFolder = rootDirectory.CreateSubdirectory("SubFolder");
var directorySecurity = subFolder.GetAccessControl();
var adminitrators = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null);
directorySecurity.AddAccessRule(
new FileSystemAccessRule(
adminitrators,
FileSystemRights.FullControl,
InheritanceFlags.None,
PropagationFlags.NoPropagateInherit,
AccessControlType.Allow));
directorySecurity.AddAccessRule(
new FileSystemAccessRule(
WindowsIdentity.GetCurrent().Name,
FileSystemRights.FullControl,
InheritanceFlags.None,
PropagationFlags.NoPropagateInherit,
AccessControlType.Allow));
var everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
directorySecurity.AddAccessRule(
new FileSystemAccessRule(
everyone,
FileSystemRights.FullControl,
InheritanceFlags.None,
PropagationFlags.NoPropagateInherit,
AccessControlType.Deny));
subFolder.SetAccessControl(directorySecurity);
subFolder.Delete(true); // <-- System.UnauthorizedAccessException
【问题讨论】:
-
只删除所有权限,除了:允许当前用户和管理员。默认情况下,其他所有人都不会获得许可。您不需要明确的
deny规则。 -
听起来你开头段落中的两句话解释了你想要发生的事情。您可能需要澄清第一个是您想要的,第二个是正在发生的事情,您不希望这样。
-
@zerkms 谢谢。我认为我需要明确否认。如果您将其发布为答案,我会接受。
-
@Enigmativity 我更新了问题,尽管 zerkms 没有更新就得到了正确的问题
-
@zerkms 不,抱歉。正如我所想的那样,这似乎并不适用于所有情况。如果在根级别上,我设置Everyone - FullAccess。比运行这段代码。而不是尝试使用不同的帐户访问它,我可以做到。它从父文件夹继承权限...
标签: c#