1

我正在使用 java7 文件 api。用于设置我搜索并能够更改所有者属性的文件的所有者。我的代码是

public static void main(String[] args){

    Path zip=Paths.get("/home/ritesh/hello");
    try{ 
        FileOwnerAttributeView view 
             = Files.getFileAttributeView(zip,FileOwnerAttributeView.class);

        UserPrincipalLookupService lookupService
             =FileSystems.getDefaullt().getUserPrincipalLookupService();

        UserPrincipal owner=null;

        try{ owner =lookupService.lookupPrincipalByName("rashmi");}
        catch(UserPrincipalNotFoundException e){System.out.println("User not found");}

        view.setOwner(owner);

    } catch (IOException e){
        e.printStackTrace();}
    }

从此代码中,我可以设置文件的所有者。但我的任务是授予用户(rashmi)对文件的读取访问权限,并为另外一个用户授予读取/写入访问权限。如何授予用户特定访问权限,请给予一些代码或链接,以便我可以完成我的任务。

4

2 回答 2

2

这取自 Java 7 Javadoc 用于AclFileAttributeView(稍作重新格式化):

 // lookup "joe"
 UserPrincipal joe = file.getFileSystem().getUserPrincipalLookupService()
     .lookupPrincipalByName("joe");

 // get view
 AclFileAttributeView view = Files.getFileAttributeView(file,
                                       AclFileAttributeView.class);

 // create ACE to give "joe" read access
 AclEntry entry = AclEntry.newBuilder()
     .setType(AclEntryType.ALLOW)
     .setPrincipal(joe)
     .setPermissions(AclEntryPermission.READ_DATA,
                     AclEntryPermission.READ_ATTRIBUTES)
     .build();

 // read ACL, insert ACE, re-write ACL
 List<AclEntry> acl = view.getAcl();
 acl.add(0, entry);   // insert before any DENY entries
 view.setAcl(acl);

您需要使用正确的AclEntry代码。请参阅AclFileAttributeView Javadoc

于 2013-05-03T15:37:44.333 回答
0

你必须了解操作系统的权限策略,你不能为不同的用户指定不同的权限,你必须这样做。

文件权限用 3 个八进制数(以 8 为底)定义,即 3 组 3 个二进制数,每 3 位代表Read,Write,Execute 第一组是Owner,第二组是Group,第三组是Other

因此,如果您想授予不同的权限,您可以将 Group 属性设置为具有读取和写入权限,而 Other 只是读取权限,之后,您必须将您希望能够读取和写入的用户添加到该组.

于 2013-05-03T15:46:30.937 回答