private static Privilege parsePrivilege(Revoke statement, String privilegeString) { for (Privilege privilege : Privilege.values()) { if (privilege.name().equalsIgnoreCase(privilegeString)) { return privilege; } } throw new SemanticException(INVALID_PRIVILEGE, statement, "Unknown privilege: '%s'", privilegeString); } }
private static Privilege parsePrivilege(Grant statement, String privilegeString) { for (Privilege privilege : Privilege.values()) { if (privilege.name().equalsIgnoreCase(privilegeString)) { return privilege; } } throw new SemanticException(INVALID_PRIVILEGE, statement, "Unknown privilege: '%s'", privilegeString); } }
public Set<PrivilegeInfo> toPrivilegeInfo() { switch (getHivePrivilege()) { case SELECT: return ImmutableSet.of(new PrivilegeInfo(Privilege.SELECT, isGrantOption())); case INSERT: return ImmutableSet.of(new PrivilegeInfo(Privilege.INSERT, isGrantOption())); case DELETE: return ImmutableSet.of(new PrivilegeInfo(Privilege.DELETE, isGrantOption())); case UPDATE: return ImmutableSet.of(new PrivilegeInfo(Privilege.UPDATE, isGrantOption())); case OWNERSHIP: return Arrays.asList(Privilege.values()).stream() .map(privilege -> new PrivilegeInfo(privilege, Boolean.TRUE)) .collect(Collectors.toSet()); } return null; }
private static Privilege parsePrivilege(Grant statement, String privilegeString) { for (Privilege privilege : Privilege.values()) { if (privilege.name().equalsIgnoreCase(privilegeString)) { return privilege; } } throw new SemanticException(INVALID_PRIVILEGE, statement, "Unknown privilege: '%s'", privilegeString); } }
@Override public CompletableFuture<?> execute(Grant statement, TransactionManager transactionManager, Metadata metadata, AccessControl accessControl, QueryStateMachine stateMachine) { Session session = stateMachine.getSession(); QualifiedObjectName tableName = createQualifiedObjectName(session, statement, statement.getTableName()); Optional<TableHandle> tableHandle = metadata.getTableHandle(session, tableName); if (!tableHandle.isPresent()) { throw new SemanticException(MISSING_TABLE, statement, "Table '%s' does not exist", tableName); } Set<Privilege> privileges; if (statement.getPrivileges().isPresent()) { privileges = statement.getPrivileges().get().stream() .map(privilege -> parsePrivilege(statement, privilege)) .collect(toImmutableSet()); } else { // All privileges privileges = ImmutableSet.copyOf(Privilege.values()); } // verify current identity has permissions to grant permissions for (Privilege privilege : privileges) { accessControl.checkCanGrantTablePrivilege(session.getIdentity(), privilege, tableName); } metadata.grantTablePrivileges(session, tableName, privileges, statement.getGrantee(), statement.isWithGrantOption()); return completedFuture(null); }