Как установить разрешение для папки - PullRequest
1 голос
/ 10 февраля 2012

Как я могу создать / отредактировать / добавить разрешение для определенной папки?На локальном диске C есть папка «test». Как установить разрешение для этой папки с помощью C #?

Я уже написал некоторый код:

public void getusers()
{
    SelectQuery squery = new SelectQuery("Win32_UserAccount", "Domain='" + System.Environment.UserDomainName.ToString() + "'");
    try
    {
        ManagementObjectSearcher msearchar = new ManagementObjectSearcher(squery);

        foreach (ManagementObject mobject in msearchar.Get())
        {
            comboBox1.Items.Add(mobject["Name"]);
        }
    }
    catch (Exception e) { MessageBox.Show(e.ToString()); }
}

private void button1_Click(object sender, EventArgs e)
{
    FolderBrowserDialog fbd = new FolderBrowserDialog();
    fbd.ShowDialog();
    textBox1.Text = fbd.SelectedPath.ToString();
}

private void button2_Click(object sender, EventArgs e)
{
    DirectoryInfo myDirectoryInfo = new DirectoryInfo(textBox1.Text);

    DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl();
    string User = System.Environment.UserDomainName + "\\" + comboBox1.SelectedItem.ToString();

    myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(User, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow));
    //myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(User, FileSystemRights.Write, InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow));

    myDirectoryInfo.SetAccessControl(myDirectorySecurity);
    MessageBox.Show("Permissions Altered Successfully" + User);
}

Этот код уже успешно добавленПользователь для папки, но права доступа, установленные для этой папки, вообще не наследуются.Я что-то пропустил?Или кто-то может подсказать мне, как наследовать разрешение на эту папку?

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

Если вы унаследовали, что вы имеете в виду, что все дочерние объекты получают одинаковые разрешения, вам необходимо установить для PropagationFlags значение InheritOnly.Кроме того, если вы хотите, чтобы ваши файлы также соответствовали разрешениям набора правил, измените InheritanceFlags на ObjectInherit.попробуйте использовать эту строку ниже.

myDirectoryInfo.AddAccessRule(new FileSystemAccessRule(User, FileSystemRights.FullControl, InheritanceFlags.ObjectInherit, PropagationFlags.InheritOnly, AccessControlType.Allow)); 
0 голосов
/ 10 февраля 2012

Мне кажется, вы просто пропустили этот флаг, к которому вы бы присоединились, используя побитовый оператор в вашем списке параметров:

InheritanceFlags.ObjectInherit

В этой теме есть более подробная информация, в том числе ссылка на электронную таблицу Google с матрицей разрешений и настроек: Установка флагов наследования и распространения с помощью set-acl и powershell

Надеюсь, это поможет ...

...