/** * Change the default read privileges to the anonymous group. * * <p>If getCollectionDefaultRead() returns -1 or the anonymous group then nothing is done. * * @param context The current DSpace context. * @param collectionID The collection id. * @return A process result's object. */ public static FlowResult changeCollectionDefaultReadToAnonymous(Context context, int collectionID) throws SQLException, AuthorizeException, UIException { FlowResult result = new FlowResult(); int roleID = getCollectionDefaultRead(context, collectionID); if (roleID < 1) { throw new UIException( "Unable to delete the default read role because the role is either already assigned to the anonymous group or multiple groups are assigned the default privileges."); } Collection collection = Collection.find(context, collectionID); Group role = Group.find(context, roleID); Group anonymous = Group.find(context, 0); // Delete the old role, this will remove the default privileges. role.delete(); // Set anonymous as the default read group. AuthorizeManager.addPolicy(context, collection, Constants.DEFAULT_ITEM_READ, anonymous); AuthorizeManager.addPolicy(context, collection, Constants.DEFAULT_BITSTREAM_READ, anonymous); // Commit the changes context.commit(); result.setContinue(true); result.setOutcome(true); result.setMessage( new Message( "default", "All new items submitted to this collection will default to anonymous read.")); return result; }
/** * Delete one of a community's roles * * @param context The current DSpace context. * @param communityID The community id. * @param roleName ADMIN. * @param groupID The id of the group associated with this role. * @return A process result's object. */ public static FlowResult processDeleteCommunityRole( Context context, int communityID, String roleName, int groupID) throws SQLException, UIException, IOException, AuthorizeException { FlowResult result = new FlowResult(); Community community = Community.find(context, communityID); Group role = Group.find(context, groupID); // First, unregister the role if (ROLE_ADMIN.equals(roleName)) { community.removeAdministrators(); } // Second, remove all authorizations for this role by searching for all policies that this // group has on the collection and remove them otherwise the delete will fail because // there are dependencies. @SuppressWarnings("unchecked") // the cast is correct List<ResourcePolicy> policies = AuthorizeManager.getPolicies(context, community); for (ResourcePolicy policy : policies) { if (policy.getGroupID() == groupID) { policy.delete(); } } // Finally, delete the role's actual group. community.update(); role.delete(); context.commit(); result.setContinue(true); result.setOutcome(true); result.setMessage(new Message("default", "The role was successfully deleted.")); return result; }
/** * Delete one of collection's roles * * @param context The current DSpace context. * @param collectionID The collection id. * @param roleName ADMIN, WF_STEP1, WF_STEP2, WF_STEP3, SUBMIT, DEFAULT_READ. * @param groupID The id of the group associated with this role. * @return A process result's object. */ public static FlowResult processDeleteCollectionRole( Context context, int collectionID, String roleName, int groupID) throws SQLException, UIException, IOException, AuthorizeException, WorkflowConfigurationException { FlowResult result = new FlowResult(); Collection collection = Collection.find(context, collectionID); Group role = Group.find(context, groupID); // First, Unregister the role if (ROLE_ADMIN.equals(roleName)) { collection.removeAdministrators(); } else if (ROLE_SUBMIT.equals(roleName)) { collection.removeSubmitters(); } else { WorkflowUtils.deleteRoleGroup(context, collection, roleName); } // else if (ROLE_WF_STEP1.equals(roleName)) // { // collection.setWorkflowGroup(1, null); // } // else if (ROLE_WF_STEP2.equals(roleName)) // { // collection.setWorkflowGroup(2, null); // } // else if (ROLE_WF_STEP3.equals(roleName)) // { // collection.setWorkflowGroup(3, null); // // } // Second, remove all authorizations for this role by searching for all policies that this // group has on the collection and remove them otherwise the delete will fail because // there are dependencies. @SuppressWarnings("unchecked") // the cast is correct List<ResourcePolicy> policies = AuthorizeManager.getPolicies(context, collection); for (ResourcePolicy policy : policies) { if (policy.getGroupID() == groupID) { policy.delete(); } } // Finally, Delete the role's actual group. collection.update(); role.delete(); context.commit(); result.setContinue(true); result.setOutcome(true); result.setMessage(new Message("default", "The role was successfully deleted.")); return result; }
protected Group checkGroup(Context context, HttpServletRequest request) throws ServletException, IOException, SQLException, AuthorizeException { // Find out if there's a group parameter int groupID = Util.getIntParameter(request, "group_id"); Group group = null; if (groupID >= 0) { group = Group.find(context, groupID); } return group; } // end checkGroup
/** * Get all of the groups that an eperson is a member of * * @param c * @param e * @return * @throws SQLException */ public static Group[] allMemberGroups(Context c, EPerson e) throws SQLException { List<Group> groupList = new ArrayList<Group>(); Set<Integer> myGroups = allMemberGroupIDs(c, e); // now convert those Integers to Groups Iterator<Integer> i = myGroups.iterator(); while (i.hasNext()) { groupList.add(Group.find(c, (i.next()).intValue())); } return groupList.toArray(new Group[groupList.size()]); }
/** * Confirms the removal of a supervision order * * @param context the context of the request * @param request the servlet request * @param response the servlet response */ private void showConfirmRemovePage( Context context, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException, AuthorizeException { // get the values from the request int wsItemID = UIUtil.getIntParameter(request, "siID"); int groupID = UIUtil.getIntParameter(request, "gID"); // get the workspace item and the group from the request values WorkspaceItem wsItem = WorkspaceItem.find(context, wsItemID); Group group = Group.find(context, groupID); // set the attributes for the JSP request.setAttribute("wsItem", wsItem); request.setAttribute("group", group); JSPManager.showJSP(request, response, "/dspace-admin/supervise-confirm-remove.jsp"); }
/** * Generic find for when the precise type of a DSO is not known, just the a pair of type number * and database ID. * * @param context - the context * @param type - type number * @param id - id within table of type'd objects * @return the object found, or null if it does not exist. * @throws SQLException only upon failure accessing the database. */ public static DSpaceObject find(Context context, int type, int id) throws SQLException { switch (type) { case Constants.BITSTREAM: return Bitstream.find(context, id); case Constants.BUNDLE: return Bundle.find(context, id); case Constants.ITEM: return Item.find(context, id); case Constants.COLLECTION: return Collection.find(context, id); case Constants.COMMUNITY: return Community.find(context, id); case Constants.GROUP: return Group.find(context, id); case Constants.EPERSON: return EPerson.find(context, id); case Constants.SITE: return Site.find(context, id); } return null; }
@RequestMapping(method = RequestMethod.POST) protected String processPost( @RequestAttribute Context context, ModelMap model, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, SQLException, AuthorizeException { Group group = null; group = checkGroup(context, request); if (group != null) { // is this user authorized to edit this group? AuthorizeManager.authorizeAction(context, group, Constants.ADD); boolean submit_edit = (request.getParameter("submit_edit") != null); boolean submit_group_update = (request.getParameter("submit_group_update") != null); boolean submit_group_delete = (request.getParameter("submit_group_delete") != null); boolean submit_confirm_delete = (request.getParameter("submit_confirm_delete") != null); boolean submit_cancel_delete = (request.getParameter("submit_cancel_delete") != null); // just chosen a group to edit - get group and pass it to // group-edit.jsp if (submit_edit && !submit_group_update && !submit_group_delete) { model.addAttribute("group", group); model.addAttribute("members", group.getMembers()); model.addAttribute("membergroups", group.getMemberGroups()); String utilsGrpName = Utils.addEntities(group.getName()); model.addAttribute("utilsGrpName", utilsGrpName); return "pages/admin/group-edit"; } // update the members of the group else if (submit_group_update) { // first off, did we change the group name? String newName = request.getParameter("group_name"); if (!newName.equals(group.getName())) { group.setName(newName); group.update(); } int[] eperson_ids = Util.getIntParameters(request, "eperson_id"); int[] group_ids = Util.getIntParameters(request, "group_ids"); // now get members, and add new ones and remove missing ones EPerson[] members = group.getMembers(); Group[] membergroups = group.getMemberGroups(); if (eperson_ids != null) { // some epeople were listed, now make group's epeople match // given epeople Set memberSet = new HashSet(); Set epersonIDSet = new HashSet(); // add all members to a set for (int x = 0; x < members.length; x++) { Integer epersonID = Integer.valueOf(members[x].getID()); memberSet.add(epersonID); } // now all eperson_ids are put in a set for (int x = 0; x < eperson_ids.length; x++) { epersonIDSet.add(Integer.valueOf(eperson_ids[x])); } // process eperson_ids, adding those to group not already // members Iterator i = epersonIDSet.iterator(); while (i.hasNext()) { Integer currentID = (Integer) i.next(); if (!memberSet.contains(currentID)) { group.addMember(EPerson.find(context, currentID.intValue())); } } // process members, removing any that aren't in eperson_ids for (int x = 0; x < members.length; x++) { EPerson e = members[x]; if (!epersonIDSet.contains(Integer.valueOf(e.getID()))) { group.removeMember(e); } } } else { // no members found (ids == null), remove them all! for (int y = 0; y < members.length; y++) { group.removeMember(members[y]); } } if (group_ids != null) { // some groups were listed, now make group's member groups // match given group IDs Set memberSet = new HashSet(); Set groupIDSet = new HashSet(); // add all members to a set for (int x = 0; x < membergroups.length; x++) { Integer myID = Integer.valueOf(membergroups[x].getID()); memberSet.add(myID); } // now all eperson_ids are put in a set for (int x = 0; x < group_ids.length; x++) { groupIDSet.add(Integer.valueOf(group_ids[x])); } // process group_ids, adding those to group not already // members Iterator i = groupIDSet.iterator(); while (i.hasNext()) { Integer currentID = (Integer) i.next(); if (!memberSet.contains(currentID)) { group.addMember(Group.find(context, currentID.intValue())); } } // process members, removing any that aren't in eperson_ids for (int x = 0; x < membergroups.length; x++) { Group g = membergroups[x]; if (!groupIDSet.contains(Integer.valueOf(g.getID()))) { group.removeMember(g); } } } else { // no members found (ids == null), remove them all! for (int y = 0; y < membergroups.length; y++) { group.removeMember(membergroups[y]); } } group.update(); model.addAttribute("group", group); model.addAttribute("members", group.getMembers()); model.addAttribute("membergroups", group.getMemberGroups()); String utilsGrpName = Utils.addEntities(group.getName()); model.addAttribute("utilsGrpName", utilsGrpName); context.commit(); return "pages/admin/group-edit"; } else if (submit_group_delete) { // direct to a confirmation step model.addAttribute("group", group); return "pages/admin/group-confirm-delete"; } else if (submit_confirm_delete) { // phony authorize, only admins can do this AuthorizeManager.authorizeAction(context, group, Constants.WRITE); // delete group, return to group-list.jsp group.delete(); return showMainPage(context, model, request, response); } else if (submit_cancel_delete) { // show group list return showMainPage(context, model, request, response); } else { // unknown action, show edit page model.addAttribute("group", group); model.addAttribute("members", group.getMembers()); model.addAttribute("membergroups", group.getMemberGroups()); String utilsGrpName = Utils.addEntities(group.getName()); model.addAttribute("utilsGrpName", utilsGrpName); return "pages/admin/group-edit"; } } else { // want to add a group - create a blank one, and pass to // group_edit.jsp String button = UIUtil.getSubmitButton(request, "submit"); if (button.equals("submit_add")) { group = Group.create(context); group.setName("new group" + group.getID()); group.update(); model.addAttribute("group", group); model.addAttribute("members", group.getMembers()); model.addAttribute("membergroups", group.getMemberGroups()); String utilsGrpName = Utils.addEntities(group.getName()); model.addAttribute("utilsGrpName", utilsGrpName); context.commit(); return "pages/admin/group-edit"; } else { // show the main page (select groups) return showMainPage(context, model, request, response); } } // end } // end processGet
public Group getGroup() throws SQLException { return Group.find(myContext, myRow.getIntColumn("group_id")); }