c#从安全选项卡中删除用户
我正在从文件夹中删除对给定用户的权限。我希望能够从文件夹安全选项卡列表中删除该用户 摘录代码c#从安全选项卡中删除用户,c#,C#,我正在从文件夹中删除对给定用户的权限。我希望能够从文件夹安全选项卡列表中删除该用户 摘录代码 myDirectorySecurity.RemoveAccessRule(new FileSystemAccessRule(User, FileSystemRights.Write | FileSystemRights.Read, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFla
myDirectorySecurity.RemoveAccessRule(new FileSystemAccessRule(User, FileSystemRights.Write | FileSystemRights.Read, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
PropagationFlags.None, AccessControlType.Allow));
myDirectoryInfo.SetAccessControl(myDirectorySecurity);
我想在删除权限后删除该用户
我试着把它添加到我的代码中
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);
}
我们使用以下命令将用户/组从他们不再有权访问的文件夹中删除
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);
}
}
我们使用以下命令将用户/组从他们不再有权访问的文件夹中删除
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);
}
}
如果您不必在C#中执行此操作,那么可以使用一个命令行实用程序。谷歌“icacls”(或旧版本windows的“cacls”)如果你不必用C#来做这件事,你可以使用一个命令行实用程序。Google“icacls”(或旧版本windows的“cacls”)这不会从指定文件夹中删除active directory?中的用户。我尝试将其添加到代码中,但没有效果,显然是替换了变量。我建议打印出文件系统认为现有用户的内容。然后,您可以使您的输入与预期相符。foreach(规则中的var规则)Log.InfoFormat(“User:{0}”,rule.IdentityReference.Value)User=domain\User和fuser=User因为我已经为每一个都有了一个,所以我修改了代码并进行了调整,最后使用了两行代码,但没有工作。您的原始帖子中的代码是如何实现我发布的内容的?如果是的话,它就不会起作用。您必须获取DirectorySecurity对象上的实际规则列表并删除其中一个。您不能仅执行RemoveAccessRule(新文件系统AccessRule(…))这不会仅从指定文件夹中删除active directory?中的用户?我尝试将其添加到代码中,但没有任何效果,显然是替换了变量。我建议打印出文件系统认为现有用户是什么。然后,您可以使您的输入与预期相符。foreach(规则中的var规则)Log.InfoFormat(“User:{0}”,rule.IdentityReference.Value)User=domain\User和fuser=User因为我已经为每一个都有了一个,所以我修改了代码并进行了调整,最后使用了两行代码,但没有工作。您的原始帖子中的代码是如何实现我发布的内容的?如果是的话,它就不会起作用。您必须获取DirectorySecurity对象上的实际规则列表并删除其中一个。您不能只执行RemoveAccessRule(新文件系统AccessRule(…)