C# 判断用户是否对路径拥有访问权限

简介: 原文:C# 判断用户是否对路径拥有访问权限如何获取当前系统用户对文件/文件夹的操作权限?  1.获取安全信息DirectorySecurity DirectorySecurity fileAcl = Directory.
原文: C# 判断用户是否对路径拥有访问权限

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

 1.获取安全信息DirectorySecurity

DirectorySecurity fileAcl = Directory.GetAccessControl(folder);

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

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

FileSystemAccessRule继承自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, // 0x00000004
11     ReadExtendedAttributes = 8,
12     WriteExtendedAttributes = 16, // 0x00000010
13     ExecuteFile = 32, // 0x00000020
14     Traverse = ExecuteFile, // 0x00000020
15     DeleteSubdirectoriesAndFiles = 64, // 0x00000040
16     ReadAttributes = 128, // 0x00000080
17     WriteAttributes = 256, // 0x00000100
18     Delete = 65536, // 0x00010000
19     ReadPermissions = 131072, // 0x00020000
20     ChangePermissions = 262144, // 0x00040000
21     TakeOwnership = 524288, // 0x00080000
22     Synchronize = 1048576, // 0x00100000
23     FullControl = Synchronize | TakeOwnership | ChangePermissions | ReadPermissions | Delete | WriteAttributes | ReadAttributes | DeleteSubdirectoriesAndFiles | Traverse | WriteExtendedAttributes | ReadExtendedAttributes | CreateDirectories | CreateFiles | ListDirectory, // 0x001F01FF
24     Read = ReadPermissions | ReadAttributes | ReadExtendedAttributes | ListDirectory, // 0x00020089
25     ReadAndExecute = Read | Traverse, // 0x000200A9
26     Write = WriteAttributes | WriteExtendedAttributes | CreateDirectories | CreateFiles, // 0x00000116
27     Modify = Write | ReadAndExecute | Delete, // 0x000301BF
28   }
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 }

 

目录
打赏
0
0
0
0
216
分享
相关文章
C# 判断用户是否对路径拥有访问权限
如何获取当前系统用户对文件/文件夹的操作权限?  1.获取安全信息DirectorySecurity DirectorySecurity fileAcl = Directory.GetAccessControl(folder); 通过Directory.
2063 0
查看权限控制信息,ls -l可以查看列表数据,展现权限细节,1号位表示权限细节,有10个槽位,第一个位置 -表示文件,d文件夹 | 软链接,前3部分表示所属用户权限,中间用户组权限,后部分其他用户权限
查看权限控制信息,ls -l可以查看列表数据,展现权限细节,1号位表示权限细节,有10个槽位,第一个位置 -表示文件,d文件夹 | 软链接,前3部分表示所属用户权限,中间用户组权限,后部分其他用户权限
查看权限控制信息,ls -l可以查看列表数据,展现权限细节,1号位表示权限细节,有10个槽位,第一个位置 -表示文件,d文件夹 | 软链接,前3部分表示所属用户权限,中间用户组权限,后部分其他用户权限
win10删除文件时权限不够(你需要来自Administrators 的权限才能对此文件进行更改,无法枚举容器的对象,访问被拒绝)
win10删除文件时权限不够(你需要来自Administrators 的权限才能对此文件进行更改,无法枚举容器的对象,访问被拒绝)
7114 0
win10删除文件时权限不够(你需要来自Administrators 的权限才能对此文件进行更改,无法枚举容器的对象,访问被拒绝)
深入解析Linux命令id:理解用户身份与权限
`id`命令在Linux中用于显示用户身份(UID, GID和附加组)。它查看系统用户数据库获取信息。参数如`-u`显示UID,`-g`显示GID,`-G`显示附加组,结合`-n`显示名称而非ID。用于确认命令执行者身份,确保权限正确。在脚本中使用时注意权限管理,遵循最小权限原则。
6.4 文件与目录的默认权限与隐藏权限
6.4 文件与目录的默认权限与隐藏权限
106 0
项目之用户登录和访问权限的控制(6)
项目之用户登录和访问权限的控制(6)
287 0
项目之用户登录和访问权限的控制(5)
项目之用户登录和访问权限的控制(5)
174 0