2013-10-08 50 views
1

我正在使用java.nio.file.attribute.AclFileAttributeView和AclEntry来收集系统上的所有文件ACL。事情很直接,直到我意识到图书馆没有办法检查委托人是否是用户或组。Java nio AclEntry。如何知道委托人是组还是用户

该函数只需要返回具有读权限的用户(不是组),你有什么建议吗?

这里是我的代码

public String[] getViewer(String path) 
{ 
    // List of the ACL enum of read permission 
    List<AclEntryPermission> readAcl = new ArrayList<AclEntryPermission>(); 
    readAcl.add(AclEntryPermission.READ_ATTRIBUTES); 
    readAcl.add(AclEntryPermission.READ_DATA); 
    readAcl.add(AclEntryPermission.SYNCHRONIZE); 
    readAcl.add(AclEntryPermission.READ_NAMED_ATTRS); 

    AclFileAttributeView acl = Files.getFileAttributeView(Paths.get(path), 
      AclFileAttributeView.class); 
    List<String> names = new ArrayList<String>(); 
    if (acl!=null) 
    { 
     try { 
      List<AclEntry> aclList = acl.getAcl(); 
      for (AclEntry entry: aclList) 
      { 
       //System.out.println(a.principal() + ":"); 
       //System.out.println(entry.permissions() + "\n"); 
       if (entry.permissions().containsAll(readAcl)) 
       { 
        // Only add principal if it is not a group 
        if (entry.principal.isGroup()) 
        names.add(entry.principal().getName()); 
       } 
      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
    return names.toArray(new String[]{}); 
} 

回答

0

要只是回答你的问题的草案,检查GroupPrincipal是可能的。您可以使用

if (entry.principal() instanceof GroupPrincipal) 

检查。

但是,我没有看到你能用这个检查结果做什么。

+0

谢谢,我用它在AD中查看组。 – MikeNQ

相关问题