use GroupPermissions for DefaultGroupManager

This commit is contained in:
Sebastian Sdorra
2016-12-07 22:22:53 +01:00
parent 26ece65363
commit d3adf8a893

View File

@@ -35,6 +35,7 @@ package sonia.scm.group;
//~--- non-JDK imports -------------------------------------------------------- //~--- non-JDK imports --------------------------------------------------------
import com.github.sdorra.ssp.PermissionActionCheck;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.inject.Inject; import com.google.inject.Inject;
@@ -49,7 +50,6 @@ import sonia.scm.TransformFilter;
import sonia.scm.search.SearchRequest; import sonia.scm.search.SearchRequest;
import sonia.scm.search.SearchUtil; import sonia.scm.search.SearchUtil;
import sonia.scm.util.CollectionAppender; import sonia.scm.util.CollectionAppender;
import sonia.scm.util.SecurityUtil;
import sonia.scm.util.Util; import sonia.scm.util.Util;
//~--- JDK imports ------------------------------------------------------------ //~--- JDK imports ------------------------------------------------------------
@@ -123,15 +123,17 @@ public class DefaultGroupManager extends AbstractGroupManager
group.setType(groupDAO.getType()); group.setType(groupDAO.getType());
} }
String name = group.getName();
if (logger.isInfoEnabled()) if (logger.isInfoEnabled())
{ {
logger.info("create group {} of type {}", group.getName(), logger.info("create group {} of type {}", name,
group.getType()); group.getType());
} }
SecurityUtil.assertIsAdmin(); GroupPermissions.create().check();
if (groupDAO.contains(group.getName())) if (groupDAO.contains(name))
{ {
throw new GroupAllreadyExistExeption(); throw new GroupAllreadyExistExeption();
} }
@@ -161,9 +163,8 @@ public class DefaultGroupManager extends AbstractGroupManager
group.getType()); group.getType());
} }
SecurityUtil.assertIsAdmin();
String name = group.getName(); String name = group.getName();
GroupPermissions.delete().check(name);
if (groupDAO.contains(name)) if (groupDAO.contains(name))
{ {
@@ -204,9 +205,8 @@ public class DefaultGroupManager extends AbstractGroupManager
group.getType()); group.getType());
} }
SecurityUtil.assertIsAdmin();
String name = group.getName(); String name = group.getName();
GroupPermissions.modify().check(name);
Group oldGroup = groupDAO.get(name); Group oldGroup = groupDAO.get(name);
@@ -236,15 +236,14 @@ public class DefaultGroupManager extends AbstractGroupManager
@Override @Override
public void refresh(Group group) throws GroupException, IOException public void refresh(Group group) throws GroupException, IOException
{ {
String name = group.getName();
if (logger.isInfoEnabled()) if (logger.isInfoEnabled())
{ {
logger.info("refresh group {} of type {}", group.getName(), logger.info("refresh group {} of type {}", name, group.getType());
group.getType());
} }
SecurityUtil.assertIsAdmin(); GroupPermissions.read(name).check();
Group fresh = groupDAO.get(name);
Group fresh = groupDAO.get(group.getName());
if (fresh == null) if (fresh == null)
{ {
@@ -270,6 +269,7 @@ public class DefaultGroupManager extends AbstractGroupManager
logger.debug("search group with query {}", searchRequest.getQuery()); logger.debug("search group with query {}", searchRequest.getQuery());
} }
final PermissionActionCheck<Group> check = GroupPermissions.read();
return SearchUtil.search(searchRequest, groupDAO.getAll(), return SearchUtil.search(searchRequest, groupDAO.getAll(),
new TransformFilter<Group>() new TransformFilter<Group>()
{ {
@@ -278,8 +278,7 @@ public class DefaultGroupManager extends AbstractGroupManager
{ {
Group result = null; Group result = null;
if (SearchUtil.matchesOne(searchRequest, group.getName(), if (check.isPermitted(group) && matches(searchRequest, group))
group.getDescription()))
{ {
result = group.clone(); result = group.clone();
} }
@@ -289,6 +288,10 @@ public class DefaultGroupManager extends AbstractGroupManager
}); });
} }
private boolean matches(SearchRequest searchRequest, Group group) {
return SearchUtil.matchesOne(searchRequest, group.getName(), group.getDescription());
}
//~--- get methods ---------------------------------------------------------- //~--- get methods ----------------------------------------------------------
/** /**
@@ -302,6 +305,8 @@ public class DefaultGroupManager extends AbstractGroupManager
@Override @Override
public Group get(String id) public Group get(String id)
{ {
GroupPermissions.read(id).check();
Group group = groupDAO.get(id); Group group = groupDAO.get(id);
if (group != null) if (group != null)
@@ -335,14 +340,15 @@ public class DefaultGroupManager extends AbstractGroupManager
@Override @Override
public Collection<Group> getAll(Comparator<Group> comparator) public Collection<Group> getAll(Comparator<Group> comparator)
{ {
SecurityUtil.assertIsAdmin(); List<Group> groups = new ArrayList<>();
List<Group> groups = new ArrayList<Group>();
PermissionActionCheck<Group> check = GroupPermissions.read();
for (Group group : groupDAO.getAll()) for (Group group : groupDAO.getAll())
{ {
if (check.isPermitted(group)) {
groups.add(group.clone()); groups.add(group.clone());
} }
}
if (comparator != null) if (comparator != null)
{ {
@@ -367,15 +373,17 @@ public class DefaultGroupManager extends AbstractGroupManager
public Collection<Group> getAll(Comparator<Group> comparator, int start, public Collection<Group> getAll(Comparator<Group> comparator, int start,
int limit) int limit)
{ {
SecurityUtil.assertIsAdmin(); final PermissionActionCheck<Group> check = GroupPermissions.read();
return Util.createSubCollection(groupDAO.getAll(), comparator, return Util.createSubCollection(groupDAO.getAll(), comparator,
new CollectionAppender<Group>() new CollectionAppender<Group>()
{ {
@Override @Override
public void append(Collection<Group> collection, Group item) public void append(Collection<Group> collection, Group group)
{ {
collection.add(item.clone()); if (check.isPermitted(group)) {
collection.add(group.clone());
}
} }
}, start, limit); }, start, limit);
} }
@@ -406,7 +414,7 @@ public class DefaultGroupManager extends AbstractGroupManager
@Override @Override
public Collection<Group> getGroupsForMember(String member) public Collection<Group> getGroupsForMember(String member)
{ {
LinkedList<Group> groups = new LinkedList<Group>(); LinkedList<Group> groups = new LinkedList<>();
for (Group group : groupDAO.getAll()) for (Group group : groupDAO.getAll())
{ {