Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,6 @@ private void revokeRole(Long roleAssignmentId) {
*/
private List<RoleAssignee> selectedRoleAssignees;
private List<DataFile> selectedFiles = new ArrayList<>();
private final List<RoleAssignee> roleAssigneeList = new ArrayList<>();
private AuthenticatedUser fileRequester;

public List<RoleAssignee> getSelectedRoleAssignees() {
Expand Down Expand Up @@ -316,26 +315,7 @@ public void initAssignDialogForFileRequester(AuthenticatedUser au) {


public List<RoleAssignee> completeRoleAssignee(String query) {
if (roleAssigneeList.isEmpty()) {
for (AuthenticatedUser au : authenticationService.findAllAuthenticatedUsers()) {
roleAssigneeList.add(au);
}
for ( Group g : groupService.findGlobalGroups() ) {
roleAssigneeList.add( g );
}
roleAssigneeList.addAll( explicitGroupService.findAvailableFor(dataset) );

}
List<RoleAssignee> returnList = new ArrayList<>();
for (RoleAssignee ra : roleAssigneeList) {
// @todo unsure if containsIgnore case will work for all locales
if ((StringUtils.containsIgnoreCase(ra.getDisplayInfo().getTitle(), query)
|| StringUtils.containsIgnoreCase(ra.getIdentifier(), query))
&& (selectedRoleAssignees == null || !selectedRoleAssignees.contains(ra))) {
returnList.add(ra);
}
}
return returnList;
return roleAssigneeService.filterRoleAssignees(query, dataset, selectedRoleAssignees);
}

public void grantAccess(ActionEvent evt) {
Expand Down
35 changes: 10 additions & 25 deletions src/main/java/edu/harvard/iq/dataverse/ManageGroupsPage.java
Original file line number Diff line number Diff line change
Expand Up @@ -258,36 +258,21 @@ public void removeMemberFromSelectedGroup(RoleAssignee ra) {
}

public List<RoleAssignee> completeRoleAssignee( String query ) {
// TODO eliminate redundancy
List<RoleAssignee> roleAssigneeList = new ArrayList<>();
// TODO push this to the authentication and group services. Below code retrieves all the users.
for (AuthenticatedUser au : authenticationService.findAllAuthenticatedUsers()) {
roleAssigneeList.add(au);
}
for ( Group g : groupService.findGlobalGroups() ) {
roleAssigneeList.add( g );
}
roleAssigneeList.addAll( explicitGroupService.findAvailableFor(dataverse) );

List<RoleAssignee> filteredList = new LinkedList();
for (RoleAssignee ra : roleAssigneeList) {
// @todo unsure if containsIgnore case will work for all locales
// @todo maybe add some solr/lucene style searching, did-you-mean style?
if (StringUtils.containsIgnoreCase(ra.getDisplayInfo().getTitle(), query)) {
filteredList.add(ra);
}
}
// Remove assignees already assigned to this group

List<RoleAssignee> alreadyAssignedRoleAssignees = new ArrayList<>();

if (this.getNewExplicitGroupRoleAssignees() != null) {
filteredList.removeAll(this.getNewExplicitGroupRoleAssignees());
alreadyAssignedRoleAssignees.addAll(this.getNewExplicitGroupRoleAssignees());
}
if (this.getSelectedGroupRoleAssignees() != null) {
filteredList.removeAll(this.getSelectedGroupRoleAssignees());
alreadyAssignedRoleAssignees.addAll(this.getSelectedGroupRoleAssignees());
}
if (this.getSelectedGroupAddRoleAssignees() != null) {
filteredList.removeAll(this.getSelectedGroupAddRoleAssignees());
}
return filteredList;
alreadyAssignedRoleAssignees.addAll(this.getSelectedGroupAddRoleAssignees());
}

return roleAssigneeService.filterRoleAssignees(query, dataverse, alreadyAssignedRoleAssignees);

}

/*
Expand Down
26 changes: 3 additions & 23 deletions src/main/java/edu/harvard/iq/dataverse/ManagePermissionsPage.java
Original file line number Diff line number Diff line change
Expand Up @@ -320,31 +320,11 @@ public void initAssigneeDialog(ActionEvent ae) {
selectedRoleId = null;
showNoMessages();
}

public List<RoleAssignee> completeRoleAssignee( String query ) {
List<RoleAssignee> roleAssigneeList = new ArrayList<>();
// TODO push this to the authentication and group services. Below code retrieves all the users.
for (AuthenticatedUser au : authenticationService.findAllAuthenticatedUsers()) {
roleAssigneeList.add(au);
}
for ( Group g : groupService.findGlobalGroups() ) {
roleAssigneeList.add( g );
}
roleAssigneeList.addAll( explicitGroupService.findAvailableFor(dvObject) );

List<RoleAssignee> filteredList = new LinkedList<>();
for (RoleAssignee ra : roleAssigneeList) {
// @todo unsure if containsIgnore case will work for all locales
// @todo maybe add some solr/lucene style searching, did-you-mean style?
if ((StringUtils.containsIgnoreCase(ra.getDisplayInfo().getTitle(), query)
|| StringUtils.containsIgnoreCase(ra.getIdentifier(), query))
&& (roleAssignSelectedRoleAssignees == null || !roleAssignSelectedRoleAssignees.contains(ra))) {
filteredList.add(ra);
}
}
return filteredList;
return roleAssigneeService.filterRoleAssignees(query, dvObject, roleAssignSelectedRoleAssignees);
}

public List<DataverseRole> getAvailableRoles() {
List<DataverseRole> roles = new LinkedList<>();
if (dvObject != null && dvObject.getId() != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,18 @@
import edu.harvard.iq.dataverse.authorization.AuthenticationServiceBean;
import edu.harvard.iq.dataverse.authorization.DataverseRole;
import edu.harvard.iq.dataverse.authorization.RoleAssignee;
import edu.harvard.iq.dataverse.authorization.groups.Group;
import edu.harvard.iq.dataverse.authorization.groups.GroupServiceBean;
import edu.harvard.iq.dataverse.authorization.groups.impl.builtin.AllUsers;
import edu.harvard.iq.dataverse.authorization.groups.impl.builtin.AuthenticatedUsers;
import edu.harvard.iq.dataverse.authorization.groups.impl.explicit.ExplicitGroup;
import edu.harvard.iq.dataverse.authorization.groups.impl.explicit.ExplicitGroupServiceBean;
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
import edu.harvard.iq.dataverse.authorization.users.GuestUser;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
Expand Down Expand Up @@ -41,6 +44,9 @@ public class RoleAssigneeServiceBean {
@EJB
GroupServiceBean groupSvc;

@EJB
ExplicitGroupServiceBean explicitGroupSvc;

@EJB
DataverseRoleServiceBean dataverseRoleService;

Expand Down Expand Up @@ -265,6 +271,34 @@ private List<String> getUserGroups(String roleAssigneeIdentifier){
.getResultList();
}


public List<RoleAssignee> filterRoleAssignees(String query, DvObject dvObject, List<RoleAssignee> roleAssignSelectedRoleAssignees) {
List<RoleAssignee> roleAssigneeList = new ArrayList<>();

// we get the users through a query that does the filtering through the db,
// so that we don't have to instantiate all of the RoleAssignee objects
em.createNamedQuery("AuthenticatedUser.filter", AuthenticatedUser.class)
.setParameter("query", "%" + query + "%")
.getResultList().stream()
.filter(ra -> roleAssignSelectedRoleAssignees == null || !roleAssignSelectedRoleAssignees.contains(ra))
.forEach((ra) -> {
roleAssigneeList.add(ra);
});

// now we add groups to the list, both global and explicit
Set<Group> groups = groupSvc.findGlobalGroups();
groups.addAll(explicitGroupSvc.findAvailableFor(dvObject));
groups.stream()
.filter(ra -> StringUtils.containsIgnoreCase(ra.getDisplayInfo().getTitle(), query)
|| StringUtils.containsIgnoreCase(ra.getIdentifier(), query))
.filter(ra -> roleAssignSelectedRoleAssignees == null || !roleAssignSelectedRoleAssignees.contains(ra))
.forEach((ra) -> {
roleAssigneeList.add(ra);
});

return roleAssigneeList;
}

private void msg(String s){
//System.out.println(s);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,12 @@
@NamedQuery( name="AuthenticatedUser.findByEmail",
query="select au from AuthenticatedUser au WHERE au.email=:email"),
@NamedQuery( name="AuthenticatedUser.countOfIdentifier",
query="SELECT COUNT(a) FROM AuthenticatedUser a WHERE a.userIdentifier=:identifier")
query="SELECT COUNT(a) FROM AuthenticatedUser a WHERE a.userIdentifier=:identifier"),
@NamedQuery( name="AuthenticatedUser.filter",
query="select au from AuthenticatedUser au WHERE ("
+ "au.userIdentifier like :query OR "
+ "lower(concat(au.firstName,' ',au.lastName)) like lower(:query))")

})
@Entity
public class AuthenticatedUser implements User, Serializable {
Expand Down
5 changes: 4 additions & 1 deletion src/main/webapp/explicitGroup-new-dialog.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,10 @@
</label>
<div class="col-sm-9">
<p:autoComplete id="roleAssigneeName" placeholder="#{bundle['dataverse.permissions.usersOrGroups.assignDialog.userOrGroup.enterName']}"
multiple="true" scrollHeight="180" forceSelection="true" emptyMessage="#{bundle['dataverse.permissions.usersOrGroups.assignDialog.userOrGroup.invalidMsg']}"
multiple="true" scrollHeight="180" forceSelection="true"
minQueryLength="2" queryDelay="1000"
groupBy="#{roleAssignee.identifier.startsWith('@')?'Users':'Groups'}"
emptyMessage="#{bundle['dataverse.permissions.usersOrGroups.assignDialog.userOrGroup.invalidMsg']}"
value="#{manageGroupsPage.newExplicitGroupRoleAssignees}"
completeMethod="#{manageGroupsPage.completeRoleAssignee}"
var="roleAssignee"
Expand Down
5 changes: 4 additions & 1 deletion src/main/webapp/manage-groups.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,10 @@
</label>
<div class="col-sm-7">
<p:autoComplete id="addRoleAssigneeName" placeholder="#{bundle['dataverse.manageGroups.tab.action.btn.view.dialog.enterName']}"
multiple="true" scrollHeight="180" forceSelection="true" emptyMessage="#{bundle['dataverse.manageGroups.tab.action.btn.view.dialog.invalidMsg']}"
multiple="true" scrollHeight="180" forceSelection="true"
minQueryLength="2" queryDelay="1000"
groupBy="#{roleAssignee.identifier.startsWith('@')?'Users':'Groups'}"
emptyMessage="#{bundle['dataverse.manageGroups.tab.action.btn.view.dialog.invalidMsg']}"
value="#{manageGroupsPage.selectedGroupAddRoleAssignees}"
completeMethod="#{manageGroupsPage.completeRoleAssignee}"
var="roleAssignee"
Expand Down
8 changes: 6 additions & 2 deletions src/main/webapp/permissions-manage-files.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -212,8 +212,12 @@
</label>
<div class="col-sm-9">
<p:autoComplete id="userGroupNameAssign" placeholder="#{bundle['dataverse.permissionsFiles.assignDialog.userOrGroup.enterName']}"
multiple="true" scrollHeight="180" forceSelection="true" emptyMessage="#{bundle['dataverse.permissionsFiles.assignDialog.userOrGroup.invalidMsg']}"
value="#{manageFilePermissionsPage.selectedRoleAssignees}" completeMethod="#{manageFilePermissionsPage.completeRoleAssignee}"
multiple="true" scrollHeight="180" forceSelection="true"
minQueryLength="2" queryDelay="1000"
groupBy="#{roleAssignee.identifier.startsWith('@')?'Users':'Groups'}"
emptyMessage="#{bundle['dataverse.permissionsFiles.assignDialog.userOrGroup.invalidMsg']}"
value="#{manageFilePermissionsPage.selectedRoleAssignees}"
completeMethod="#{manageFilePermissionsPage.completeRoleAssignee}"
required="#{param['DO_VALIDATION']}" requiredMessage="#{bundle['dataverse.permissionsFiles.assignDialog.userOrGroup.requiredMsg']}"
var="roleAssignee" itemLabel="#{roleAssignee.displayInfo.title}" itemValue="#{roleAssignee}" converter="roleAssigneeConverter">
<p:column>
Expand Down
4 changes: 2 additions & 2 deletions src/main/webapp/roles-assign.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
<div class="col-sm-9">
<p:autoComplete id="userGroupNameAssign" placeholder="#{bundle['dataverse.permissions.usersOrGroups.assignDialog.userOrGroup.enterName']}"
multiple="true" scrollHeight="180" forceSelection="true"
minQueryLength="2" queryDelay="1000"
cache="true"
minQueryLength="2" queryDelay="1000"
groupBy="#{roleAssignee.identifier.startsWith('@')?'Users':'Groups'}"
emptyMessage="#{bundle['dataverse.permissions.usersOrGroups.assignDialog.userOrGroup.invalidMsg']}"
value="#{managePermissionsPage.roleAssignSelectedRoleAssignees}"
completeMethod="#{managePermissionsPage.completeRoleAssignee}"
Expand Down