mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 05:07:41 +00:00
GUACAMOLE-76: Merge performance improvements to connection tree query.
This commit is contained in:
@@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
package org.apache.guacamole.auth.jdbc.connection;
|
package org.apache.guacamole.auth.jdbc.connection;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
import org.apache.guacamole.auth.jdbc.base.GroupedObjectModel;
|
import org.apache.guacamole.auth.jdbc.base.GroupedObjectModel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -53,6 +55,12 @@ public class ConnectionModel extends GroupedObjectModel {
|
|||||||
*/
|
*/
|
||||||
private Integer maxConnectionsPerUser;
|
private Integer maxConnectionsPerUser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The identifiers of all readable sharing profiles associated with this
|
||||||
|
* connection.
|
||||||
|
*/
|
||||||
|
private Set<String> sharingProfileIdentifiers = new HashSet<String>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new, empty connection.
|
* Creates a new, empty connection.
|
||||||
*/
|
*/
|
||||||
@@ -152,6 +160,32 @@ public class ConnectionModel extends GroupedObjectModel {
|
|||||||
this.maxConnectionsPerUser = maxConnectionsPerUser;
|
this.maxConnectionsPerUser = maxConnectionsPerUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the identifiers of all readable sharing profiles associated with
|
||||||
|
* this connection. This is set only when the connection is queried, and has
|
||||||
|
* no effect when a connection is inserted, updated, or deleted.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* The identifiers of all readable sharing profiles associated with
|
||||||
|
* this connection.
|
||||||
|
*/
|
||||||
|
public Set<String> getSharingProfileIdentifiers() {
|
||||||
|
return sharingProfileIdentifiers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the identifiers of all readable sharing profiles associated with
|
||||||
|
* this connection. This should be set only when the connection is queried,
|
||||||
|
* as it has no effect when a connection is inserted, updated, or deleted.
|
||||||
|
*
|
||||||
|
* @param sharingProfileIdentifiers
|
||||||
|
* The identifiers of all readable sharing profiles associated with
|
||||||
|
* this connection.
|
||||||
|
*/
|
||||||
|
public void setSharingProfileIdentifiers(Set<String> sharingProfileIdentifiers) {
|
||||||
|
this.sharingProfileIdentifiers = sharingProfileIdentifiers;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getIdentifier() {
|
public String getIdentifier() {
|
||||||
|
|
||||||
|
@@ -32,7 +32,6 @@ import org.apache.guacamole.auth.jdbc.tunnel.GuacamoleTunnelService;
|
|||||||
import org.apache.guacamole.GuacamoleException;
|
import org.apache.guacamole.GuacamoleException;
|
||||||
import org.apache.guacamole.auth.jdbc.JDBCEnvironment;
|
import org.apache.guacamole.auth.jdbc.JDBCEnvironment;
|
||||||
import org.apache.guacamole.auth.jdbc.base.ModeledGroupedDirectoryObject;
|
import org.apache.guacamole.auth.jdbc.base.ModeledGroupedDirectoryObject;
|
||||||
import org.apache.guacamole.auth.jdbc.sharingprofile.SharingProfileService;
|
|
||||||
import org.apache.guacamole.form.Field;
|
import org.apache.guacamole.form.Field;
|
||||||
import org.apache.guacamole.form.Form;
|
import org.apache.guacamole.form.Form;
|
||||||
import org.apache.guacamole.form.NumericField;
|
import org.apache.guacamole.form.NumericField;
|
||||||
@@ -100,12 +99,6 @@ public class ModeledConnection extends ModeledGroupedDirectoryObject<ConnectionM
|
|||||||
@Inject
|
@Inject
|
||||||
private ConnectionService connectionService;
|
private ConnectionService connectionService;
|
||||||
|
|
||||||
/**
|
|
||||||
* Service for managing sharing profiles.
|
|
||||||
*/
|
|
||||||
@Inject
|
|
||||||
private SharingProfileService sharingProfileService;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service for creating and tracking tunnels.
|
* Service for creating and tracking tunnels.
|
||||||
*/
|
*/
|
||||||
@@ -167,7 +160,7 @@ public class ModeledConnection extends ModeledGroupedDirectoryObject<ConnectionM
|
|||||||
@Override
|
@Override
|
||||||
public Set<String> getSharingProfileIdentifiers()
|
public Set<String> getSharingProfileIdentifiers()
|
||||||
throws GuacamoleException {
|
throws GuacamoleException {
|
||||||
return sharingProfileService.getIdentifiersWithin(getCurrentUser(), getIdentifier());
|
return getModel().getSharingProfileIdentifiers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
package org.apache.guacamole.auth.jdbc.connectiongroup;
|
package org.apache.guacamole.auth.jdbc.connectiongroup;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
import org.apache.guacamole.auth.jdbc.base.GroupedObjectModel;
|
import org.apache.guacamole.auth.jdbc.base.GroupedObjectModel;
|
||||||
import org.apache.guacamole.net.auth.ConnectionGroup;
|
import org.apache.guacamole.net.auth.ConnectionGroup;
|
||||||
|
|
||||||
@@ -60,6 +62,18 @@ public class ConnectionGroupModel extends GroupedObjectModel {
|
|||||||
*/
|
*/
|
||||||
private boolean sessionAffinityEnabled;
|
private boolean sessionAffinityEnabled;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The identifiers of all readable child connections within this connection
|
||||||
|
* group.
|
||||||
|
*/
|
||||||
|
private Set<String> connectionIdentifiers = new HashSet<String>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The identifiers of all readable child connection groups within this
|
||||||
|
* connection group.
|
||||||
|
*/
|
||||||
|
private Set<String> connectionGroupIdentifiers = new HashSet<String>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new, empty connection group.
|
* Creates a new, empty connection group.
|
||||||
*/
|
*/
|
||||||
@@ -186,6 +200,62 @@ public class ConnectionGroupModel extends GroupedObjectModel {
|
|||||||
this.sessionAffinityEnabled = sessionAffinityEnabled;
|
this.sessionAffinityEnabled = sessionAffinityEnabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the identifiers of all readable child connections within this
|
||||||
|
* connection group. This is set only when the parent connection group is
|
||||||
|
* queried, and has no effect when a connection group is inserted, updated,
|
||||||
|
* or deleted.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* The identifiers of all readable child connections within this
|
||||||
|
* connection group.
|
||||||
|
*/
|
||||||
|
public Set<String> getConnectionIdentifiers() {
|
||||||
|
return connectionIdentifiers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the identifiers of all readable child connections within this
|
||||||
|
* connection group. This should be set only when the parent connection
|
||||||
|
* group is queried, as it has no effect when a connection group is
|
||||||
|
* inserted, updated, or deleted.
|
||||||
|
*
|
||||||
|
* @param connectionIdentifiers
|
||||||
|
* The identifiers of all readable child connections within this
|
||||||
|
* connection group.
|
||||||
|
*/
|
||||||
|
public void setConnectionIdentifiers(Set<String> connectionIdentifiers) {
|
||||||
|
this.connectionIdentifiers = connectionIdentifiers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the identifiers of all readable child connection groups within
|
||||||
|
* this connection group. This is set only when the parent connection group
|
||||||
|
* is queried, and has no effect when a connection group is inserted,
|
||||||
|
* updated, or deleted.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
* The identifiers of all readable child connection groups within this
|
||||||
|
* connection group.
|
||||||
|
*/
|
||||||
|
public Set<String> getConnectionGroupIdentifiers() {
|
||||||
|
return connectionGroupIdentifiers;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the identifiers of all readable child connection groups within this
|
||||||
|
* connection group. This should be set only when the parent connection
|
||||||
|
* group is queried, as it has no effect when a connection group is
|
||||||
|
* inserted, updated, or deleted.
|
||||||
|
*
|
||||||
|
* @param connectionGroupIdentifiers
|
||||||
|
* The identifiers of all readable child connection groups within this
|
||||||
|
* connection group.
|
||||||
|
*/
|
||||||
|
public void setConnectionGroupIdentifiers(Set<String> connectionGroupIdentifiers) {
|
||||||
|
this.connectionGroupIdentifiers = connectionGroupIdentifiers;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getIdentifier() {
|
public String getIdentifier() {
|
||||||
|
|
||||||
|
@@ -29,7 +29,6 @@ import java.util.Set;
|
|||||||
import org.apache.guacamole.GuacamoleException;
|
import org.apache.guacamole.GuacamoleException;
|
||||||
import org.apache.guacamole.auth.jdbc.JDBCEnvironment;
|
import org.apache.guacamole.auth.jdbc.JDBCEnvironment;
|
||||||
import org.apache.guacamole.auth.jdbc.base.ModeledGroupedDirectoryObject;
|
import org.apache.guacamole.auth.jdbc.base.ModeledGroupedDirectoryObject;
|
||||||
import org.apache.guacamole.auth.jdbc.connection.ConnectionService;
|
|
||||||
import org.apache.guacamole.auth.jdbc.tunnel.GuacamoleTunnelService;
|
import org.apache.guacamole.auth.jdbc.tunnel.GuacamoleTunnelService;
|
||||||
import org.apache.guacamole.form.BooleanField;
|
import org.apache.guacamole.form.BooleanField;
|
||||||
import org.apache.guacamole.form.Field;
|
import org.apache.guacamole.form.Field;
|
||||||
@@ -99,12 +98,6 @@ public class ModeledConnectionGroup extends ModeledGroupedDirectoryObject<Connec
|
|||||||
@Inject
|
@Inject
|
||||||
private JDBCEnvironment environment;
|
private JDBCEnvironment environment;
|
||||||
|
|
||||||
/**
|
|
||||||
* Service for managing connections.
|
|
||||||
*/
|
|
||||||
@Inject
|
|
||||||
private ConnectionService connectionService;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Service for managing connection groups.
|
* Service for managing connection groups.
|
||||||
*/
|
*/
|
||||||
@@ -157,13 +150,13 @@ public class ModeledConnectionGroup extends ModeledGroupedDirectoryObject<Connec
|
|||||||
@Override
|
@Override
|
||||||
public Set<String> getConnectionIdentifiers()
|
public Set<String> getConnectionIdentifiers()
|
||||||
throws GuacamoleException {
|
throws GuacamoleException {
|
||||||
return connectionService.getIdentifiersWithin(getCurrentUser(), getIdentifier());
|
return getModel().getConnectionIdentifiers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Set<String> getConnectionGroupIdentifiers()
|
public Set<String> getConnectionGroupIdentifiers()
|
||||||
throws GuacamoleException {
|
throws GuacamoleException {
|
||||||
return connectionGroupService.getIdentifiersWithin(getCurrentUser(), getIdentifier());
|
return getModel().getConnectionGroupIdentifiers();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -19,9 +19,7 @@
|
|||||||
|
|
||||||
package org.apache.guacamole.auth.jdbc.sharingprofile;
|
package org.apache.guacamole.auth.jdbc.sharingprofile;
|
||||||
|
|
||||||
import java.util.Set;
|
|
||||||
import org.apache.guacamole.auth.jdbc.base.ModeledDirectoryObjectMapper;
|
import org.apache.guacamole.auth.jdbc.base.ModeledDirectoryObjectMapper;
|
||||||
import org.apache.guacamole.auth.jdbc.user.UserModel;
|
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,43 +30,6 @@ import org.apache.ibatis.annotations.Param;
|
|||||||
public interface SharingProfileMapper
|
public interface SharingProfileMapper
|
||||||
extends ModeledDirectoryObjectMapper<SharingProfileModel> {
|
extends ModeledDirectoryObjectMapper<SharingProfileModel> {
|
||||||
|
|
||||||
/**
|
|
||||||
* Selects the identifiers of all sharing profiles associated with the given
|
|
||||||
* primary connection, regardless of whether they are readable by any
|
|
||||||
* particular user. This should only be called on behalf of a system
|
|
||||||
* administrator. If identifiers are needed by a non-administrative user who
|
|
||||||
* must have explicit read rights, use selectReadableIdentifiersWithin()
|
|
||||||
* instead.
|
|
||||||
*
|
|
||||||
* @param primaryConnectionIdentifier
|
|
||||||
* The identifier of the primary connection.
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
* A Set containing all identifiers of all objects.
|
|
||||||
*/
|
|
||||||
Set<String> selectIdentifiersWithin(
|
|
||||||
@Param("primaryConnectionIdentifier") String primaryConnectionIdentifier);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Selects the identifiers of all sharing profiles associated with the given
|
|
||||||
* primary connection that are explicitly readable by the given user. If
|
|
||||||
* identifiers are needed by a system administrator (who, by definition,
|
|
||||||
* does not need explicit read rights), use selectIdentifiersWithin()
|
|
||||||
* instead.
|
|
||||||
*
|
|
||||||
* @param user
|
|
||||||
* The user whose permissions should determine whether an identifier
|
|
||||||
* is returned.
|
|
||||||
*
|
|
||||||
* @param primaryConnectionIdentifier
|
|
||||||
* The identifier of the primary connection.
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
* A Set containing all identifiers of all readable objects.
|
|
||||||
*/
|
|
||||||
Set<String> selectReadableIdentifiersWithin(@Param("user") UserModel user,
|
|
||||||
@Param("primaryConnectionIdentifier") String primaryConnectionIdentifier);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Selects the sharing profile associated with the given primary connection
|
* Selects the sharing profile associated with the given primary connection
|
||||||
* and having the given name. If no such sharing profile exists, null is
|
* and having the given name. If no such sharing profile exists, null is
|
||||||
|
@@ -25,7 +25,6 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
|
||||||
import org.apache.guacamole.auth.jdbc.user.ModeledAuthenticatedUser;
|
import org.apache.guacamole.auth.jdbc.user.ModeledAuthenticatedUser;
|
||||||
import org.apache.guacamole.auth.jdbc.base.ModeledDirectoryObjectMapper;
|
import org.apache.guacamole.auth.jdbc.base.ModeledDirectoryObjectMapper;
|
||||||
import org.apache.guacamole.GuacamoleClientException;
|
import org.apache.guacamole.GuacamoleClientException;
|
||||||
@@ -244,43 +243,6 @@ public class SharingProfileService
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the set of all identifiers for all sharing profiles associated
|
|
||||||
* with the given primary connection. Only sharing profiles that the user
|
|
||||||
* has read access to will be returned.
|
|
||||||
*
|
|
||||||
* Permission to read the primary connection having the given identifier is
|
|
||||||
* NOT checked.
|
|
||||||
*
|
|
||||||
* @param user
|
|
||||||
* The user retrieving the identifiers.
|
|
||||||
*
|
|
||||||
* @param identifier
|
|
||||||
* The identifier of the primary connection.
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
* The set of all identifiers for all sharing profiles associated with
|
|
||||||
* the primary connection having the given identifier that the user has
|
|
||||||
* read access to.
|
|
||||||
*
|
|
||||||
* @throws GuacamoleException
|
|
||||||
* If an error occurs while reading identifiers.
|
|
||||||
*/
|
|
||||||
public Set<String> getIdentifiersWithin(ModeledAuthenticatedUser user,
|
|
||||||
String identifier)
|
|
||||||
throws GuacamoleException {
|
|
||||||
|
|
||||||
// Bypass permission checks if the user is a system admin
|
|
||||||
if (user.getUser().isAdministrator())
|
|
||||||
return sharingProfileMapper.selectIdentifiersWithin(identifier);
|
|
||||||
|
|
||||||
// Otherwise only return explicitly readable identifiers
|
|
||||||
else
|
|
||||||
return sharingProfileMapper.selectReadableIdentifiersWithin(
|
|
||||||
user.getUser().getModel(), identifier);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves all parameters visible to the given user and associated with
|
* Retrieves all parameters visible to the given user and associated with
|
||||||
* the sharing profile having the given identifier. If the given user has no
|
* the sharing profile having the given identifier. If the given user has no
|
||||||
|
@@ -70,8 +70,10 @@ public class MySQLAuthenticationProviderModule implements Module {
|
|||||||
myBatisProperties.setProperty("mybatis.pooled.pingQuery", "SELECT 1");
|
myBatisProperties.setProperty("mybatis.pooled.pingQuery", "SELECT 1");
|
||||||
|
|
||||||
// Use UTF-8 in database
|
// Use UTF-8 in database
|
||||||
driverProperties.setProperty("characterEncoding","UTF-8");
|
driverProperties.setProperty("characterEncoding", "UTF-8");
|
||||||
|
|
||||||
|
// Allow use of multiple statements within a single query
|
||||||
|
driverProperties.setProperty("allowMultiQueries", "true");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,7 +86,7 @@ public class MySQLAuthenticationProviderModule implements Module {
|
|||||||
// Bind MyBatis properties
|
// Bind MyBatis properties
|
||||||
Names.bindProperties(binder, myBatisProperties);
|
Names.bindProperties(binder, myBatisProperties);
|
||||||
|
|
||||||
// Bing JDBC driver properties
|
// Bind JDBC driver properties
|
||||||
binder.bind(Properties.class)
|
binder.bind(Properties.class)
|
||||||
.annotatedWith(Names.named("JDBC.driverProperties"))
|
.annotatedWith(Names.named("JDBC.driverProperties"))
|
||||||
.toInstance(driverProperties);
|
.toInstance(driverProperties);
|
||||||
|
@@ -25,12 +25,21 @@
|
|||||||
|
|
||||||
<!-- Result mapper for connection objects -->
|
<!-- Result mapper for connection objects -->
|
||||||
<resultMap id="ConnectionResultMap" type="org.apache.guacamole.auth.jdbc.connection.ConnectionModel" >
|
<resultMap id="ConnectionResultMap" type="org.apache.guacamole.auth.jdbc.connection.ConnectionModel" >
|
||||||
|
|
||||||
|
<!-- Connection properties -->
|
||||||
<id column="connection_id" property="objectID" jdbcType="INTEGER"/>
|
<id column="connection_id" property="objectID" jdbcType="INTEGER"/>
|
||||||
<result column="connection_name" property="name" jdbcType="VARCHAR"/>
|
<result column="connection_name" property="name" jdbcType="VARCHAR"/>
|
||||||
<result column="parent_id" property="parentIdentifier" jdbcType="INTEGER"/>
|
<result column="parent_id" property="parentIdentifier" jdbcType="INTEGER"/>
|
||||||
<result column="protocol" property="protocol" jdbcType="VARCHAR"/>
|
<result column="protocol" property="protocol" jdbcType="VARCHAR"/>
|
||||||
<result column="max_connections" property="maxConnections" jdbcType="INTEGER"/>
|
<result column="max_connections" property="maxConnections" jdbcType="INTEGER"/>
|
||||||
<result column="max_connections_per_user" property="maxConnectionsPerUser" jdbcType="INTEGER"/>
|
<result column="max_connections_per_user" property="maxConnectionsPerUser" jdbcType="INTEGER"/>
|
||||||
|
|
||||||
|
<!-- Associated sharing profiles -->
|
||||||
|
<collection property="sharingProfileIdentifiers" resultSet="sharingProfiles" ofType="java.lang.String"
|
||||||
|
column="connection_id" foreignColumn="primary_connection_id">
|
||||||
|
<result column="sharing_profile_id"/>
|
||||||
|
</collection>
|
||||||
|
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<!-- Select all connection identifiers -->
|
<!-- Select all connection identifiers -->
|
||||||
@@ -70,7 +79,8 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select multiple connections by identifier -->
|
<!-- Select multiple connections by identifier -->
|
||||||
<select id="select" resultMap="ConnectionResultMap">
|
<select id="select" resultMap="ConnectionResultMap"
|
||||||
|
resultSets="connections,sharingProfiles">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
connection_id,
|
connection_id,
|
||||||
@@ -84,12 +94,21 @@
|
|||||||
<foreach collection="identifiers" item="identifier"
|
<foreach collection="identifiers" item="identifier"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>;
|
||||||
|
|
||||||
|
SELECT primary_connection_id, sharing_profile_id
|
||||||
|
FROM guacamole_sharing_profile
|
||||||
|
WHERE primary_connection_id IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>;
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select multiple connections by identifier only if readable -->
|
<!-- Select multiple connections by identifier only if readable -->
|
||||||
<select id="selectReadable" resultMap="ConnectionResultMap">
|
<select id="selectReadable" resultMap="ConnectionResultMap"
|
||||||
|
resultSets="connections,sharingProfiles">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_connection.connection_id,
|
guacamole_connection.connection_id,
|
||||||
@@ -106,7 +125,18 @@
|
|||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
||||||
AND permission = 'READ'
|
AND permission = 'READ';
|
||||||
|
|
||||||
|
SELECT primary_connection_id, guacamole_sharing_profile.sharing_profile_id
|
||||||
|
FROM guacamole_sharing_profile
|
||||||
|
JOIN guacamole_sharing_profile_permission ON guacamole_sharing_profile_permission.sharing_profile_id = guacamole_sharing_profile.sharing_profile_id
|
||||||
|
WHERE primary_connection_id IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
||||||
|
AND permission = 'READ';
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
@@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
<!-- Result mapper for connection objects -->
|
<!-- Result mapper for connection objects -->
|
||||||
<resultMap id="ConnectionGroupResultMap" type="org.apache.guacamole.auth.jdbc.connectiongroup.ConnectionGroupModel" >
|
<resultMap id="ConnectionGroupResultMap" type="org.apache.guacamole.auth.jdbc.connectiongroup.ConnectionGroupModel" >
|
||||||
|
|
||||||
|
<!-- Connection group properties -->
|
||||||
<id column="connection_group_id" property="objectID" jdbcType="INTEGER"/>
|
<id column="connection_group_id" property="objectID" jdbcType="INTEGER"/>
|
||||||
<result column="connection_group_name" property="name" jdbcType="VARCHAR"/>
|
<result column="connection_group_name" property="name" jdbcType="VARCHAR"/>
|
||||||
<result column="parent_id" property="parentIdentifier" jdbcType="INTEGER"/>
|
<result column="parent_id" property="parentIdentifier" jdbcType="INTEGER"/>
|
||||||
@@ -33,6 +35,19 @@
|
|||||||
<result column="max_connections" property="maxConnections" jdbcType="INTEGER"/>
|
<result column="max_connections" property="maxConnections" jdbcType="INTEGER"/>
|
||||||
<result column="max_connections_per_user" property="maxConnectionsPerUser" jdbcType="INTEGER"/>
|
<result column="max_connections_per_user" property="maxConnectionsPerUser" jdbcType="INTEGER"/>
|
||||||
<result column="enable_session_affinity" property="sessionAffinityEnabled" jdbcType="BOOLEAN"/>
|
<result column="enable_session_affinity" property="sessionAffinityEnabled" jdbcType="BOOLEAN"/>
|
||||||
|
|
||||||
|
<!-- Child connection groups -->
|
||||||
|
<collection property="connectionGroupIdentifiers" resultSet="childConnectionGroups" ofType="java.lang.String"
|
||||||
|
column="connection_group_id" foreignColumn="parent_id">
|
||||||
|
<result column="connection_group_id"/>
|
||||||
|
</collection>
|
||||||
|
|
||||||
|
<!-- Child connections -->
|
||||||
|
<collection property="connectionIdentifiers" resultSet="childConnections" ofType="java.lang.String"
|
||||||
|
column="connection_group_id" foreignColumn="parent_id">
|
||||||
|
<result column="connection_id"/>
|
||||||
|
</collection>
|
||||||
|
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<!-- Select all connection group identifiers -->
|
<!-- Select all connection group identifiers -->
|
||||||
@@ -72,7 +87,8 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select multiple connection groups by identifier -->
|
<!-- Select multiple connection groups by identifier -->
|
||||||
<select id="select" resultMap="ConnectionGroupResultMap">
|
<select id="select" resultMap="ConnectionGroupResultMap"
|
||||||
|
resultSets="connectionGroups,childConnectionGroups,childConnections">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
connection_group_id,
|
connection_group_id,
|
||||||
@@ -87,12 +103,29 @@
|
|||||||
<foreach collection="identifiers" item="identifier"
|
<foreach collection="identifiers" item="identifier"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>;
|
||||||
|
|
||||||
|
SELECT parent_id, connection_group_id
|
||||||
|
FROM guacamole_connection_group
|
||||||
|
WHERE parent_id IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>;
|
||||||
|
|
||||||
|
SELECT parent_id, connection_id
|
||||||
|
FROM guacamole_connection
|
||||||
|
WHERE parent_id IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>;
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select multiple connection groups by identifier only if readable -->
|
<!-- Select multiple connection groups by identifier only if readable -->
|
||||||
<select id="selectReadable" resultMap="ConnectionGroupResultMap">
|
<select id="selectReadable" resultMap="ConnectionGroupResultMap"
|
||||||
|
resultSets="connectionGroups,childConnectionGroups,childConnections">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_connection_group.connection_group_id,
|
guacamole_connection_group.connection_group_id,
|
||||||
@@ -110,7 +143,29 @@
|
|||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
||||||
AND permission = 'READ'
|
AND permission = 'READ';
|
||||||
|
|
||||||
|
SELECT parent_id, guacamole_connection_group.connection_group_id
|
||||||
|
FROM guacamole_connection_group
|
||||||
|
JOIN guacamole_connection_group_permission ON guacamole_connection_group_permission.connection_group_id = guacamole_connection_group.connection_group_id
|
||||||
|
WHERE parent_id IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
||||||
|
AND permission = 'READ';
|
||||||
|
|
||||||
|
SELECT parent_id, guacamole_connection.connection_id
|
||||||
|
FROM guacamole_connection
|
||||||
|
JOIN guacamole_connection_permission ON guacamole_connection_permission.connection_id = guacamole_connection.connection_id
|
||||||
|
WHERE parent_id IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
||||||
|
AND permission = 'READ';
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
@@ -45,25 +45,6 @@
|
|||||||
AND permission = 'READ'
|
AND permission = 'READ'
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select all sharing profiles identifiers associated with a particular connection -->
|
|
||||||
<select id="selectIdentifiersWithin" resultType="string">
|
|
||||||
SELECT sharing_profile_id
|
|
||||||
FROM guacamole_sharing_profile
|
|
||||||
WHERE
|
|
||||||
primary_connection_id = #{primaryConnectionIdentifier,jdbcType=VARCHAR}
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<!-- Select identifiers of all readable sharing profiles associated with a particular connection -->
|
|
||||||
<select id="selectReadableIdentifiersWithin" resultType="string">
|
|
||||||
SELECT guacamole_sharing_profile.sharing_profile_id
|
|
||||||
FROM guacamole_sharing_profile
|
|
||||||
JOIN guacamole_sharing_profile_permission ON guacamole_sharing_profile_permission.sharing_profile_id = guacamole_sharing_profile.sharing_profile_id
|
|
||||||
WHERE
|
|
||||||
primary_connection_id = #{primaryConnectionIdentifier,jdbcType=VARCHAR}
|
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
|
||||||
AND permission = 'READ'
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<!-- Select multiple sharing profiles by identifier -->
|
<!-- Select multiple sharing profiles by identifier -->
|
||||||
<select id="select" resultMap="SharingProfileResultMap">
|
<select id="select" resultMap="SharingProfileResultMap">
|
||||||
|
|
||||||
@@ -129,7 +110,7 @@
|
|||||||
)
|
)
|
||||||
VALUES (
|
VALUES (
|
||||||
#{object.name,jdbcType=VARCHAR},
|
#{object.name,jdbcType=VARCHAR},
|
||||||
#{object.primaryConnectionIdentifier,jdbcType=VARCHAR},
|
#{object.primaryConnectionIdentifier,jdbcType=VARCHAR}
|
||||||
)
|
)
|
||||||
|
|
||||||
</insert>
|
</insert>
|
||||||
|
@@ -71,8 +71,7 @@ public class PostgreSQLAuthenticationProviderModule implements Module {
|
|||||||
myBatisProperties.setProperty("mybatis.pooled.pingQuery", "SELECT 1");
|
myBatisProperties.setProperty("mybatis.pooled.pingQuery", "SELECT 1");
|
||||||
|
|
||||||
// Use UTF-8 in database
|
// Use UTF-8 in database
|
||||||
driverProperties.setProperty("characterEncoding","UTF-8");
|
driverProperties.setProperty("characterEncoding", "UTF-8");
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -85,7 +84,7 @@ public class PostgreSQLAuthenticationProviderModule implements Module {
|
|||||||
// Bind MyBatis properties
|
// Bind MyBatis properties
|
||||||
Names.bindProperties(binder, myBatisProperties);
|
Names.bindProperties(binder, myBatisProperties);
|
||||||
|
|
||||||
// Bing JDBC driver properties
|
// Bind JDBC driver properties
|
||||||
binder.bind(Properties.class)
|
binder.bind(Properties.class)
|
||||||
.annotatedWith(Names.named("JDBC.driverProperties"))
|
.annotatedWith(Names.named("JDBC.driverProperties"))
|
||||||
.toInstance(driverProperties);
|
.toInstance(driverProperties);
|
||||||
|
@@ -25,12 +25,21 @@
|
|||||||
|
|
||||||
<!-- Result mapper for connection objects -->
|
<!-- Result mapper for connection objects -->
|
||||||
<resultMap id="ConnectionResultMap" type="org.apache.guacamole.auth.jdbc.connection.ConnectionModel" >
|
<resultMap id="ConnectionResultMap" type="org.apache.guacamole.auth.jdbc.connection.ConnectionModel" >
|
||||||
|
|
||||||
|
<!-- Connection properties -->
|
||||||
<id column="connection_id" property="objectID" jdbcType="INTEGER"/>
|
<id column="connection_id" property="objectID" jdbcType="INTEGER"/>
|
||||||
<result column="connection_name" property="name" jdbcType="VARCHAR"/>
|
<result column="connection_name" property="name" jdbcType="VARCHAR"/>
|
||||||
<result column="parent_id" property="parentIdentifier" jdbcType="INTEGER"/>
|
<result column="parent_id" property="parentIdentifier" jdbcType="INTEGER"/>
|
||||||
<result column="protocol" property="protocol" jdbcType="VARCHAR"/>
|
<result column="protocol" property="protocol" jdbcType="VARCHAR"/>
|
||||||
<result column="max_connections" property="maxConnections" jdbcType="INTEGER"/>
|
<result column="max_connections" property="maxConnections" jdbcType="INTEGER"/>
|
||||||
<result column="max_connections_per_user" property="maxConnectionsPerUser" jdbcType="INTEGER"/>
|
<result column="max_connections_per_user" property="maxConnectionsPerUser" jdbcType="INTEGER"/>
|
||||||
|
|
||||||
|
<!-- Associated sharing profiles -->
|
||||||
|
<collection property="sharingProfileIdentifiers" resultSet="sharingProfiles" ofType="java.lang.String"
|
||||||
|
column="connection_id" foreignColumn="primary_connection_id">
|
||||||
|
<result column="sharing_profile_id"/>
|
||||||
|
</collection>
|
||||||
|
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<!-- Select all connection identifiers -->
|
<!-- Select all connection identifiers -->
|
||||||
@@ -70,7 +79,8 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select multiple connections by identifier -->
|
<!-- Select multiple connections by identifier -->
|
||||||
<select id="select" resultMap="ConnectionResultMap">
|
<select id="select" resultMap="ConnectionResultMap"
|
||||||
|
resultSets="connections,sharingProfiles">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
connection_id,
|
connection_id,
|
||||||
@@ -84,12 +94,21 @@
|
|||||||
<foreach collection="identifiers" item="identifier"
|
<foreach collection="identifiers" item="identifier"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=INTEGER}::integer
|
#{identifier,jdbcType=INTEGER}::integer
|
||||||
</foreach>
|
</foreach>;
|
||||||
|
|
||||||
|
SELECT primary_connection_id, sharing_profile_id
|
||||||
|
FROM guacamole_sharing_profile
|
||||||
|
WHERE primary_connection_id IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=INTEGER}::integer
|
||||||
|
</foreach>;
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select multiple connections by identifier only if readable -->
|
<!-- Select multiple connections by identifier only if readable -->
|
||||||
<select id="selectReadable" resultMap="ConnectionResultMap">
|
<select id="selectReadable" resultMap="ConnectionResultMap"
|
||||||
|
resultSets="connections,sharingProfiles">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_connection.connection_id,
|
guacamole_connection.connection_id,
|
||||||
@@ -106,7 +125,18 @@
|
|||||||
#{identifier,jdbcType=INTEGER}::integer
|
#{identifier,jdbcType=INTEGER}::integer
|
||||||
</foreach>
|
</foreach>
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
||||||
AND permission = 'READ'
|
AND permission = 'READ';
|
||||||
|
|
||||||
|
SELECT primary_connection_id, guacamole_sharing_profile.sharing_profile_id
|
||||||
|
FROM guacamole_sharing_profile
|
||||||
|
JOIN guacamole_sharing_profile_permission ON guacamole_sharing_profile_permission.sharing_profile_id = guacamole_sharing_profile.sharing_profile_id
|
||||||
|
WHERE primary_connection_id IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=INTEGER}::integer
|
||||||
|
</foreach>
|
||||||
|
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
||||||
|
AND permission = 'READ';
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
@@ -25,6 +25,8 @@
|
|||||||
|
|
||||||
<!-- Result mapper for connection objects -->
|
<!-- Result mapper for connection objects -->
|
||||||
<resultMap id="ConnectionGroupResultMap" type="org.apache.guacamole.auth.jdbc.connectiongroup.ConnectionGroupModel" >
|
<resultMap id="ConnectionGroupResultMap" type="org.apache.guacamole.auth.jdbc.connectiongroup.ConnectionGroupModel" >
|
||||||
|
|
||||||
|
<!-- Connection group properties -->
|
||||||
<id column="connection_group_id" property="objectID" jdbcType="INTEGER"/>
|
<id column="connection_group_id" property="objectID" jdbcType="INTEGER"/>
|
||||||
<result column="connection_group_name" property="name" jdbcType="VARCHAR"/>
|
<result column="connection_group_name" property="name" jdbcType="VARCHAR"/>
|
||||||
<result column="parent_id" property="parentIdentifier" jdbcType="INTEGER"/>
|
<result column="parent_id" property="parentIdentifier" jdbcType="INTEGER"/>
|
||||||
@@ -33,6 +35,19 @@
|
|||||||
<result column="max_connections" property="maxConnections" jdbcType="INTEGER"/>
|
<result column="max_connections" property="maxConnections" jdbcType="INTEGER"/>
|
||||||
<result column="max_connections_per_user" property="maxConnectionsPerUser" jdbcType="INTEGER"/>
|
<result column="max_connections_per_user" property="maxConnectionsPerUser" jdbcType="INTEGER"/>
|
||||||
<result column="enable_session_affinity" property="sessionAffinityEnabled" jdbcType="BOOLEAN"/>
|
<result column="enable_session_affinity" property="sessionAffinityEnabled" jdbcType="BOOLEAN"/>
|
||||||
|
|
||||||
|
<!-- Child connection groups -->
|
||||||
|
<collection property="connectionGroupIdentifiers" resultSet="childConnectionGroups" ofType="java.lang.String"
|
||||||
|
column="connection_group_id" foreignColumn="parent_id">
|
||||||
|
<result column="connection_group_id"/>
|
||||||
|
</collection>
|
||||||
|
|
||||||
|
<!-- Child connections -->
|
||||||
|
<collection property="connectionIdentifiers" resultSet="childConnections" ofType="java.lang.String"
|
||||||
|
column="connection_group_id" foreignColumn="parent_id">
|
||||||
|
<result column="connection_id"/>
|
||||||
|
</collection>
|
||||||
|
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<!-- Select all connection group identifiers -->
|
<!-- Select all connection group identifiers -->
|
||||||
@@ -72,7 +87,8 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select multiple connection groups by identifier -->
|
<!-- Select multiple connection groups by identifier -->
|
||||||
<select id="select" resultMap="ConnectionGroupResultMap">
|
<select id="select" resultMap="ConnectionGroupResultMap"
|
||||||
|
resultSets="connectionGroups,childConnectionGroups,childConnections">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
connection_group_id,
|
connection_group_id,
|
||||||
@@ -87,12 +103,29 @@
|
|||||||
<foreach collection="identifiers" item="identifier"
|
<foreach collection="identifiers" item="identifier"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=INTEGER}::integer
|
#{identifier,jdbcType=INTEGER}::integer
|
||||||
</foreach>
|
</foreach>;
|
||||||
|
|
||||||
|
SELECT parent_id, connection_group_id
|
||||||
|
FROM guacamole_connection_group
|
||||||
|
WHERE parent_id IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=INTEGER}::integer
|
||||||
|
</foreach>;
|
||||||
|
|
||||||
|
SELECT parent_id, connection_id
|
||||||
|
FROM guacamole_connection
|
||||||
|
WHERE parent_id IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=INTEGER}::integer
|
||||||
|
</foreach>;
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select multiple connection groups by identifier only if readable -->
|
<!-- Select multiple connection groups by identifier only if readable -->
|
||||||
<select id="selectReadable" resultMap="ConnectionGroupResultMap">
|
<select id="selectReadable" resultMap="ConnectionGroupResultMap"
|
||||||
|
resultSets="connectionGroups,childConnectionGroups,childConnections">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_connection_group.connection_group_id,
|
guacamole_connection_group.connection_group_id,
|
||||||
@@ -110,7 +143,29 @@
|
|||||||
#{identifier,jdbcType=INTEGER}::integer
|
#{identifier,jdbcType=INTEGER}::integer
|
||||||
</foreach>
|
</foreach>
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
||||||
AND permission = 'READ'
|
AND permission = 'READ';
|
||||||
|
|
||||||
|
SELECT parent_id, guacamole_connection_group.connection_group_id
|
||||||
|
FROM guacamole_connection_group
|
||||||
|
JOIN guacamole_connection_group_permission ON guacamole_connection_group_permission.connection_group_id = guacamole_connection_group.connection_group_id
|
||||||
|
WHERE parent_id IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=INTEGER}::integer
|
||||||
|
</foreach>
|
||||||
|
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
||||||
|
AND permission = 'READ';
|
||||||
|
|
||||||
|
SELECT parent_id, guacamole_connection.connection_id
|
||||||
|
FROM guacamole_connection
|
||||||
|
JOIN guacamole_connection_permission ON guacamole_connection_permission.connection_id = guacamole_connection.connection_id
|
||||||
|
WHERE parent_id IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=INTEGER}::integer
|
||||||
|
</foreach>
|
||||||
|
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
||||||
|
AND permission = 'READ';
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
@@ -45,25 +45,6 @@
|
|||||||
AND permission = 'READ'
|
AND permission = 'READ'
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select all sharing profile identifiers associated with a particular connection -->
|
|
||||||
<select id="selectIdentifiersWithin" resultType="string">
|
|
||||||
SELECT sharing_profile_id
|
|
||||||
FROM guacamole_sharing_profile
|
|
||||||
WHERE
|
|
||||||
primary_connection_id = #{primaryConnectionIdentifier,jdbcType=INTEGER}::integer
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<!-- Select identifiers of all readable sharing profiles associated with a particular connection -->
|
|
||||||
<select id="selectReadableIdentifiersWithin" resultType="string">
|
|
||||||
SELECT guacamole_sharing_profile.sharing_profile_id
|
|
||||||
FROM guacamole_sharing_profile
|
|
||||||
JOIN guacamole_sharing_profile_permission ON guacamole_sharing_profile_permission.sharing_profile_id = guacamole_sharing_profile.sharing_profile_id
|
|
||||||
WHERE
|
|
||||||
primary_connection_id = #{primaryConnectionIdentifier,jdbcType=INTEGER}::integer
|
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
|
||||||
AND permission = 'READ'
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<!-- Select multiple sharing profiles by identifier -->
|
<!-- Select multiple sharing profiles by identifier -->
|
||||||
<select id="select" resultMap="SharingProfileResultMap">
|
<select id="select" resultMap="SharingProfileResultMap">
|
||||||
|
|
||||||
|
@@ -145,6 +145,10 @@ angular.module('rest').factory('connectionGroupService', ['$injector',
|
|||||||
.success(function connectionGroupCreated(newConnectionGroup){
|
.success(function connectionGroupCreated(newConnectionGroup){
|
||||||
connectionGroup.identifier = newConnectionGroup.identifier;
|
connectionGroup.identifier = newConnectionGroup.identifier;
|
||||||
cacheService.connections.removeAll();
|
cacheService.connections.removeAll();
|
||||||
|
|
||||||
|
// Clear users cache to force reload of permissions for this
|
||||||
|
// newly created connection group
|
||||||
|
cacheService.users.removeAll();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,6 +164,10 @@ angular.module('rest').factory('connectionGroupService', ['$injector',
|
|||||||
// Clear the cache
|
// Clear the cache
|
||||||
.success(function connectionGroupUpdated(){
|
.success(function connectionGroupUpdated(){
|
||||||
cacheService.connections.removeAll();
|
cacheService.connections.removeAll();
|
||||||
|
|
||||||
|
// Clear users cache to force reload of permissions for this
|
||||||
|
// newly updated connection group
|
||||||
|
cacheService.users.removeAll();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -152,6 +152,10 @@ angular.module('rest').factory('connectionService', ['$injector',
|
|||||||
.success(function connectionCreated(newConnection){
|
.success(function connectionCreated(newConnection){
|
||||||
connection.identifier = newConnection.identifier;
|
connection.identifier = newConnection.identifier;
|
||||||
cacheService.connections.removeAll();
|
cacheService.connections.removeAll();
|
||||||
|
|
||||||
|
// Clear users cache to force reload of permissions for this
|
||||||
|
// newly created connection
|
||||||
|
cacheService.users.removeAll();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,6 +171,10 @@ angular.module('rest').factory('connectionService', ['$injector',
|
|||||||
// Clear the cache
|
// Clear the cache
|
||||||
.success(function connectionUpdated(){
|
.success(function connectionUpdated(){
|
||||||
cacheService.connections.removeAll();
|
cacheService.connections.removeAll();
|
||||||
|
|
||||||
|
// Clear users cache to force reload of permissions for this
|
||||||
|
// newly updated connection
|
||||||
|
cacheService.users.removeAll();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -127,6 +127,10 @@ angular.module('rest').factory('sharingProfileService', ['$injector',
|
|||||||
.success(function sharingProfileCreated(newSharingProfile){
|
.success(function sharingProfileCreated(newSharingProfile){
|
||||||
sharingProfile.identifier = newSharingProfile.identifier;
|
sharingProfile.identifier = newSharingProfile.identifier;
|
||||||
cacheService.connections.removeAll();
|
cacheService.connections.removeAll();
|
||||||
|
|
||||||
|
// Clear users cache to force reload of permissions for this
|
||||||
|
// newly created sharing profile
|
||||||
|
cacheService.users.removeAll();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,6 +146,10 @@ angular.module('rest').factory('sharingProfileService', ['$injector',
|
|||||||
// Clear the cache
|
// Clear the cache
|
||||||
.success(function sharingProfileUpdated(){
|
.success(function sharingProfileUpdated(){
|
||||||
cacheService.connections.removeAll();
|
cacheService.connections.removeAll();
|
||||||
|
|
||||||
|
// Clear users cache to force reload of permissions for this
|
||||||
|
// newly updated sharing profile
|
||||||
|
cacheService.users.removeAll();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user