Merge pull request #925 from dbeaver/tech/CB-2191

CB-2191 api to manage subject permission
This commit is contained in:
Serge Rider
2022-06-28 17:05:42 +02:00
committed by GitHub
4 changed files with 13 additions and 8 deletions
@@ -118,7 +118,7 @@ extend type Query {
grantUserRole(userId: ID!, roleId: ID!): Boolean
revokeUserRole(userId: ID!, roleId: ID!): Boolean
setSubjectPermissions(roleId: ID!, permissions: [ID!]!): Boolean
setSubjectPermissions(roleId: ID!, permissions: [ID!]!): [AdminPermissionInfo]!
setUserCredentials(userId: ID!, providerId: ID!, credentials: Object!): Boolean
@@ -45,4 +45,8 @@ public class AdminPermissionInfo {
return permission.getCategory();
}
public String getProvider() {
return permission.getService().getLabel();
}
}
@@ -76,7 +76,7 @@ public interface DBWServiceAdmin extends DBWService {
boolean revokeUserRole(@NotNull WebSession webSession, String user, String role) throws DBWebException;
@WebAction(requirePermissions = DBWConstants.PERMISSION_ADMIN)
boolean setSubjectPermissions(@NotNull WebSession webSession, String roleID, List<String> permissions) throws DBWebException;
List<AdminPermissionInfo> setSubjectPermissions(@NotNull WebSession webSession, String roleID, List<String> permissions) throws DBWebException;
@WebAction(requirePermissions = DBWConstants.PERMISSION_ADMIN)
boolean setUserCredentials(@NotNull WebSession webSession, @NotNull String userID, @NotNull String providerId, @NotNull Map<String, Object> credentials) throws DBWebException;
@@ -56,10 +56,7 @@ import org.jkiss.dbeaver.registry.auth.AuthProviderDescriptor;
import org.jkiss.dbeaver.registry.auth.AuthProviderRegistry;
import org.jkiss.utils.CommonUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -254,7 +251,7 @@ public class WebServiceAdmin implements DBWServiceAdmin {
}
@Override
public boolean setSubjectPermissions(@NotNull WebSession webSession, String roleID, List<String> permissions) throws DBWebException {
public List<AdminPermissionInfo> setSubjectPermissions(@NotNull WebSession webSession, String roleID, List<String> permissions) throws DBWebException {
WebUser grantor = webSession.getUser();
if (grantor == null) {
throw new DBWebException("Cannot change permissions in anonymous mode");
@@ -263,7 +260,11 @@ public class WebServiceAdmin implements DBWServiceAdmin {
try {
webSession.getAdminSecurityController().setSubjectPermissions(roleID, permissions, grantor.getUserId());
return true;
Set<String> subjectPermissions = webSession.getAdminSecurityController().getSubjectPermissions(roleID);
webSession.refreshUserData();
return listPermissions(webSession).stream()
.filter(p -> subjectPermissions.contains(p.getId()))
.collect(Collectors.toList());
} catch (Exception e) {
throw new DBWebException("Error setting role permissions", e);
}