/** * @return the set of {@link AclAction}s implied by this mode */ public Set<AclAction> toAclActionSet() { Set<AclAction> actions = new HashSet<>(); if (imply(READ)) { actions.add(AclAction.READ); } if (imply(WRITE)) { actions.add(AclAction.WRITE); } if (imply(EXECUTE)) { actions.add(AclAction.EXECUTE); } return actions; }
/** * Updates permitted actions based on the mode bits. * * For example, if bits imply READ, then READ is added to permitted actions, otherwise, * READ is removed from permitted actions. * Same logic applies to WRITE and EXECUTE. * * @param bits the mode bits */ public void updateByModeBits(Mode.Bits bits) { // Each index equals to corresponding AclAction's ordinal. // E.g. Mode.Bits.READ corresponds to AclAction.READ, the former has index 0 in indexedBits, // the later has ordinal 0 in AclAction. Mode.Bits[] indexedBits = new Mode.Bits[]{ Mode.Bits.READ, Mode.Bits.WRITE, Mode.Bits.EXECUTE }; for (int i = 0; i < 3; i++) { if (bits.imply(indexedBits[i])) { mActions.set(i); } else { mActions.clear(i); } } }
@Override public boolean checkPermission(String user, List<String> groups, Inode<?> inode, Mode.Bits permission) { short mode = inode.getMode(); if (user.equals(inode.getOwner())) { return Mode.extractOwnerBits(mode).imply(permission); } if (groups.contains(inode.getGroup())) { return Mode.extractGroupBits(mode).imply(permission); } return Mode.extractOtherBits(mode).imply(permission); }
/** * Tests the {@link Mode.Bits#imply(Mode.Bits)} method. */ @Test public void implies() { assertTrue(Mode.Bits.ALL.imply(Mode.Bits.READ)); assertTrue(Mode.Bits.ALL.imply(Mode.Bits.WRITE)); assertTrue(Mode.Bits.ALL.imply(Mode.Bits.EXECUTE)); assertTrue(Mode.Bits.ALL.imply(Mode.Bits.READ_EXECUTE)); assertTrue(Mode.Bits.ALL.imply(Mode.Bits.WRITE_EXECUTE)); assertTrue(Mode.Bits.ALL.imply(Mode.Bits.ALL)); assertTrue(Mode.Bits.READ_EXECUTE.imply(Mode.Bits.READ)); assertTrue(Mode.Bits.READ_EXECUTE.imply(Mode.Bits.EXECUTE)); assertFalse(Mode.Bits.READ_EXECUTE.imply(Mode.Bits.WRITE)); assertTrue(Mode.Bits.WRITE_EXECUTE.imply(Mode.Bits.WRITE)); assertTrue(Mode.Bits.WRITE_EXECUTE.imply(Mode.Bits.EXECUTE)); assertFalse(Mode.Bits.WRITE_EXECUTE.imply(Mode.Bits.READ)); assertTrue(Mode.Bits.READ_WRITE.imply(Mode.Bits.WRITE)); assertTrue(Mode.Bits.READ_WRITE.imply(Mode.Bits.READ)); assertFalse(Mode.Bits.READ_WRITE.imply(Mode.Bits.EXECUTE)); }
/** * @return the set of {@link AclAction}s implied by this mode */ public AclActions toAclActions() { AclActions actions = new AclActions(); if (imply(READ)) { actions.add(AclAction.READ); } if (imply(WRITE)) { actions.add(AclAction.WRITE); } if (imply(EXECUTE)) { actions.add(AclAction.EXECUTE); } return actions; } }