1

特定のユーザーに対するフォルダーからの削除権限を削除していますフォルダーのセキュリティタブリストからユーザーを削除できるようにしたい

抜粋コード

myDirectorySecurity.RemoveAccessRule(new FileSystemAccessRule(User, FileSystemRights.Write | FileSystemRights.Read, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
     PropagationFlags.None, AccessControlType.Allow));

                myDirectoryInfo.SetAccessControl(myDirectorySecurity);

権限が削除された後、ユーザーを削除したい。

写真http://i93.photobucket.com/albums/l66/reavenm/Capture_zps51403cae.png

ここでコードに追加しようとしました

DataSet dataSet = new DataSet(); 
string sql = "SELECT key, fdate, user, perm, sfolder FROM  permuser WHERE        fdate=CURDATE()";

MySqlConnection connection = new MySqlConnection(MyConString);
MySqlCommand cmdSel = new MySqlCommand(sql, connection);
new MySqlDataAdapter(cmdSel).Fill(dataSet, "permuser");


foreach (DataRow row in dataSet.Tables["permuser"].Rows)
    {
         string fuser = row["user"].ToString();
         string pathtxt = row["sfolder"].ToString();

        DirectoryInfo myDirectoryInfo = new DirectoryInfo(pathtxt);
        DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl();
        string User = System.Environment.UserDomainName + "\\" + fuser;


                myDirectorySecurity.RemoveAccessRule(new FileSystemAccessRule(User, FileSystemRights.Write | FileSystemRights.Read, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
     PropagationFlags.None, AccessControlType.Allow));

                myDirectoryInfo.SetAccessControl(myDirectorySecurity);
                   //it should go here
    }

connection.Close();
connection.Dispose();
}


catch (MySqlException ex)
{
Console.WriteLine(ex.Message);
Environment.Exit(0);
}
4

1 に答える 1

1

以下を使用して、ユーザー/グループがアクセスできなくなったフォルダーからユーザー/グループを削除します。

var accountToRemove = "Some account";
var security = Directory.GetAccessControl(path);
var rules = security.GetAccessRules(true, true, typeof(NTAccount));

foreach (FileSystemAccessRule rule in rules)
{
    if (rule.IdentityReference.Value == accountToRemove) 
        security.RemoveAccessRuleSpecific(rule);

}

foreachループを次のように置き換えます

foreach (DataRow row in dataSet.Tables["permuser"].Rows)
{
     string fuser = row["user"].ToString();
     string pathtxt = row["sfolder"].ToString();

    DirectoryInfo myDirectoryInfo = new DirectoryInfo(pathtxt);
    DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl();
    string User = System.Environment.UserDomainName + "\\" + fuser;

    var rules = myDirectorySecurity.GetAccessRules(true, true, typeof(NTAccount));
    foreach( var rule in rules)
    {
        if (rule.IdentityReference.Value == User) 
            security.RemoveAccessRuleSpecific(rule);

    }
}
于 2012-09-19T15:15:29.443 に答える