我有一个C#网络应用程序,它会提示管理员提供网络代理身份验证信息。我询问用户是否要保存此信息,如果他们选择是,我会在用户的唯一本地文件中加密。我想删除除创建它的用户以外的所有文件权限,但是除了能够删除该文件的所有其他用户之外。
现在,我在下面找到了MS文章,但如果我不知道首先在文件上设置的默认用户,它就无济于事。是否删除了所有文件权限?然后,我可以添加我想要为当前用户的完全访问权限设置的个人权限以及“所有用户”或“经过身份验证的用户”的删除权限,这些权限根据Windows的版本而有所不同。 http://msdn.microsoft.com/en-us/library/system.io.file.setaccesscontrol.aspx
答案 0 :(得分:6)
我想出来了..
public void SetFileSecurity(String filePath, String domainName, String userName)
{
//get file info
FileInfo fi = new FileInfo(filePath);
//get security access
FileSecurity fs = fi.GetAccessControl();
//remove any inherited access
fs.SetAccessRuleProtection(true, false);
//get any special user access
AuthorizationRuleCollection rules = fs.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
//remove any special access
foreach (FileSystemAccessRule rule in rules)
fs.RemoveAccessRule(rule);
//add current user with full control.
fs.AddAccessRule(new FileSystemAccessRule(domainName + "\\" + userName, FileSystemRights.FullControl, AccessControlType.Allow));
//add all other users delete only permissions.
fs.AddAccessRule(new FileSystemAccessRule("Authenticated Users", FileSystemRights.Delete, AccessControlType.Allow));
//flush security access.
File.SetAccessControl(filePath, fs);
}
答案 1 :(得分:0)
答案 2 :(得分:0)
如果您需要删除特定组,则可以使用此方法;
public static void RemoveGroupPermission(string path, string group_name)
{
long begin = Datetime.Now.Ticks;
DirectoryInfo dirInfo = new DirectoryInfo(path);
DirectorySecurity dirSecurity = dirInfo.GetAccessControl();
dirSecurity.RemoveAccessRuleAll(new FileSystemAccessRule(Environment.UserDomainName +
@"\" + group_name, 0, 0));
dirInfo.SetAccessControl(dirSecurity);
long end = DateTime.Now.Ticks;
Console.WriteLine("Tick : " + (end - begin));
}