博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 判断用户是否对路径拥有访问权限
阅读量:7004 次
发布时间:2019-06-27

本文共 2973 字,大约阅读时间需要 9 分钟。

原文:

如何获取当前系统用户对文件/文件夹的操作权限?

 1.获取安全信息DirectorySecurity

DirectorySecurity fileAcl = Directory.GetAccessControl(folder);

通过Directory.GetAccessControl获取文件夹的权限/安全信息

详细介绍,可参考

对文件/文件夹权限的详细操作,可参考一篇博客

2. 获取文件夹访问权限列表FileSystemAccessRule

var rules = fileAcl.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)).OfType<FileSystemAccessRule>().ToList();

GetAccessRules()方法返回的是AuthorizationRule集合,此处只需要获取文件权限。

继承自AuthorizationRule,并新增俩个属性

  • AccessControlType -- 枚举 Allow/Deny
  • FileSystemRights -- 对文件的访问权限详细信息(读/写等),可见下面列表: 
1   /// 定义要创建访问和审核规则时使用的访问权限。 2   [Flags] 3   public enum FileSystemRights 4   { 5     ReadData = 1, 6     ListDirectory = ReadData, // 0x00000001 7     WriteData = 2, 8     CreateFiles = WriteData, // 0x00000002 9     AppendData = 4,10     CreateDirectories = AppendData, // 0x0000000411     ReadExtendedAttributes = 8,12     WriteExtendedAttributes = 16, // 0x0000001013     ExecuteFile = 32, // 0x0000002014     Traverse = ExecuteFile, // 0x0000002015     DeleteSubdirectoriesAndFiles = 64, // 0x0000004016     ReadAttributes = 128, // 0x0000008017     WriteAttributes = 256, // 0x0000010018     Delete = 65536, // 0x0001000019     ReadPermissions = 131072, // 0x0002000020     ChangePermissions = 262144, // 0x0004000021     TakeOwnership = 524288, // 0x0008000022     Synchronize = 1048576, // 0x0010000023     FullControl = Synchronize | TakeOwnership | ChangePermissions | ReadPermissions | Delete | WriteAttributes | ReadAttributes | DeleteSubdirectoriesAndFiles | Traverse | WriteExtendedAttributes | ReadExtendedAttributes | CreateDirectories | CreateFiles | ListDirectory, // 0x001F01FF24     Read = ReadPermissions | ReadAttributes | ReadExtendedAttributes | ListDirectory, // 0x0002008925     ReadAndExecute = Read | Traverse, // 0x000200A926     Write = WriteAttributes | WriteExtendedAttributes | CreateDirectories | CreateFiles, // 0x0000011627     Modify = Write | ReadAndExecute | Delete, // 0x000301BF28   }
View Code

 因为AuthorizationRule中,IdentityReference对应权限的用户/用户组标识,格式为:"MYDOMAIN\MyAccount"

所以,如通过当前系统用户名与IdentityReference匹配,即可获取FileSystemAccessRule权限。如何获取用户名,见下一段落

3. 获取当前系统用户名/用户组

通过 System.Environment.UserDomainName 和 System.Environment.UserName 取得当前用户名

对当前系统用户名/用户组的其它操作,可参考

因此,将Path.Combine(Environment.UserDomainName, Environment.UserName)与IdentityReference.Value比较,获取当前用户对文件夹的权限信息

详细实现如下:

1     ///  2     /// 检查当前用户是否拥有此文件夹的操作权限 3     ///  4     ///  5     /// 
6 public static bool HasOperationPermission(string folder) 7 { 8 var currentUserIdentity = Path.Combine(Environment.UserDomainName, Environment.UserName); 9 10 DirectorySecurity fileAcl = Directory.GetAccessControl(folder);11 var userAccessRules = fileAcl.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)).OfType
().Where(i=>i.IdentityReference.Value==currentUserIdentity).ToList();12 13 return userAccessRules.Any(i => i.AccessControlType == AccessControlType.Deny);14 }

 

转载地址:http://boytl.baihongyu.com/

你可能感兴趣的文章
【Java习作】提取汉字拼音首字母(Java版)
查看>>
基于WebSphere与Domino的电子商务网站构架分析
查看>>
Apache 内存暴增解决方法
查看>>
演示:Linux工程环境应用实训(防火墙、NAT、静态路由)详细配步骤
查看>>
10月第4周安全回顾 PDF漏洞攻击泛滥 趋势收购Provilla
查看>>
Citrix VDI实战攻略之六:构建虚拟桌面
查看>>
手把手教你将CMS论坛数据导入到SQL Server数据库里
查看>>
02-Windows Server 2012 R2 会话远程桌面-快速部署(RemoteApp)
查看>>
如何将word中的图片复制到windows live writer 保持大小不变--清晰度不变
查看>>
Operations Manager 2007 R2系列之域控客户端代理安装
查看>>
asp.net 1.1 web.config 讲解
查看>>
Java☞DES加解密算法简介及实现
查看>>
Drupal7核心安装篇-Ubuntu 14.04 LTS
查看>>
【物联网中间件平台-02】YFIOs技术白皮书(V1.1)
查看>>
ORA-06550 ,has been detected in fnd_global.initialize[fnd_init_sql].
查看>>
从编译原理看一个解释器的实现
查看>>
android Scroller
查看>>
柯洁食言:明年四月,再战AI
查看>>
开源日志库Logger的剖析分析
查看>>
netty4.0 Server和Client的通信
查看>>