ProgramingTip

C # .NET을 사용하여 폴더에 "Everyone"권한 추가

bestdevel 2020. 11. 4. 08:12
반응형

C # .NET을 사용하여 폴더에 "Everyone"권한 추가


모든 사람이 폴더에 액세스 할 수 있도록 아래 코드를 사용했습니다.

System.Security.AccessControl.DirectorySecurity sec =
    System.IO.Directory.GetAccessControl(directory, AccessControlSections.All);
FileSystemAccessRule accRule = new FileSystemAccessRule("Everyone",
                                       FileSystemRights.Modify,
                                       AccessControlType.Allow);
sec.AddAccessRule(accRule);    // setACL
sec.ResetAccessRule(accRule);

이제 Everyone 사용자가 폴더에 추가 언어 권한이 할당됩니다. 읽기, 쓰기, 실행 등의 모든 언어가 선택되어 있습니다.


가장 먼저 말씀 드리고 싶은 것이 솔루션을 방법입니다. 이것은 아마도 더 중요 할 것입니다.

먼저 Windows 대화 상자와 사용하여 원하는 권한을 설정했습니다. "모든 사람"에 대한 규칙을 추가하고 "모든 권한"을 모든 상자를 선택했습니다.

그런 다음 Windows 설정을 복제하는 데 필요한 요청 변수를 정확히 알려주기 위해 C # 코드를 작성했습니다.

string path = @"C:\Users\you\Desktop\perms"; // path to directory whose settings you have already correctly configured
DirectorySecurity sec = Directory.GetAccessControl(path);
foreach (FileSystemAccessRule acr in sec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))) {
    Console.WriteLine("{0} | {1} | {2} | {3} | {4}", acr.IdentityReference.Value, acr.FileSystemRights, acr.InheritanceFlags, acr.PropagationFlags, acr.AccessControlType);
}

이 다음과 같은 출력 라인을 제공했습니다.

Everyone | Modify, Synchronize | ContainerInherit, ObjectInherit | None | Allow

따라서 솔루션은 간단합니다 (찾아야 할 항목을 모르는 경우 제대로 이해하기 어렵습니다!).

DirectorySecurity sec = Directory.GetAccessControl(path);
// Using this instead of the "Everyone" string means we work on non-English systems.
SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
sec.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.Modify | FileSystemRights.Synchronize, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));
Directory.SetAccessControl(path, sec);

이렇게하면 Windows 보안 대화 상자의 설정이 테스트 디렉터리에 대해 이미 설정 한 것과 일치하게됩니다.


아래 코드는 폴더 존재 여부를 확인하고 생성하지 않은 경우 생성합니다. 그런 다음 전체 권한 (읽기 및 쓰기)으로 해당 폴더의 모든 사용자 권한을 설정합니다.

string file = @"D:\Richi";     
private static void GrantAccess(string file)
            {
                bool exists = System.IO.Directory.Exists(file);
                if (!exists)
                {
                    DirectoryInfo di = System.IO.Directory.CreateDirectory(file);
                    Console.WriteLine("The Folder is created Sucessfully");
                }
                else
                {
                    Console.WriteLine("The Folder already exists");
                }
                DirectoryInfo dInfo = new DirectoryInfo(file);
                DirectorySecurity dSecurity = dInfo.GetAccessControl();
                dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
                dInfo.SetAccessControl(dSecurity);

            }

모든 작업 (ACL)을 허용하려는 경우 FileSystemRights.FullControl대신 사용하십시오 FileSystemRights.Modify.

참고 URL : https://stackoverflow.com/questions/5298905/add-everyone-privilege-to-folder-using-c-net

반응형