From 717267cdf6fff130865c194dc33620ac1cd10a51 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 31 Oct 2012 08:50:20 -0400
Subject: [PATCH] Reject add if permission selector has not been set
---
src/com/gitblit/client/UsersPanel.java | 65 ++++++++++++++++++++++++++++++--
1 files changed, 60 insertions(+), 5 deletions(-)
diff --git a/src/com/gitblit/client/UsersPanel.java b/src/com/gitblit/client/UsersPanel.java
index 5d31774..2c1481a 100644
--- a/src/com/gitblit/client/UsersPanel.java
+++ b/src/com/gitblit/client/UsersPanel.java
@@ -25,6 +25,7 @@
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.IOException;
+import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
@@ -40,7 +41,11 @@
import javax.swing.event.ListSelectionListener;
import javax.swing.table.TableRowSorter;
+import com.gitblit.Constants.PermissionType;
import com.gitblit.Constants.RpcRequest;
+import com.gitblit.models.RegistrantAccessPermission;
+import com.gitblit.models.RepositoryModel;
+import com.gitblit.models.TeamModel;
import com.gitblit.models.UserModel;
import com.gitblit.utils.StringUtils;
@@ -51,7 +56,7 @@
* @author James Moger
*
*/
-public class UsersPanel extends JPanel {
+public abstract class UsersPanel extends JPanel {
private static final long serialVersionUID = 1L;
@@ -111,6 +116,18 @@
String name = table.getColumnName(UsersTableModel.Columns.Name.ordinal());
table.setRowHeight(nameRenderer.getFont().getSize() + 8);
table.getColumn(name).setCellRenderer(nameRenderer);
+
+ int w = 125;
+ name = table.getColumnName(UsersTableModel.Columns.AccessLevel.ordinal());
+ table.getColumn(name).setMinWidth(w);
+ table.getColumn(name).setMaxWidth(w);
+ name = table.getColumnName(UsersTableModel.Columns.Teams.ordinal());
+ table.getColumn(name).setMinWidth(w);
+ table.getColumn(name).setMaxWidth(w);
+ name = table.getColumnName(UsersTableModel.Columns.Repositories.ordinal());
+ table.getColumn(name).setMinWidth(w);
+ table.getColumn(name).setMaxWidth(w);
+
table.setRowSorter(defaultSorter);
table.getRowSorter().toggleSortOrder(UsersTableModel.Columns.Name.ordinal());
table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
@@ -167,7 +184,7 @@
add(userTablePanel, BorderLayout.CENTER);
add(userControls, BorderLayout.SOUTH);
}
-
+
@Override
public void requestFocus() {
filterTextfield.requestFocus();
@@ -178,6 +195,8 @@
return Utils.INSETS;
}
+ protected abstract void updateTeamsTable();
+
protected void updateTable(boolean pack) {
tableModel.list.clear();
tableModel.list.addAll(gitblit.getUsers());
@@ -240,10 +259,12 @@
*
*/
protected void createUser() {
- EditUserDialog dialog = new EditUserDialog(gitblit.getSettings());
+ EditUserDialog dialog = new EditUserDialog(gitblit.getProtocolVersion(),
+ gitblit.getSettings());
dialog.setLocationRelativeTo(UsersPanel.this);
dialog.setUsers(gitblit.getUsers());
dialog.setRepositories(gitblit.getRepositories(), null);
+ dialog.setTeams(gitblit.getTeams(), null);
dialog.setVisible(true);
final UserModel newUser = dialog.getUser();
if (newUser == null) {
@@ -257,6 +278,9 @@
boolean success = gitblit.createUser(newUser);
if (success) {
gitblit.refreshUsers();
+ if (newUser.teams.size() > 0) {
+ gitblit.refreshTeams();
+ }
}
return success;
}
@@ -264,6 +288,9 @@
@Override
protected void onSuccess() {
updateTable(false);
+ if (newUser.teams.size() > 0) {
+ updateTeamsTable();
+ }
}
@Override
@@ -282,10 +309,34 @@
* @param user
*/
protected void editUser(final UserModel user) {
- EditUserDialog dialog = new EditUserDialog(user, gitblit.getSettings());
+ EditUserDialog dialog = new EditUserDialog(gitblit.getProtocolVersion(), user,
+ gitblit.getSettings());
dialog.setLocationRelativeTo(UsersPanel.this);
dialog.setUsers(gitblit.getUsers());
- dialog.setRepositories(gitblit.getRepositories(), new ArrayList<String>(user.repositories));
+
+ List<RegistrantAccessPermission> permissions = user.getRepositoryPermissions();
+ for (RegistrantAccessPermission permission : permissions) {
+ if (permission.isEditable && PermissionType.EXPLICIT.equals(permission.permissionType)) {
+ // Ensure this is NOT an owner permission - which is non-editable
+ // We don't know this from within the usermodel, ownership is a
+ // property of a repository.
+ RepositoryModel rm = gitblit.getRepository(permission.registrant);
+ if (rm == null) {
+ System.out.println(MessageFormat.format("{0}: failed to find registrant repository {1}",
+ getClass().getSimpleName(), permission.registrant));
+ continue;
+ }
+ boolean isOwner = rm.isOwner(user.username);
+ if (isOwner) {
+ permission.permissionType = PermissionType.OWNER;
+ permission.isEditable = false;
+ }
+ }
+ }
+
+ dialog.setRepositories(gitblit.getRepositories(), user.getRepositoryPermissions());
+ dialog.setTeams(gitblit.getTeams(), user.teams == null ? null : new ArrayList<TeamModel>(
+ user.teams));
dialog.setVisible(true);
final UserModel revisedUser = dialog.getUser();
if (revisedUser == null) {
@@ -298,6 +349,7 @@
boolean success = gitblit.updateUser(user.username, revisedUser);
if (success) {
gitblit.refreshUsers();
+ gitblit.refreshTeams();
}
return success;
}
@@ -305,6 +357,7 @@
@Override
protected void onSuccess() {
updateTable(false);
+ updateTeamsTable();
}
@Override
@@ -336,6 +389,7 @@
}
if (success) {
gitblit.refreshUsers();
+ gitblit.refreshTeams();
}
return success;
}
@@ -343,6 +397,7 @@
@Override
protected void onSuccess() {
updateTable(false);
+ updateTeamsTable();
}
@Override
--
Gitblit v1.9.1