none
vb.net 查询某用户对文件夹的所有权限 RRS feed

  • 问题

  • 对A用户(比如用户账号为a)查询其在服务器某文件夹的所有权限(高级的如读、写、删除子文件夹、设定权限等14项)并一一显示出来。请问该如何实现?查询很久也得不到想要的答案,跪求高手解决!

    主要目的是查看某文件夹对用户的权限分配吗,把指定用户的权限复制出来即可,便于管理。

    2014年4月4日 1:43

答案

  • 右键单击你想要获取权限的文件夹,然后转到“安全”这个Tab,这里面显示了这个文件夹的所有权限信息,你会发现其实很多权限都是以用户组来设置的,比如,你有一个用户A,属于用户组Users,如果你没有在文件夹安全设置里面对A特别指定了权限,A的权限就跟Users组的权限一样。你要查询权限时,如果用A来查询,是查不到结果的,这时就必须用Users组来查询。

    所以应该先用用户名查询,如果查不到,再用该用户所在的组名来查询。

    当然,如果你在文件夹安全设置里面对用户A特别设置了权限,你用A来查询的话就能直接得到该权限值。

    • 已标记为答案 jeff88622 2014年4月23日 8:18
    2014年4月11日 9:19

全部回复

  • Hi, 主要利用两个函数,一个是Directory.GetAccessControl,另一个是DirectorySecurity.GetAccessRules。但要注意DirectorySecurity.GetAccessRules时不一定能返回某个用户的权限,除非你在文件夹里指定了该用户的权限,否则一般得到的是用户所在组的权限,你可以参考以下代码:

    Imports System.Security.AccessControl
    Imports System.Security.Principal
    Imports System.IO
    
        Private Function GetFileSystemRightsOfFolder(folder As String, userOrGroup As String) As FileSystemRights
            Dim folderSecurity = Directory.GetAccessControl(folder)
            Dim rule = folderSecurity.GetAccessRules(True, True, GetType(NTAccount)).OfType(Of FileSystemAccessRule).Where(Function(r) r.IdentityReference.Value.Contains(userOrGroup)).FirstOrDefault()
            If rule Is Nothing Then
                Return Nothing
            Else
                Return rule.FileSystemRights
            End If
        End Function

    比如用户账户为A,同时用户组为Administrators,你可以先用:

    GetFileSystemRightsOfFolder("d:\123", "A")

    来获取,如果返回Nothing,则可以再用

    GetFileSystemRightsOfFolder("d:\123", "Administrators")

    来获取。

    2014年4月4日 7:52
  • 多谢回复!但问题始终没能解决,我想得到某个用户的高级权限,之前采用过此方法,但返回值为0,倘若换成“Administrators”, 返回值为FullControl。但惟独只能查看管理员的权限。希望能告知如何解决?
    2014年4月11日 8:01
  • 右键单击你想要获取权限的文件夹,然后转到“安全”这个Tab,这里面显示了这个文件夹的所有权限信息,你会发现其实很多权限都是以用户组来设置的,比如,你有一个用户A,属于用户组Users,如果你没有在文件夹安全设置里面对A特别指定了权限,A的权限就跟Users组的权限一样。你要查询权限时,如果用A来查询,是查不到结果的,这时就必须用Users组来查询。

    所以应该先用用户名查询,如果查不到,再用该用户所在的组名来查询。

    当然,如果你在文件夹安全设置里面对用户A特别设置了权限,你用A来查询的话就能直接得到该权限值。

    • 已标记为答案 jeff88622 2014年4月23日 8:18
    2014年4月11日 9:19
  • 非常感谢!突然试了之后发现原来是用户名写错了,用户名改为账号名就成功了!
    2014年4月23日 8:16
  • lapheal大神,你知道如何全面显示用户的权限吗?在用GetFileSystemRightsOfFolder 时,有一个问题就是仅显示合并的权限,比如FullControl 包括了总共下属13个权限。但真正在文件夹里查看权限时会发现这14个权限全部勾上的。有没有可能把这14个权限单独列出呢?

    2014年4月24日 1:00