获取文件夹的权限级别
Get permission level of a folder
我有一个检查权限级别的事件处理程序。
private void button1_Click(object sender, EventArgs e)
{
int id = 1;
XMLPermSheet.CreateXML();
string directory = textBox1.Text;
DirectoryInfo di = new DirectoryInfo(directory);
DirectoryInfo[] sdi = di.GetDirectories();
foreach (DirectoryInfo tdi in sdi)
{
if (!tdi.ToString().EndsWith("System Volume Information") && !tdi.ToString().Contains("$RECYCLE.BIN"))
{
XMLPermSheet.AddPath(tdi.ToString(), id);
DirectorySecurity ds = tdi.GetAccessControl();
foreach (AccessRule rule in ds.GetAccessRules(true, true, typeof(NTAccount)))
{
richTextBox1.AppendText(string.Format("{0} || Identity = {1}; Access = {2} \r\n", tdi.ToString(),
rule.IdentityReference.Value, rule.AccessControlType));
XMLPermSheet.AddIdentity(rule.IdentityReference.Value.ToString(), rule.AccessControlType.ToString(), tdi.ToString());
}
id += 1;
}
}
}
rule.AccessControlType.ToString() returns 仅 "Allow" 或 "Deny" 但我需要这样的东西:
观点:正确
添加:正确
修改:假
删除:假
我怎样才能做到这一点?
您必须将 foreach 中的 AccessRule 更改为 FileSystemAccessRule。然后您可以访问 属性 FileSystemRights。 answer 解释了如何获得权利。
简短版本,关于如何检查用户或组是否有权限:
//Example: Change
bool hasChangePermission = rule.FileSystemRights.HasFlag(FileSystemRights.ChangePermissions);
//Example: Write
bool hasWritePermission = rule.FileSystemRights.HasFlag(FileSystemRights.Write);
这是一个小示例方法:
public string GetRuleAsString(FileSystemAccessRule rule)
{
string userName = rule.IdentityReference.Value;
//Example: Change
bool hasChangePermission = rule.FileSystemRights.HasFlag(FileSystemRights.ChangePermissions);
//Example: Write
bool hasWritePermission = rule.FileSystemRights.HasFlag(FileSystemRights.Write);
return String.Format("{0}\n Change: {1}\n Write: {2}", userName, hasChangePermission, hasWritePermission);
}
我有一个检查权限级别的事件处理程序。
private void button1_Click(object sender, EventArgs e)
{
int id = 1;
XMLPermSheet.CreateXML();
string directory = textBox1.Text;
DirectoryInfo di = new DirectoryInfo(directory);
DirectoryInfo[] sdi = di.GetDirectories();
foreach (DirectoryInfo tdi in sdi)
{
if (!tdi.ToString().EndsWith("System Volume Information") && !tdi.ToString().Contains("$RECYCLE.BIN"))
{
XMLPermSheet.AddPath(tdi.ToString(), id);
DirectorySecurity ds = tdi.GetAccessControl();
foreach (AccessRule rule in ds.GetAccessRules(true, true, typeof(NTAccount)))
{
richTextBox1.AppendText(string.Format("{0} || Identity = {1}; Access = {2} \r\n", tdi.ToString(),
rule.IdentityReference.Value, rule.AccessControlType));
XMLPermSheet.AddIdentity(rule.IdentityReference.Value.ToString(), rule.AccessControlType.ToString(), tdi.ToString());
}
id += 1;
}
}
}
rule.AccessControlType.ToString() returns 仅 "Allow" 或 "Deny" 但我需要这样的东西:
观点:正确
添加:正确
修改:假
删除:假
我怎样才能做到这一点?
您必须将 foreach 中的 AccessRule 更改为 FileSystemAccessRule。然后您可以访问 属性 FileSystemRights。 answer 解释了如何获得权利。
简短版本,关于如何检查用户或组是否有权限:
//Example: Change
bool hasChangePermission = rule.FileSystemRights.HasFlag(FileSystemRights.ChangePermissions);
//Example: Write
bool hasWritePermission = rule.FileSystemRights.HasFlag(FileSystemRights.Write);
这是一个小示例方法:
public string GetRuleAsString(FileSystemAccessRule rule)
{
string userName = rule.IdentityReference.Value;
//Example: Change
bool hasChangePermission = rule.FileSystemRights.HasFlag(FileSystemRights.ChangePermissions);
//Example: Write
bool hasWritePermission = rule.FileSystemRights.HasFlag(FileSystemRights.Write);
return String.Format("{0}\n Change: {1}\n Write: {2}", userName, hasChangePermission, hasWritePermission);
}