Skip to content

Commit

Permalink
preInitialize
Browse files Browse the repository at this point in the history
  • Loading branch information
ivakegg committed Dec 7, 2023
1 parent a51a202 commit 573fdf0
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -355,4 +355,9 @@ public void validate(Map<String,List<String>> parameters) throws IllegalArgument
public UserOperations getUserOperations() {
return delegate.getUserOperations();
}

@Override
public void preInitialize(Query settings, Set<Authorizations> queryAuths) {
delegate.preInitialize(settings, queryAuths);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -417,4 +417,15 @@ default long getResultLimit(Query settings) {
* @return A user operations interface implementation. Null if NA (i.e. the local principal is sufficient)
*/
UserOperations getUserOperations();

/**
* This is to be used prior to requesting user operations for a logic that is not yet initialized.
* The main use case is for the FilteredQueryLogic to allow it to filter this call as well.
* Most query logics will not implement this.
* @param settings
* @param userAuthorizations
*/
default void preInitialize(Query settings, Set<Authorizations> userAuthorizations) {
// noop
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,7 @@ public Set<Authorizations> updateRuntimeAuthorizationsAndQueryAuths(QueryLogic<?
if (userOperations != null) {
principal = userOperations.getRemoteUser(principal);
}
logic.preInitialize(settings, AuthorizationsUtil.buildAuthorizations(Collections.singleton(requestedAuths)));
if (logic.getUserOperations() != null) {
queryPrincipal = logic.getUserOperations().getRemoteUser(queryPrincipal);
}
Expand Down Expand Up @@ -510,7 +511,14 @@ public Map<String,QueryLogic<?>> getInitializedLogics() {
public void setQueryLogics(Map<String,QueryLogic<?>> queryLogics) {
this.queryLogics = new TreeMap<>(queryLogics);
}


@Override
public void preInitialize(Query settings, Set<Authorizations> queryAuths) {
for (QueryLogic logic : getUninitializedLogics().values()) {
logic.preInitialize(settings, queryAuths);
}
}

public UserOperations getUserOperations() {
// if any of the underlying logics have a non-null user operations, then
// we need to return an instance that combines auths across the underlying
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,15 @@ public void setFilter(QueryLogicFilter filter) {
public interface QueryLogicFilter {
boolean canRunQuery(Query settings, Set<Authorizations> auths);
}


@Override
public void preInitialize(Query settings, Set<Authorizations> userAuthorizations) {
// setup the filter
if (canRunQuery(settings, userAuthorizations)) {
super.preInitialize(settings, userAuthorizations);
}
}

public boolean canRunQuery(Query settings, Set<Authorizations> runtimeQueryAuthorizations) {
if (!filtered) {
if (!filter.canRunQuery(settings, runtimeQueryAuthorizations)) {
Expand Down

0 comments on commit 573fdf0

Please sign in to comment.