package com.airbnb.airpal.core;
import com.airbnb.airpal.presto.Table;
import com.google.common.base.Predicate;
import javax.annotation.Nullable;
import static java.lang.String.format;
public class AuthorizationUtil
{
public static boolean isAuthorizedRead(AirpalUser subject, Table table)
{
return isAuthorizedRead(subject, table.getConnectorId(), table.getSchema(), table.getTable());
}
public static boolean isAuthorizedRead(AirpalUser subject, String connectorId, String schema, String table)
{
return subject.isPermitted(format("read:%s.%s:%s", connectorId, schema, table));
}
public static boolean isAuthorizedWrite(AirpalUser subject, String connectorId, String schema, String table)
{
return subject.isPermitted(format("write:%s.%s:%s", connectorId, schema, table));
}
public static class AuthorizedTablesPredicate
implements Predicate<Table>
{
private final AirpalUser subject;
public AuthorizedTablesPredicate(AirpalUser subject)
{
this.subject = subject;
}
@Override
public boolean apply(@Nullable Table input)
{
if (input == null) {
return false;
}
return isAuthorizedRead(subject, input);
}
}
}