Limit assignee suggestions to users that can see the change
Bug: Issue 5181 Change-Id: Ib64248a285e8feca1fd8f18e825f302d09d252ed Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:

committed by
David Pursehouse

parent
f4f0f8a222
commit
191aaa7e24
@@ -27,6 +27,7 @@ import com.google.gwt.core.client.JavaScriptObject;
|
|||||||
import com.google.gwt.core.client.JsArray;
|
import com.google.gwt.core.client.JsArray;
|
||||||
import com.google.gwt.core.client.JsArrayString;
|
import com.google.gwt.core.client.JsArrayString;
|
||||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||||
|
import com.google.gwtorm.client.KeyUtil;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@@ -49,7 +50,7 @@ public class AccountApi {
|
|||||||
public static void suggest(String query, int limit, AsyncCallback<JsArray<AccountInfo>> cb) {
|
public static void suggest(String query, int limit, AsyncCallback<JsArray<AccountInfo>> cb) {
|
||||||
new RestApi("/accounts/")
|
new RestApi("/accounts/")
|
||||||
.addParameterTrue("suggest")
|
.addParameterTrue("suggest")
|
||||||
.addParameter("q", query)
|
.addParameterRaw("q", KeyUtil.encode(query))
|
||||||
.addParameter("n", limit)
|
.addParameter("n", limit)
|
||||||
.background()
|
.background()
|
||||||
.get(cb);
|
.get(cb);
|
||||||
|
@@ -102,6 +102,7 @@ public class Assignee extends Composite {
|
|||||||
this.changeId = info.legacyId();
|
this.changeId = info.legacyId();
|
||||||
this.project = info.projectNameKey();
|
this.project = info.projectNameKey();
|
||||||
this.canEdit = info.hasActions() && info.actions().containsKey("assignee");
|
this.canEdit = info.hasActions() && info.actions().containsKey("assignee");
|
||||||
|
assigneeSuggestOracle.setChange(info);
|
||||||
setAssignee(info.assignee());
|
setAssignee(info.assignee());
|
||||||
editAssigneeIcon.setVisible(canEdit);
|
editAssigneeIcon.setVisible(canEdit);
|
||||||
if (!canEdit) {
|
if (!canEdit) {
|
||||||
|
@@ -16,6 +16,7 @@ package com.google.gerrit.client.change;
|
|||||||
|
|
||||||
import com.google.gerrit.client.account.AccountApi;
|
import com.google.gerrit.client.account.AccountApi;
|
||||||
import com.google.gerrit.client.info.AccountInfo;
|
import com.google.gerrit.client.info.AccountInfo;
|
||||||
|
import com.google.gerrit.client.info.ChangeInfo;
|
||||||
import com.google.gerrit.client.rpc.GerritCallback;
|
import com.google.gerrit.client.rpc.GerritCallback;
|
||||||
import com.google.gerrit.client.rpc.Natives;
|
import com.google.gerrit.client.rpc.Natives;
|
||||||
import com.google.gerrit.client.ui.AccountSuggestOracle.AccountSuggestion;
|
import com.google.gerrit.client.ui.AccountSuggestOracle.AccountSuggestion;
|
||||||
@@ -27,10 +28,17 @@ import java.util.List;
|
|||||||
|
|
||||||
/** REST API based suggestion Oracle for assignee */
|
/** REST API based suggestion Oracle for assignee */
|
||||||
public class AssigneeSuggestOracle extends SuggestAfterTypingNCharsOracle {
|
public class AssigneeSuggestOracle extends SuggestAfterTypingNCharsOracle {
|
||||||
|
|
||||||
|
private ChangeInfo change;
|
||||||
|
|
||||||
|
public void setChange(ChangeInfo change) {
|
||||||
|
this.change = change;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void _onRequestSuggestions(Request req, Callback cb) {
|
protected void _onRequestSuggestions(Request req, Callback cb) {
|
||||||
AccountApi.suggest(
|
AccountApi.suggest(
|
||||||
req.getQuery(),
|
getQuery(req),
|
||||||
req.getLimit(),
|
req.getLimit(),
|
||||||
new GerritCallback<JsArray<AccountInfo>>() {
|
new GerritCallback<JsArray<AccountInfo>>() {
|
||||||
@Override
|
@Override
|
||||||
@@ -49,4 +57,13 @@ public class AssigneeSuggestOracle extends SuggestAfterTypingNCharsOracle {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getQuery(Request req) {
|
||||||
|
StringBuilder query = new StringBuilder();
|
||||||
|
query.append(req.getQuery());
|
||||||
|
if (change != null) {
|
||||||
|
query.append(" cansee:").append(change._number());
|
||||||
|
}
|
||||||
|
return query.toString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -198,6 +198,14 @@ public class AccountQueryBuilder extends QueryBuilder<AccountState> {
|
|||||||
protected Predicate<AccountState> defaultField(String query) {
|
protected Predicate<AccountState> defaultField(String query) {
|
||||||
Predicate<AccountState> defaultPredicate =
|
Predicate<AccountState> defaultPredicate =
|
||||||
AccountPredicates.defaultPredicate(args.schema(), checkedCanSeeSecondaryEmails(), query);
|
AccountPredicates.defaultPredicate(args.schema(), checkedCanSeeSecondaryEmails(), query);
|
||||||
|
if (query.startsWith("cansee:")) {
|
||||||
|
try {
|
||||||
|
return cansee(query.substring(7));
|
||||||
|
} catch (OrmException | QueryParseException | PermissionBackendException e) {
|
||||||
|
// Ignore, fall back to default query
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ("self".equalsIgnoreCase(query) || "me".equalsIgnoreCase(query)) {
|
if ("self".equalsIgnoreCase(query) || "me".equalsIgnoreCase(query)) {
|
||||||
try {
|
try {
|
||||||
return Predicate.or(defaultPredicate, AccountPredicates.id(self()));
|
return Predicate.or(defaultPredicate, AccountPredicates.id(self()));
|
||||||
|
Reference in New Issue
Block a user