📄 perms.jsp
字号:
<%/** * $RCSfile: perms.jsp,v $ * $Revision: 1.6.4.1 $ * $Date: 2003/01/17 18:17:05 $ */%><%@ page import="java.util.*, java.net.URLEncoder, com.jivesoftware.forum.*, com.jivesoftware.forum.util.*, com.jivesoftware.util.ParamUtils" errorPage="error.jsp"%><%@ include file="global.jsp" %><%! // Global variables, methods, etc // ALL CONSTANTS REFERRED TO IN THIS FILE ARE DEFINED IN // permMethods.jsp static final Map permNames = new HashMap(); static { permNames.put(new Long(READ_FORUM), "Read Forum"); permNames.put(new Long(CREATE_THREAD), "Create Thread"); permNames.put(new Long(CREATE_MESSAGE), "Create Message"); permNames.put(new Long(MODERATOR), "Moderator"); permNames.put(new Long(CREATE_MESSAGE_ATTACHMENT), "Create Attachment"); permNames.put(new Long(SYSTEM_ADMIN), "System Admin"); permNames.put(new Long(CAT_ADMIN), "Category Admin"); permNames.put(new Long(FORUM_ADMIN), "Forum Admin"); permNames.put(new Long(GROUP_ADMIN), "Group Admin"); permNames.put(new Long(USER_ADMIN), "User Admin"); } // types of users/groups to give permissions to static final int ANYBODY = 1; static final int REGISTERED = 2; static final int USER = 3; static final int GROUP = 4; // anonymous user & special user constants static final long GUEST_ID = -1L; static final long REGISTERED_ID = 0L; // Returns a list of userIDs in the given list of userIDs and groupIDs. private long[] getUserIDs(String[] items) { return getIDs(items, "u"); } // Returns a list of groupIDs in the given list of userIDs and groupIDs. private long[] getGroupIDs(String[] items) { return getIDs(items, "g"); } private long[] getIDs(String[] items, String prefix) { if (items == null) { return new long[0]; } long[] IDs = new long[items.length]; int size = 0; for (int i=0; i<items.length; i++) { String item = items[i]; if (item != null && item.startsWith(prefix)) { try { IDs[size] = Long.parseLong(item.substring(1,item.length())); size++; } catch (Exception e) {} } } if (size == IDs.length) { return IDs; } else { long[] temp = new long[size]; for (int i=0; i<temp.length; i++) { temp[i] = IDs[i]; } return temp; } }%><% // Permission check if (!isSystemAdmin && !isForumAdmin && !isCatAdmin && Version.getEdition() == Version.Edition.LITE) { throw new UnauthorizedException("You don't have admin privileges to perform this operation."); } // Check to see what mode we're in. We're either editing forum or category // permissions. If the mode is something else, throw an exception: int mode = ParamUtils.getIntParameter(request,"mode",-1); if (mode != CAT_MODE && mode != FORUM_MODE) { throw new Exception("No permission mode specified"); } // Check to see what group of perms we're going to administer. We can // either modify user & group perms or admin permissions. int permGroup = ParamUtils.getIntParameter(request,"permGroup",-1); if (permGroup != CONTENT_GROUP && permGroup != ADMIN_GROUP) { throw new Exception("No permission group specified"); } // Get parameters long forumID = ParamUtils.getLongParameter(request,"forum",-1L); long categoryID = ParamUtils.getLongParameter(request,"cat",-1L); long[] permissions = ParamUtils.getLongParameters(request,"permission",-1L); int givePermTo = ParamUtils.getIntParameter(request,"givePermTo",-1); boolean add = request.getParameter("add") != null; boolean remove = request.getParameter("remove") != null; String username = ParamUtils.getParameter(request,"username"); String groupname = ParamUtils.getParameter(request,"groupname"); String[] items = request.getParameterValues("items"); long[] itemType = ParamUtils.getLongParameters(request,"itemType",-1L); // Further permission checks. Check if we're in "admin" perm editing mode // that a forum admin can't admin global perms: if (permGroup == ADMIN_GROUP && forumID != -1L && !isForumAdmin) { // Forum admins can't administrate global permissions throw new UnauthorizedException("You don't have admin privileges to perform this operation."); } // UserManager for getting and setting users or lists of users UserManager userManager = forumFactory.getUserManager(); // GroupManager for getting and setting groups or list of groups GroupManager groupManager = forumFactory.getGroupManager(); // Load the forum Forum forum = null; if (forumID != -1L) { forum = forumFactory.getForum(forumID); } // Load the category ForumCategory category = null; if (categoryID != -1L) { category = forumFactory.getForumCategory(categoryID); } // Get the permissions manager for the appropriate mode we're in: PermissionsManager permManager = null; if (mode == CAT_MODE) { permManager = category.getPermissionsManager(); } else if (mode == FORUM_MODE) { // The forums permission manager can either be global or local: if (forum == null) { // Since no forum was specified, we'll get the perm manager from // the forum factory so we can edit global permissions: permManager = forumFactory.getPermissionsManager(); } else { permManager = forum.getPermissionsManager(); } } // Create the group of permissions we're going to administer: long[] permGroupDef = null; if (permGroup == CONTENT_GROUP) { permGroupDef = new long[] { READ_FORUM, CREATE_THREAD, CREATE_MESSAGE, CREATE_MESSAGE_ATTACHMENT }; } else if (permGroup == ADMIN_GROUP) { if (forum == null) { if (category == null) { permGroupDef = new long[] { SYSTEM_ADMIN, CAT_ADMIN, FORUM_ADMIN, USER_ADMIN, MODERATOR }; } else { permGroupDef = new long[] { CAT_ADMIN, FORUM_ADMIN, /*USER_ADMIN,*/ MODERATOR }; } } else { permGroupDef = new long[] { FORUM_ADMIN, MODERATOR }; } } // add a new permission if requested if (add) { // Check to see that the user clicked a permission radio button and // selected at least one permission if (givePermTo > 0 && (permissions!=null && permissions.length>0)) { switch (givePermTo) { case ANYBODY: // Add anonymous user permissions for (int i=0; i<permissions.length; i++) { // Don't support setting moderator privleges for anonymous users if (permissions[i] != MODERATOR) { permManager.addAnonymousUserPermission(permissions[i]); } } break; case REGISTERED: // Add registered user permissions for (int i=0; i<permissions.length; i++) { // Don't support setting moderator privleges for "registered users" if (permissions[i] != MODERATOR) { permManager.addRegisteredUserPermission(permissions[i]); } } break; case USER: try { // get the user: User user = userManager.getUser(username); // Add the user permission for (int i=0; i<permissions.length; i++) { if (permissions[i] == MODERATOR) { permManager.addUserPermission(user, MODERATOR); } else { permManager.addUserPermission(user, permissions[i]); } } } catch (Exception ignored) {} break; case GROUP: try { // get the user: Group group = groupManager.getGroup(groupname); // Add the user permission for (int i=0; i<permissions.length; i++) { if (permissions[i] == MODERATOR) { permManager.addGroupPermission(group, MODERATOR); } else { permManager.addGroupPermission(group, permissions[i]); } } } catch (Exception ignored) {} break; default: } } // done adding, so redirect back to this page response.sendRedirect("perms.jsp?forum="+forumID+"&mode="+mode+"&cat=" +categoryID+"&permGroup="+permGroup); return; } // remove a permission if requested if (remove) { // Get the lists of user IDs and group IDs. long[] userIDs = getUserIDs(items); long[] groupIDs = getGroupIDs(items); // if there are user perms or group perms to remove: if (userIDs.length > 0 || groupIDs.length > 0) { // users first, for (int i=0; i<userIDs.length; i++) { if (userIDs[i] == GUEST_ID) { for (int j=0; j<itemType.length; j++) { if (itemType[j] == MODERATOR) { permManager.removeAnonymousUserPermission(MODERATOR); } else { permManager.removeAnonymousUserPermission(itemType[j]); } } } else if (userIDs[i] == REGISTERED_ID) { for (int j=0; j<itemType.length; j++) { if (itemType[j] == MODERATOR) { permManager.removeRegisteredUserPermission(MODERATOR); } else { permManager.removeRegisteredUserPermission(itemType[j]); } } } else { try { User user = userManager.getUser(userIDs[i]); for (int j=0; j<itemType.length; j++) { // only remove this permission if: // 1) If the admin tool user is not "user" // 2) and if itemType[j] is not the SYSTEM_ADMIN priv if (pageUser.getID() != user.getID() || itemType[j] != Permissions.SYSTEM_ADMIN) { if (itemType[j] == MODERATOR) { permManager.removeUserPermission(user,MODERATOR); } else { permManager.removeUserPermission(user,itemType[j]); } } } } catch (Exception ignored) {} } } // groups next for (int i=0; i<groupIDs.length; i++) { try { Group group = groupManager.getGroup(groupIDs[i]); for (int j=0; j<itemType.length; j++) { if (itemType[j] == MODERATOR) { permManager.removeGroupPermission(group,MODERATOR); } else { permManager.removeGroupPermission(group,itemType[j]); } } } catch (Exception ignored) {} } } // done removing, so redirect back to this page response.sendRedirect("perms.jsp?forum="+forumID+"&mode="+mode+"&cat=" +categoryID+"&permGroup="+permGroup); return; }%><% // special onload command to load the sidebar if (forum != null) { onload = " onload=\"parent.frames['sidebar'].location.href='sidebar.jsp?sidebar=forum';\""; } if (category != null) { onload = " onload=\"parent.frames['sidebar'].location.href='sidebar.jsp?sidebar=forum';\""; } String bookmark = "";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -