mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-07 05:31:22 +00:00
GUACAMOLE-220: Update MySQL mapping with respect to user group support.
This commit is contained in:
@@ -0,0 +1,123 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<mapper namespace="org.apache.guacamole.auth.jdbc.base.EntityMapper" >
|
||||||
|
|
||||||
|
<!--
|
||||||
|
* SQL fragment which tests whether the value of the given column matches
|
||||||
|
* the given entity ID. If group identifiers are provided, the IDs of the
|
||||||
|
* entities for all groups having those identifiers are tested, as well.
|
||||||
|
* Disabled groups are ignored.
|
||||||
|
*
|
||||||
|
* @param column
|
||||||
|
* The name of the column to test. This column MUST contain an entity
|
||||||
|
* ID (a foreign key into the guacamole_entity table).
|
||||||
|
*
|
||||||
|
* @param entityID
|
||||||
|
* The ID of the specific entity to test the column against.
|
||||||
|
*
|
||||||
|
* @param groups
|
||||||
|
* A collection of group identifiers to additionally test the column
|
||||||
|
* against. Though this functionality is optional, a collection must
|
||||||
|
* always be given, even if that collection is empty.
|
||||||
|
-->
|
||||||
|
<sql id="isRelatedEntity">
|
||||||
|
(
|
||||||
|
${column} = ${entityID}
|
||||||
|
<if test="!${groups}.isEmpty()">
|
||||||
|
OR ${column} IN (
|
||||||
|
SELECT guacamole_entity.entity_id
|
||||||
|
FROM guacamole_entity
|
||||||
|
JOIN guacamole_user_group ON guacamole_user_group.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
type = 'USER_GROUP'
|
||||||
|
AND name IN
|
||||||
|
<foreach collection="${groups}" item="effectiveGroup"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{effectiveGroup,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
AND disabled = false
|
||||||
|
)
|
||||||
|
</if>
|
||||||
|
)
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<!-- Select names of all effective groups (including inherited) -->
|
||||||
|
<select id="selectEffectiveGroupIdentifiers" resultType="string">
|
||||||
|
|
||||||
|
WITH RECURSIVE related_entity(entity_id) AS (
|
||||||
|
SELECT
|
||||||
|
guacamole_user_group.entity_id
|
||||||
|
FROM guacamole_user_group
|
||||||
|
JOIN guacamole_user_group_member ON guacamole_user_group.user_group_id = guacamole_user_group_member.user_group_id
|
||||||
|
WHERE
|
||||||
|
guacamole_user_group_member.member_entity_id = #{entity.entityID}
|
||||||
|
AND guacamole_user_group.disabled = false
|
||||||
|
<if test="!effectiveGroups.isEmpty()">
|
||||||
|
UNION
|
||||||
|
SELECT
|
||||||
|
guacamole_entity.entity_id
|
||||||
|
FROM guacamole_entity
|
||||||
|
JOIN guacamole_user_group ON guacamole_user_group.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
type = 'USER_GROUP'
|
||||||
|
AND name IN
|
||||||
|
<foreach collection="effectiveGroups" item="effectiveGroup"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{effectiveGroup,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
AND guacamole_user_group.disabled = false
|
||||||
|
</if>
|
||||||
|
UNION
|
||||||
|
SELECT
|
||||||
|
guacamole_user_group.entity_id
|
||||||
|
FROM related_entity
|
||||||
|
JOIN guacamole_user_group_member ON related_entity.entity_id = guacamole_user_group_member.member_entity_id
|
||||||
|
JOIN guacamole_user_group ON guacamole_user_group.user_group_id = guacamole_user_group_member.user_group_id
|
||||||
|
WHERE
|
||||||
|
guacamole_user_group.disabled = false
|
||||||
|
)
|
||||||
|
SELECT name
|
||||||
|
FROM related_entity
|
||||||
|
JOIN guacamole_entity ON related_entity.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
guacamole_entity.type = 'USER_GROUP';
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Insert single entity -->
|
||||||
|
<insert id="insert" useGeneratedKeys="true" keyProperty="entity.entityID"
|
||||||
|
parameterType="org.apache.guacamole.auth.jdbc.base.EntityModel">
|
||||||
|
|
||||||
|
INSERT INTO guacamole_entity (
|
||||||
|
name,
|
||||||
|
type
|
||||||
|
)
|
||||||
|
VALUES (
|
||||||
|
#{entity.identifier,jdbcType=VARCHAR},
|
||||||
|
#{entity.entityType,jdbcType=VARCHAR}
|
||||||
|
)
|
||||||
|
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
</mapper>
|
@@ -68,7 +68,11 @@
|
|||||||
SELECT connection_id
|
SELECT connection_id
|
||||||
FROM guacamole_connection_permission
|
FROM guacamole_connection_permission
|
||||||
WHERE
|
WHERE
|
||||||
user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ'
|
AND permission = 'READ'
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -89,7 +93,11 @@
|
|||||||
WHERE
|
WHERE
|
||||||
<if test="parentIdentifier != null">parent_id = #{parentIdentifier,jdbcType=VARCHAR}</if>
|
<if test="parentIdentifier != null">parent_id = #{parentIdentifier,jdbcType=VARCHAR}</if>
|
||||||
<if test="parentIdentifier == null">parent_id IS NULL</if>
|
<if test="parentIdentifier == null">parent_id IS NULL</if>
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ'
|
AND permission = 'READ'
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -165,7 +173,11 @@
|
|||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>
|
||||||
AND guacamole_connection_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_connection_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ'
|
AND permission = 'READ'
|
||||||
GROUP BY guacamole_connection.connection_id;
|
GROUP BY guacamole_connection.connection_id;
|
||||||
|
|
||||||
@@ -177,7 +189,11 @@
|
|||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ';
|
AND permission = 'READ';
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
@@ -191,7 +207,11 @@
|
|||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ';
|
AND permission = 'READ';
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
@@ -79,7 +79,10 @@
|
|||||||
#{record.sharingProfileIdentifier,jdbcType=VARCHAR},
|
#{record.sharingProfileIdentifier,jdbcType=VARCHAR},
|
||||||
#{record.sharingProfileName,jdbcType=VARCHAR},
|
#{record.sharingProfileName,jdbcType=VARCHAR},
|
||||||
(SELECT user_id FROM guacamole_user
|
(SELECT user_id FROM guacamole_user
|
||||||
WHERE username = #{record.username,jdbcType=VARCHAR}),
|
JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
guacamole_entity.name = #{record.username,jdbcType=VARCHAR}
|
||||||
|
AND guacamole_entity.type = 'USER'),
|
||||||
#{record.username,jdbcType=VARCHAR},
|
#{record.username,jdbcType=VARCHAR},
|
||||||
#{record.startDate,jdbcType=TIMESTAMP},
|
#{record.startDate,jdbcType=TIMESTAMP},
|
||||||
#{record.endDate,jdbcType=TIMESTAMP}
|
#{record.endDate,jdbcType=TIMESTAMP}
|
||||||
@@ -165,13 +168,21 @@
|
|||||||
<!-- Restrict to readable connections -->
|
<!-- Restrict to readable connections -->
|
||||||
JOIN guacamole_connection_permission ON
|
JOIN guacamole_connection_permission ON
|
||||||
guacamole_connection_history.connection_id = guacamole_connection_permission.connection_id
|
guacamole_connection_history.connection_id = guacamole_connection_permission.connection_id
|
||||||
AND guacamole_connection_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_connection_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND guacamole_connection_permission.permission = 'READ'
|
AND guacamole_connection_permission.permission = 'READ'
|
||||||
|
|
||||||
<!-- Restrict to readable users -->
|
<!-- Restrict to readable users -->
|
||||||
JOIN guacamole_user_permission ON
|
JOIN guacamole_user_permission ON
|
||||||
guacamole_connection_history.user_id = guacamole_user_permission.affected_user_id
|
guacamole_connection_history.user_id = guacamole_user_permission.affected_user_id
|
||||||
AND guacamole_user_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND guacamole_user_permission.permission = 'READ'
|
AND guacamole_user_permission.permission = 'READ'
|
||||||
|
|
||||||
<!-- Search terms -->
|
<!-- Search terms -->
|
||||||
@@ -182,7 +193,10 @@
|
|||||||
guacamole_connection_history.user_id IN (
|
guacamole_connection_history.user_id IN (
|
||||||
SELECT user_id
|
SELECT user_id
|
||||||
FROM guacamole_user
|
FROM guacamole_user
|
||||||
WHERE POSITION(#{term.term,jdbcType=VARCHAR} IN username) > 0
|
JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
POSITION(#{term.term,jdbcType=VARCHAR} IN guacamole_entity.name) > 0
|
||||||
|
AND guacamole_entity.type = 'USER'
|
||||||
)
|
)
|
||||||
|
|
||||||
OR guacamole_connection_history.connection_id IN (
|
OR guacamole_connection_history.connection_id IN (
|
||||||
|
@@ -69,7 +69,11 @@
|
|||||||
SELECT connection_group_id
|
SELECT connection_group_id
|
||||||
FROM guacamole_connection_group_permission
|
FROM guacamole_connection_group_permission
|
||||||
WHERE
|
WHERE
|
||||||
user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ'
|
AND permission = 'READ'
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -90,7 +94,11 @@
|
|||||||
WHERE
|
WHERE
|
||||||
<if test="parentIdentifier != null">parent_id = #{parentIdentifier,jdbcType=VARCHAR}</if>
|
<if test="parentIdentifier != null">parent_id = #{parentIdentifier,jdbcType=VARCHAR}</if>
|
||||||
<if test="parentIdentifier == null">parent_id IS NULL</if>
|
<if test="parentIdentifier == null">parent_id IS NULL</if>
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ'
|
AND permission = 'READ'
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -161,7 +169,11 @@
|
|||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ';
|
AND permission = 'READ';
|
||||||
|
|
||||||
SELECT parent_id, guacamole_connection_group.connection_group_id
|
SELECT parent_id, guacamole_connection_group.connection_group_id
|
||||||
@@ -172,7 +184,11 @@
|
|||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ';
|
AND permission = 'READ';
|
||||||
|
|
||||||
SELECT parent_id, guacamole_connection.connection_id
|
SELECT parent_id, guacamole_connection.connection_id
|
||||||
@@ -183,7 +199,11 @@
|
|||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ';
|
AND permission = 'READ';
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
@@ -197,7 +217,11 @@
|
|||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ';
|
AND permission = 'READ';
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
@@ -25,24 +25,26 @@
|
|||||||
|
|
||||||
<!-- Result mapper for connection permissions -->
|
<!-- Result mapper for connection permissions -->
|
||||||
<resultMap id="ConnectionGroupPermissionResultMap" type="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
<resultMap id="ConnectionGroupPermissionResultMap" type="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
<result column="user_id" property="userID" jdbcType="INTEGER"/>
|
<result column="entity_id" property="entityID" jdbcType="INTEGER"/>
|
||||||
<result column="username" property="username" jdbcType="VARCHAR"/>
|
|
||||||
<result column="permission" property="type" jdbcType="VARCHAR"
|
<result column="permission" property="type" jdbcType="VARCHAR"
|
||||||
javaType="org.apache.guacamole.net.auth.permission.ObjectPermission$Type"/>
|
javaType="org.apache.guacamole.net.auth.permission.ObjectPermission$Type"/>
|
||||||
<result column="connection_group_id" property="objectIdentifier" jdbcType="INTEGER"/>
|
<result column="connection_group_id" property="objectIdentifier" jdbcType="INTEGER"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<!-- Select all permissions for a given user -->
|
<!-- Select all permissions for a given entity -->
|
||||||
<select id="select" resultMap="ConnectionGroupPermissionResultMap">
|
<select id="select" resultMap="ConnectionGroupPermissionResultMap">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_connection_group_permission.user_id,
|
#{entity.entityID,jdbcType=INTEGER} AS entity_id,
|
||||||
username,
|
|
||||||
permission,
|
permission,
|
||||||
connection_group_id
|
connection_group_id
|
||||||
FROM guacamole_connection_group_permission
|
FROM guacamole_connection_group_permission
|
||||||
JOIN guacamole_user ON guacamole_connection_group_permission.user_id = guacamole_user.user_id
|
WHERE
|
||||||
WHERE guacamole_connection_group_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -50,26 +52,32 @@
|
|||||||
<select id="selectOne" resultMap="ConnectionGroupPermissionResultMap">
|
<select id="selectOne" resultMap="ConnectionGroupPermissionResultMap">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_connection_group_permission.user_id,
|
#{entity.entityID,jdbcType=INTEGER} AS entity_id,
|
||||||
username,
|
|
||||||
permission,
|
permission,
|
||||||
connection_group_id
|
connection_group_id
|
||||||
FROM guacamole_connection_group_permission
|
FROM guacamole_connection_group_permission
|
||||||
JOIN guacamole_user ON guacamole_connection_group_permission.user_id = guacamole_user.user_id
|
|
||||||
WHERE
|
WHERE
|
||||||
guacamole_connection_group_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = #{type,jdbcType=VARCHAR}
|
AND permission = #{type,jdbcType=VARCHAR}
|
||||||
AND connection_group_id = #{identifier,jdbcType=VARCHAR}
|
AND connection_group_id = #{identifier,jdbcType=VARCHAR}
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select identifiers accessible by the given user for the given permissions -->
|
<!-- Select identifiers accessible by the given entity for the given permissions -->
|
||||||
<select id="selectAccessibleIdentifiers" resultType="string">
|
<select id="selectAccessibleIdentifiers" resultType="string">
|
||||||
|
|
||||||
SELECT DISTINCT connection_group_id
|
SELECT DISTINCT connection_group_id
|
||||||
FROM guacamole_connection_group_permission
|
FROM guacamole_connection_group_permission
|
||||||
WHERE
|
WHERE
|
||||||
user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND connection_group_id IN
|
AND connection_group_id IN
|
||||||
<foreach collection="identifiers" item="identifier"
|
<foreach collection="identifiers" item="identifier"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
@@ -87,10 +95,10 @@
|
|||||||
<delete id="delete" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
<delete id="delete" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
|
|
||||||
DELETE FROM guacamole_connection_group_permission
|
DELETE FROM guacamole_connection_group_permission
|
||||||
WHERE (user_id, permission, connection_group_id) IN
|
WHERE (entity_id, permission, connection_group_id) IN
|
||||||
<foreach collection="permissions" item="permission"
|
<foreach collection="permissions" item="permission"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
(#{permission.userID,jdbcType=INTEGER},
|
(#{permission.entityID,jdbcType=INTEGER},
|
||||||
#{permission.type,jdbcType=VARCHAR},
|
#{permission.type,jdbcType=VARCHAR},
|
||||||
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
||||||
</foreach>
|
</foreach>
|
||||||
@@ -101,13 +109,13 @@
|
|||||||
<insert id="insert" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
<insert id="insert" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
|
|
||||||
INSERT IGNORE INTO guacamole_connection_group_permission (
|
INSERT IGNORE INTO guacamole_connection_group_permission (
|
||||||
user_id,
|
entity_id,
|
||||||
permission,
|
permission,
|
||||||
connection_group_id
|
connection_group_id
|
||||||
)
|
)
|
||||||
VALUES
|
VALUES
|
||||||
<foreach collection="permissions" item="permission" separator=",">
|
<foreach collection="permissions" item="permission" separator=",">
|
||||||
(#{permission.userID,jdbcType=INTEGER},
|
(#{permission.entityID,jdbcType=INTEGER},
|
||||||
#{permission.type,jdbcType=VARCHAR},
|
#{permission.type,jdbcType=VARCHAR},
|
||||||
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
||||||
</foreach>
|
</foreach>
|
||||||
|
@@ -25,24 +25,26 @@
|
|||||||
|
|
||||||
<!-- Result mapper for connection permissions -->
|
<!-- Result mapper for connection permissions -->
|
||||||
<resultMap id="ConnectionPermissionResultMap" type="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
<resultMap id="ConnectionPermissionResultMap" type="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
<result column="user_id" property="userID" jdbcType="INTEGER"/>
|
<result column="entity_id" property="entityID" jdbcType="INTEGER"/>
|
||||||
<result column="username" property="username" jdbcType="VARCHAR"/>
|
|
||||||
<result column="permission" property="type" jdbcType="VARCHAR"
|
<result column="permission" property="type" jdbcType="VARCHAR"
|
||||||
javaType="org.apache.guacamole.net.auth.permission.ObjectPermission$Type"/>
|
javaType="org.apache.guacamole.net.auth.permission.ObjectPermission$Type"/>
|
||||||
<result column="connection_id" property="objectIdentifier" jdbcType="INTEGER"/>
|
<result column="connection_id" property="objectIdentifier" jdbcType="INTEGER"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<!-- Select all permissions for a given user -->
|
<!-- Select all permissions for a given entity -->
|
||||||
<select id="select" resultMap="ConnectionPermissionResultMap">
|
<select id="select" resultMap="ConnectionPermissionResultMap">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_connection_permission.user_id,
|
#{entity.entityID,jdbcType=INTEGER} AS entity_id,
|
||||||
username,
|
|
||||||
permission,
|
permission,
|
||||||
connection_id
|
connection_id
|
||||||
FROM guacamole_connection_permission
|
FROM guacamole_connection_permission
|
||||||
JOIN guacamole_user ON guacamole_connection_permission.user_id = guacamole_user.user_id
|
WHERE
|
||||||
WHERE guacamole_connection_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -50,26 +52,32 @@
|
|||||||
<select id="selectOne" resultMap="ConnectionPermissionResultMap">
|
<select id="selectOne" resultMap="ConnectionPermissionResultMap">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_connection_permission.user_id,
|
#{entity.entityID,jdbcType=INTEGER} AS entity_id,
|
||||||
username,
|
|
||||||
permission,
|
permission,
|
||||||
connection_id
|
connection_id
|
||||||
FROM guacamole_connection_permission
|
FROM guacamole_connection_permission
|
||||||
JOIN guacamole_user ON guacamole_connection_permission.user_id = guacamole_user.user_id
|
|
||||||
WHERE
|
WHERE
|
||||||
guacamole_connection_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = #{type,jdbcType=VARCHAR}
|
AND permission = #{type,jdbcType=VARCHAR}
|
||||||
AND connection_id = #{identifier,jdbcType=VARCHAR}
|
AND connection_id = #{identifier,jdbcType=VARCHAR}
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select identifiers accessible by the given user for the given permissions -->
|
<!-- Select identifiers accessible by the given entity for the given permissions -->
|
||||||
<select id="selectAccessibleIdentifiers" resultType="string">
|
<select id="selectAccessibleIdentifiers" resultType="string">
|
||||||
|
|
||||||
SELECT DISTINCT connection_id
|
SELECT DISTINCT connection_id
|
||||||
FROM guacamole_connection_permission
|
FROM guacamole_connection_permission
|
||||||
WHERE
|
WHERE
|
||||||
user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND connection_id IN
|
AND connection_id IN
|
||||||
<foreach collection="identifiers" item="identifier"
|
<foreach collection="identifiers" item="identifier"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
@@ -87,10 +95,10 @@
|
|||||||
<delete id="delete" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
<delete id="delete" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
|
|
||||||
DELETE FROM guacamole_connection_permission
|
DELETE FROM guacamole_connection_permission
|
||||||
WHERE (user_id, permission, connection_id) IN
|
WHERE (entity_id, permission, connection_id) IN
|
||||||
<foreach collection="permissions" item="permission"
|
<foreach collection="permissions" item="permission"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
(#{permission.userID,jdbcType=INTEGER},
|
(#{permission.entityID,jdbcType=INTEGER},
|
||||||
#{permission.type,jdbcType=VARCHAR},
|
#{permission.type,jdbcType=VARCHAR},
|
||||||
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
||||||
</foreach>
|
</foreach>
|
||||||
@@ -101,13 +109,13 @@
|
|||||||
<insert id="insert" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
<insert id="insert" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
|
|
||||||
INSERT IGNORE INTO guacamole_connection_permission (
|
INSERT IGNORE INTO guacamole_connection_permission (
|
||||||
user_id,
|
entity_id,
|
||||||
permission,
|
permission,
|
||||||
connection_id
|
connection_id
|
||||||
)
|
)
|
||||||
VALUES
|
VALUES
|
||||||
<foreach collection="permissions" item="permission" separator=",">
|
<foreach collection="permissions" item="permission" separator=",">
|
||||||
(#{permission.userID,jdbcType=INTEGER},
|
(#{permission.entityID,jdbcType=INTEGER},
|
||||||
#{permission.type,jdbcType=VARCHAR},
|
#{permission.type,jdbcType=VARCHAR},
|
||||||
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
||||||
</foreach>
|
</foreach>
|
||||||
|
@@ -23,26 +23,28 @@
|
|||||||
|
|
||||||
<mapper namespace="org.apache.guacamole.auth.jdbc.permission.SharingProfilePermissionMapper">
|
<mapper namespace="org.apache.guacamole.auth.jdbc.permission.SharingProfilePermissionMapper">
|
||||||
|
|
||||||
<!-- Result mapper for sharig profile permissions -->
|
<!-- Result mapper for sharing profile permissions -->
|
||||||
<resultMap id="SharingProfilePermissionResultMap" type="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
<resultMap id="SharingProfilePermissionResultMap" type="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
<result column="user_id" property="userID" jdbcType="INTEGER"/>
|
<result column="entity_id" property="entityID" jdbcType="INTEGER"/>
|
||||||
<result column="username" property="username" jdbcType="VARCHAR"/>
|
|
||||||
<result column="permission" property="type" jdbcType="VARCHAR"
|
<result column="permission" property="type" jdbcType="VARCHAR"
|
||||||
javaType="org.apache.guacamole.net.auth.permission.ObjectPermission$Type"/>
|
javaType="org.apache.guacamole.net.auth.permission.ObjectPermission$Type"/>
|
||||||
<result column="sharing_profile_id" property="objectIdentifier" jdbcType="INTEGER"/>
|
<result column="sharing_profile_id" property="objectIdentifier" jdbcType="INTEGER"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<!-- Select all permissions for a given user -->
|
<!-- Select all permissions for a given entity -->
|
||||||
<select id="select" resultMap="SharingProfilePermissionResultMap">
|
<select id="select" resultMap="SharingProfilePermissionResultMap">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_sharing_profile_permission.user_id,
|
#{entity.entityID,jdbcType=INTEGER} AS entity_id,
|
||||||
username,
|
|
||||||
permission,
|
permission,
|
||||||
sharing_profile_id
|
sharing_profile_id
|
||||||
FROM guacamole_sharing_profile_permission
|
FROM guacamole_sharing_profile_permission
|
||||||
JOIN guacamole_user ON guacamole_sharing_profile_permission.user_id = guacamole_user.user_id
|
WHERE
|
||||||
WHERE guacamole_sharing_profile_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -50,26 +52,32 @@
|
|||||||
<select id="selectOne" resultMap="SharingProfilePermissionResultMap">
|
<select id="selectOne" resultMap="SharingProfilePermissionResultMap">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_sharing_profile_permission.user_id,
|
#{entity.entityID,jdbcType=INTEGER} AS entity_id,
|
||||||
username,
|
|
||||||
permission,
|
permission,
|
||||||
sharing_profile_id
|
sharing_profile_id
|
||||||
FROM guacamole_sharing_profile_permission
|
FROM guacamole_sharing_profile_permission
|
||||||
JOIN guacamole_user ON guacamole_sharing_profile_permission.user_id = guacamole_user.user_id
|
|
||||||
WHERE
|
WHERE
|
||||||
guacamole_sharing_profile_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = #{type,jdbcType=VARCHAR}
|
AND permission = #{type,jdbcType=VARCHAR}
|
||||||
AND sharing_profile_id = #{identifier,jdbcType=VARCHAR}
|
AND sharing_profile_id = #{identifier,jdbcType=VARCHAR}
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select identifiers accessible by the given user for the given permissions -->
|
<!-- Select identifiers accessible by the given entity for the given permissions -->
|
||||||
<select id="selectAccessibleIdentifiers" resultType="string">
|
<select id="selectAccessibleIdentifiers" resultType="string">
|
||||||
|
|
||||||
SELECT DISTINCT sharing_profile_id
|
SELECT DISTINCT sharing_profile_id
|
||||||
FROM guacamole_sharing_profile_permission
|
FROM guacamole_sharing_profile_permission
|
||||||
WHERE
|
WHERE
|
||||||
user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND sharing_profile_id IN
|
AND sharing_profile_id IN
|
||||||
<foreach collection="identifiers" item="identifier"
|
<foreach collection="identifiers" item="identifier"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
@@ -87,10 +95,10 @@
|
|||||||
<delete id="delete" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
<delete id="delete" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
|
|
||||||
DELETE FROM guacamole_sharing_profile_permission
|
DELETE FROM guacamole_sharing_profile_permission
|
||||||
WHERE (user_id, permission, sharing_profile_id) IN
|
WHERE (entity_id, permission, sharing_profile_id) IN
|
||||||
<foreach collection="permissions" item="permission"
|
<foreach collection="permissions" item="permission"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
(#{permission.userID,jdbcType=INTEGER},
|
(#{permission.entityID,jdbcType=INTEGER},
|
||||||
#{permission.type,jdbcType=VARCHAR},
|
#{permission.type,jdbcType=VARCHAR},
|
||||||
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
||||||
</foreach>
|
</foreach>
|
||||||
@@ -101,13 +109,13 @@
|
|||||||
<insert id="insert" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
<insert id="insert" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
|
|
||||||
INSERT IGNORE INTO guacamole_sharing_profile_permission (
|
INSERT IGNORE INTO guacamole_sharing_profile_permission (
|
||||||
user_id,
|
entity_id,
|
||||||
permission,
|
permission,
|
||||||
sharing_profile_id
|
sharing_profile_id
|
||||||
)
|
)
|
||||||
VALUES
|
VALUES
|
||||||
<foreach collection="permissions" item="permission" separator=",">
|
<foreach collection="permissions" item="permission" separator=",">
|
||||||
(#{permission.userID,jdbcType=INTEGER},
|
(#{permission.entityID,jdbcType=INTEGER},
|
||||||
#{permission.type,jdbcType=VARCHAR},
|
#{permission.type,jdbcType=VARCHAR},
|
||||||
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
||||||
</foreach>
|
</foreach>
|
||||||
|
@@ -25,36 +25,40 @@
|
|||||||
|
|
||||||
<!-- Result mapper for system permissions -->
|
<!-- Result mapper for system permissions -->
|
||||||
<resultMap id="SystemPermissionResultMap" type="org.apache.guacamole.auth.jdbc.permission.SystemPermissionModel">
|
<resultMap id="SystemPermissionResultMap" type="org.apache.guacamole.auth.jdbc.permission.SystemPermissionModel">
|
||||||
<result column="user_id" property="userID" jdbcType="INTEGER"/>
|
<result column="entity_id" property="entityID" jdbcType="INTEGER"/>
|
||||||
<result column="username" property="username" jdbcType="VARCHAR"/>
|
|
||||||
<result column="permission" property="type" jdbcType="VARCHAR"
|
<result column="permission" property="type" jdbcType="VARCHAR"
|
||||||
javaType="org.apache.guacamole.net.auth.permission.SystemPermission$Type"/>
|
javaType="org.apache.guacamole.net.auth.permission.SystemPermission$Type"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<!-- Select all permissions for a given user -->
|
<!-- Select all permissions for a given entity -->
|
||||||
<select id="select" resultMap="SystemPermissionResultMap">
|
<select id="select" resultMap="SystemPermissionResultMap">
|
||||||
|
|
||||||
SELECT
|
SELECT DISTINCT
|
||||||
guacamole_system_permission.user_id,
|
#{entity.entityID} AS entity_id,
|
||||||
username,
|
|
||||||
permission
|
permission
|
||||||
FROM guacamole_system_permission
|
FROM guacamole_system_permission
|
||||||
JOIN guacamole_user ON guacamole_system_permission.user_id = guacamole_user.user_id
|
WHERE
|
||||||
WHERE guacamole_system_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select the single permission matching the given criteria -->
|
<!-- Select the single permission matching the given criteria -->
|
||||||
<select id="selectOne" resultMap="SystemPermissionResultMap">
|
<select id="selectOne" resultMap="SystemPermissionResultMap">
|
||||||
|
|
||||||
SELECT
|
SELECT DISTINCT
|
||||||
guacamole_system_permission.user_id,
|
#{entity.entityID} AS entity_id,
|
||||||
username,
|
|
||||||
permission
|
permission
|
||||||
FROM guacamole_system_permission
|
FROM guacamole_system_permission
|
||||||
JOIN guacamole_user ON guacamole_system_permission.user_id = guacamole_user.user_id
|
|
||||||
WHERE
|
WHERE
|
||||||
guacamole_system_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = #{type,jdbcType=VARCHAR}
|
AND permission = #{type,jdbcType=VARCHAR}
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
@@ -63,10 +67,10 @@
|
|||||||
<delete id="delete" parameterType="org.apache.guacamole.auth.jdbc.permission.SystemPermissionModel">
|
<delete id="delete" parameterType="org.apache.guacamole.auth.jdbc.permission.SystemPermissionModel">
|
||||||
|
|
||||||
DELETE FROM guacamole_system_permission
|
DELETE FROM guacamole_system_permission
|
||||||
WHERE (user_id, permission) IN
|
WHERE (entity_id, permission) IN
|
||||||
<foreach collection="permissions" item="permission"
|
<foreach collection="permissions" item="permission"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
(#{permission.userID,jdbcType=INTEGER},
|
(#{permission.entityID,jdbcType=INTEGER},
|
||||||
#{permission.type,jdbcType=VARCHAR})
|
#{permission.type,jdbcType=VARCHAR})
|
||||||
</foreach>
|
</foreach>
|
||||||
|
|
||||||
@@ -76,12 +80,12 @@
|
|||||||
<insert id="insert" parameterType="org.apache.guacamole.auth.jdbc.permission.SystemPermissionModel">
|
<insert id="insert" parameterType="org.apache.guacamole.auth.jdbc.permission.SystemPermissionModel">
|
||||||
|
|
||||||
INSERT IGNORE INTO guacamole_system_permission (
|
INSERT IGNORE INTO guacamole_system_permission (
|
||||||
user_id,
|
entity_id,
|
||||||
permission
|
permission
|
||||||
)
|
)
|
||||||
VALUES
|
VALUES
|
||||||
<foreach collection="permissions" item="permission" separator=",">
|
<foreach collection="permissions" item="permission" separator=",">
|
||||||
(#{permission.userID,jdbcType=INTEGER},
|
(#{permission.entityID,jdbcType=INTEGER},
|
||||||
#{permission.type,jdbcType=VARCHAR})
|
#{permission.type,jdbcType=VARCHAR})
|
||||||
</foreach>
|
</foreach>
|
||||||
|
|
||||||
|
@@ -0,0 +1,149 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<mapper namespace="org.apache.guacamole.auth.jdbc.permission.UserGroupPermissionMapper" >
|
||||||
|
|
||||||
|
<!-- Result mapper for user group permissions -->
|
||||||
|
<resultMap id="UserGroupPermissionResultMap" type="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
|
<result column="entity_id" property="entityID" jdbcType="INTEGER"/>
|
||||||
|
<result column="permission" property="type" jdbcType="VARCHAR"
|
||||||
|
javaType="org.apache.guacamole.net.auth.permission.ObjectPermission$Type"/>
|
||||||
|
<result column="affected_name" property="objectIdentifier" jdbcType="INTEGER"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<!-- Select all permissions for a given entity -->
|
||||||
|
<select id="select" resultMap="UserGroupPermissionResultMap">
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
#{entity.entityID,jdbcType=INTEGER} AS entity_id,
|
||||||
|
permission,
|
||||||
|
affected_entity.name AS affected_name
|
||||||
|
FROM guacamole_user_group_permission
|
||||||
|
JOIN guacamole_user_group affected_group ON guacamole_user_group_permission.affected_user_group_id = affected_group.user_group_id
|
||||||
|
JOIN guacamole_entity affected_entity ON affected_group.entity_id = affected_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_group_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
AND affected_entity.type = 'USER_GROUP'
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Select the single permission matching the given criteria -->
|
||||||
|
<select id="selectOne" resultMap="UserGroupPermissionResultMap">
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
#{entity.entityID,jdbcType=INTEGER} AS entity_id,
|
||||||
|
permission,
|
||||||
|
affected_entity.name AS affected_name
|
||||||
|
FROM guacamole_user_group_permission
|
||||||
|
JOIN guacamole_user_group affected_group ON guacamole_user_group_permission.affected_user_group_id = affected_group.user_group_id
|
||||||
|
JOIN guacamole_entity affected_entity ON affected_group.entity_id = affected_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_group_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
AND permission = #{type,jdbcType=VARCHAR}
|
||||||
|
AND affected_entity.name = #{identifier,jdbcType=VARCHAR}
|
||||||
|
AND affected_entity.type = 'USER_GROUP'
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Select identifiers accessible by the given entity for the given permissions -->
|
||||||
|
<select id="selectAccessibleIdentifiers" resultType="string">
|
||||||
|
|
||||||
|
SELECT DISTINCT affected_entity.name
|
||||||
|
FROM guacamole_user_group_permission
|
||||||
|
JOIN guacamole_user_group affected_group ON guacamole_user_group_permission.affected_user_group_id = affected_group.user_group_id
|
||||||
|
JOIN guacamole_entity affected_entity ON affected_group.entity_id = affected_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_group_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
AND affected_entity.name IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
AND permission IN
|
||||||
|
<foreach collection="permissions" item="permission"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{permission,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
AND affected_entity.type = 'USER_GROUP'
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Delete all given permissions -->
|
||||||
|
<delete id="delete" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
|
|
||||||
|
DELETE FROM guacamole_user_group_permission
|
||||||
|
USING guacamole_user_group_permission
|
||||||
|
JOIN guacamole_user_group affected_group ON guacamole_user_group_permission.affected_user_group_id = affected_group.user_group_id
|
||||||
|
JOIN guacamole_entity affected_entity ON affected_group.entity_id = affected_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
(guacamole_user_group_permission.entity_id, permission, affected_entity.name) IN
|
||||||
|
<foreach collection="permissions" item="permission"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
(#{permission.entityID,jdbcType=INTEGER},
|
||||||
|
#{permission.type,jdbcType=VARCHAR},
|
||||||
|
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
||||||
|
</foreach>
|
||||||
|
AND affected_entity.type = 'USER_GROUP'
|
||||||
|
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<!-- Insert all given permissions -->
|
||||||
|
<insert id="insert" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
|
|
||||||
|
INSERT IGNORE INTO guacamole_user_group_permission (
|
||||||
|
entity_id,
|
||||||
|
permission,
|
||||||
|
affected_user_group_id
|
||||||
|
)
|
||||||
|
SELECT DISTINCT
|
||||||
|
permissions.entity_id,
|
||||||
|
permissions.permission,
|
||||||
|
affected_group.user_group_id
|
||||||
|
FROM
|
||||||
|
<foreach collection="permissions" item="permission"
|
||||||
|
open="(" separator="UNION ALL" close=")">
|
||||||
|
SELECT #{permission.entityID,jdbcType=INTEGER} AS entity_id,
|
||||||
|
#{permission.type,jdbcType=VARCHAR} AS permission,
|
||||||
|
#{permission.objectIdentifier,jdbcType=VARCHAR} AS affected_name
|
||||||
|
</foreach>
|
||||||
|
AS permissions
|
||||||
|
JOIN guacamole_entity affected_entity ON
|
||||||
|
affected_entity.name = permissions.affected_name
|
||||||
|
AND affected_entity.type = 'USER_GROUP'
|
||||||
|
JOIN guacamole_user_group affected_group ON affected_group.entity_id = affected_entity.entity_id
|
||||||
|
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
</mapper>
|
@@ -25,25 +25,29 @@
|
|||||||
|
|
||||||
<!-- Result mapper for user permissions -->
|
<!-- Result mapper for user permissions -->
|
||||||
<resultMap id="UserPermissionResultMap" type="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
<resultMap id="UserPermissionResultMap" type="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
<result column="user_id" property="userID" jdbcType="INTEGER"/>
|
<result column="entity_id" property="entityID" jdbcType="INTEGER"/>
|
||||||
<result column="username" property="username" jdbcType="VARCHAR"/>
|
|
||||||
<result column="permission" property="type" jdbcType="VARCHAR"
|
<result column="permission" property="type" jdbcType="VARCHAR"
|
||||||
javaType="org.apache.guacamole.net.auth.permission.ObjectPermission$Type"/>
|
javaType="org.apache.guacamole.net.auth.permission.ObjectPermission$Type"/>
|
||||||
<result column="affected_username" property="objectIdentifier" jdbcType="INTEGER"/>
|
<result column="affected_name" property="objectIdentifier" jdbcType="INTEGER"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<!-- Select all permissions for a given user -->
|
<!-- Select all permissions for a given entity -->
|
||||||
<select id="select" resultMap="UserPermissionResultMap">
|
<select id="select" resultMap="UserPermissionResultMap">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_user_permission.user_id,
|
#{entity.entityID,jdbcType=INTEGER} AS entity_id,
|
||||||
guacamole_user.username,
|
|
||||||
permission,
|
permission,
|
||||||
affected.username AS affected_username
|
affected_entity.name AS affected_name
|
||||||
FROM guacamole_user_permission
|
FROM guacamole_user_permission
|
||||||
JOIN guacamole_user ON guacamole_user_permission.user_id = guacamole_user.user_id
|
JOIN guacamole_user affected_user ON guacamole_user_permission.affected_user_id = affected_user.user_id
|
||||||
JOIN guacamole_user affected ON guacamole_user_permission.affected_user_id = affected.user_id
|
JOIN guacamole_entity affected_entity ON affected_user.entity_id = affected_entity.entity_id
|
||||||
WHERE guacamole_user_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
WHERE
|
||||||
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
AND affected_entity.type = 'USER'
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -51,29 +55,38 @@
|
|||||||
<select id="selectOne" resultMap="UserPermissionResultMap">
|
<select id="selectOne" resultMap="UserPermissionResultMap">
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_user_permission.user_id,
|
#{entity.entityID,jdbcType=INTEGER} AS entity_id,
|
||||||
guacamole_user.username,
|
|
||||||
permission,
|
permission,
|
||||||
affected.username AS affected_username
|
affected_entity.name AS affected_name
|
||||||
FROM guacamole_user_permission
|
FROM guacamole_user_permission
|
||||||
JOIN guacamole_user ON guacamole_user_permission.user_id = guacamole_user.user_id
|
JOIN guacamole_user affected_user ON guacamole_user_permission.affected_user_id = affected_user.user_id
|
||||||
JOIN guacamole_user affected ON guacamole_user_permission.affected_user_id = affected.user_id
|
JOIN guacamole_entity affected_entity ON affected_user.entity_id = affected_entity.entity_id
|
||||||
WHERE
|
WHERE
|
||||||
guacamole_user_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = #{type,jdbcType=VARCHAR}
|
AND permission = #{type,jdbcType=VARCHAR}
|
||||||
AND affected.username = #{identifier,jdbcType=VARCHAR}
|
AND affected_entity.name = #{identifier,jdbcType=VARCHAR}
|
||||||
|
AND affected_entity.type = 'USER'
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select identifiers accessible by the given user for the given permissions -->
|
<!-- Select identifiers accessible by the given entity for the given permissions -->
|
||||||
<select id="selectAccessibleIdentifiers" resultType="string">
|
<select id="selectAccessibleIdentifiers" resultType="string">
|
||||||
|
|
||||||
SELECT DISTINCT username
|
SELECT DISTINCT affected_entity.name
|
||||||
FROM guacamole_user_permission
|
FROM guacamole_user_permission
|
||||||
JOIN guacamole_user ON guacamole_user_permission.affected_user_id = guacamole_user.user_id
|
JOIN guacamole_user affected_user ON guacamole_user_permission.affected_user_id = affected_user.user_id
|
||||||
|
JOIN guacamole_entity affected_entity ON affected_user.entity_id = affected_entity.entity_id
|
||||||
WHERE
|
WHERE
|
||||||
guacamole_user_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
AND username IN
|
<property name="column" value="guacamole_user_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{entity.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
AND affected_entity.name IN
|
||||||
<foreach collection="identifiers" item="identifier"
|
<foreach collection="identifiers" item="identifier"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
@@ -83,6 +96,7 @@
|
|||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{permission,jdbcType=VARCHAR}
|
#{permission,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>
|
||||||
|
AND affected_entity.type = 'USER'
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -91,15 +105,17 @@
|
|||||||
|
|
||||||
DELETE FROM guacamole_user_permission
|
DELETE FROM guacamole_user_permission
|
||||||
USING guacamole_user_permission
|
USING guacamole_user_permission
|
||||||
JOIN guacamole_user affected ON guacamole_user_permission.affected_user_id = affected.user_id
|
JOIN guacamole_user affected_user ON guacamole_user_permission.affected_user_id = affected_user.user_id
|
||||||
|
JOIN guacamole_entity affected_entity ON affected_user.entity_id = affected_entity.entity_id
|
||||||
WHERE
|
WHERE
|
||||||
(guacamole_user_permission.user_id, permission, affected.username) IN
|
(guacamole_user_permission.entity_id, permission, affected_entity.name) IN
|
||||||
<foreach collection="permissions" item="permission"
|
<foreach collection="permissions" item="permission"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
(#{permission.userID,jdbcType=INTEGER},
|
(#{permission.entityID,jdbcType=INTEGER},
|
||||||
#{permission.type,jdbcType=VARCHAR},
|
#{permission.type,jdbcType=VARCHAR},
|
||||||
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
||||||
</foreach>
|
</foreach>
|
||||||
|
AND affected_entity.type = 'USER'
|
||||||
|
|
||||||
</delete>
|
</delete>
|
||||||
|
|
||||||
@@ -107,19 +123,26 @@
|
|||||||
<insert id="insert" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
<insert id="insert" parameterType="org.apache.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
|
|
||||||
INSERT IGNORE INTO guacamole_user_permission (
|
INSERT IGNORE INTO guacamole_user_permission (
|
||||||
user_id,
|
entity_id,
|
||||||
permission,
|
permission,
|
||||||
affected_user_id
|
affected_user_id
|
||||||
)
|
)
|
||||||
SELECT permissions.user_id, permissions.permission, guacamole_user.user_id FROM
|
SELECT DISTINCT
|
||||||
|
permissions.entity_id,
|
||||||
|
permissions.permission,
|
||||||
|
affected_user.user_id
|
||||||
|
FROM
|
||||||
<foreach collection="permissions" item="permission"
|
<foreach collection="permissions" item="permission"
|
||||||
open="(" separator="UNION ALL" close=")">
|
open="(" separator="UNION ALL" close=")">
|
||||||
SELECT #{permission.userID,jdbcType=INTEGER} AS user_id,
|
SELECT #{permission.entityID,jdbcType=INTEGER} AS entity_id,
|
||||||
#{permission.type,jdbcType=VARCHAR} AS permission,
|
#{permission.type,jdbcType=VARCHAR} AS permission,
|
||||||
#{permission.objectIdentifier,jdbcType=VARCHAR} AS username
|
#{permission.objectIdentifier,jdbcType=VARCHAR} AS affected_name
|
||||||
</foreach>
|
</foreach>
|
||||||
AS permissions
|
AS permissions
|
||||||
JOIN guacamole_user ON guacamole_user.username = permissions.username;
|
JOIN guacamole_entity affected_entity ON
|
||||||
|
affected_entity.name = permissions.affected_name
|
||||||
|
AND affected_entity.type = 'USER'
|
||||||
|
JOIN guacamole_user affected_user ON affected_user.entity_id = affected_entity.entity_id
|
||||||
|
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
@@ -52,7 +52,11 @@
|
|||||||
SELECT sharing_profile_id
|
SELECT sharing_profile_id
|
||||||
FROM guacamole_sharing_profile_permission
|
FROM guacamole_sharing_profile_permission
|
||||||
WHERE
|
WHERE
|
||||||
user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ'
|
AND permission = 'READ'
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -99,7 +103,11 @@
|
|||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ';
|
AND permission = 'READ';
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
@@ -113,7 +121,11 @@
|
|||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>
|
||||||
AND user_id = #{user.objectID,jdbcType=INTEGER}
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ';
|
AND permission = 'READ';
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
@@ -41,8 +41,9 @@
|
|||||||
guacamole_user_password_history.password_date
|
guacamole_user_password_history.password_date
|
||||||
FROM guacamole_user_password_history
|
FROM guacamole_user_password_history
|
||||||
JOIN guacamole_user ON guacamole_user_password_history.user_id = guacamole_user.user_id
|
JOIN guacamole_user ON guacamole_user_password_history.user_id = guacamole_user.user_id
|
||||||
|
JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
WHERE
|
WHERE
|
||||||
guacamole_user.username = #{username,jdbcType=VARCHAR}
|
guacamole_entity.name = #{username,jdbcType=VARCHAR}
|
||||||
ORDER BY
|
ORDER BY
|
||||||
guacamole_user_password_history.password_date DESC
|
guacamole_user_password_history.password_date DESC
|
||||||
LIMIT #{maxHistorySize}
|
LIMIT #{maxHistorySize}
|
||||||
|
@@ -28,7 +28,8 @@
|
|||||||
|
|
||||||
<!-- User properties -->
|
<!-- User properties -->
|
||||||
<id column="user_id" property="objectID" jdbcType="INTEGER"/>
|
<id column="user_id" property="objectID" jdbcType="INTEGER"/>
|
||||||
<result column="username" property="identifier" jdbcType="VARCHAR"/>
|
<result column="entity_id" property="entityID" jdbcType="INTEGER"/>
|
||||||
|
<result column="name" property="identifier" jdbcType="VARCHAR"/>
|
||||||
<result column="password_hash" property="passwordHash" jdbcType="BINARY"/>
|
<result column="password_hash" property="passwordHash" jdbcType="BINARY"/>
|
||||||
<result column="password_salt" property="passwordSalt" jdbcType="BINARY"/>
|
<result column="password_salt" property="passwordSalt" jdbcType="BINARY"/>
|
||||||
<result column="password_date" property="passwordDate" jdbcType="TIMESTAMP"/>
|
<result column="password_date" property="passwordDate" jdbcType="TIMESTAMP"/>
|
||||||
@@ -57,17 +58,24 @@
|
|||||||
|
|
||||||
<!-- Select all usernames -->
|
<!-- Select all usernames -->
|
||||||
<select id="selectIdentifiers" resultType="string">
|
<select id="selectIdentifiers" resultType="string">
|
||||||
SELECT username
|
SELECT name
|
||||||
FROM guacamole_user
|
FROM guacamole_entity
|
||||||
|
WHERE guacamole_entity.type = 'USER'
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Select usernames of all readable users -->
|
<!-- Select usernames of all readable users -->
|
||||||
<select id="selectReadableIdentifiers" resultType="string">
|
<select id="selectReadableIdentifiers" resultType="string">
|
||||||
SELECT username
|
SELECT guacamole_entity.name
|
||||||
FROM guacamole_user
|
FROM guacamole_user
|
||||||
|
JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
JOIN guacamole_user_permission ON affected_user_id = guacamole_user.user_id
|
JOIN guacamole_user_permission ON affected_user_id = guacamole_user.user_id
|
||||||
WHERE
|
WHERE
|
||||||
guacamole_user_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
AND guacamole_entity.type = 'USER'
|
||||||
AND permission = 'READ'
|
AND permission = 'READ'
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -77,7 +85,8 @@
|
|||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_user.user_id,
|
guacamole_user.user_id,
|
||||||
guacamole_user.username,
|
guacamole_entity.entity_id,
|
||||||
|
guacamole_entity.name,
|
||||||
password_hash,
|
password_hash,
|
||||||
password_salt,
|
password_salt,
|
||||||
password_date,
|
password_date,
|
||||||
@@ -94,13 +103,15 @@
|
|||||||
organizational_role,
|
organizational_role,
|
||||||
MAX(start_date) AS last_active
|
MAX(start_date) AS last_active
|
||||||
FROM guacamole_user
|
FROM guacamole_user
|
||||||
|
JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
LEFT JOIN guacamole_user_history ON guacamole_user_history.user_id = guacamole_user.user_id
|
LEFT JOIN guacamole_user_history ON guacamole_user_history.user_id = guacamole_user.user_id
|
||||||
WHERE guacamole_user.username IN
|
WHERE guacamole_entity.name IN
|
||||||
<foreach collection="identifiers" item="identifier"
|
<foreach collection="identifiers" item="identifier"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>
|
||||||
GROUP BY guacamole_user.user_id;
|
AND guacamole_entity.type = 'USER'
|
||||||
|
GROUP BY guacamole_user.user_id, guacamole_entity.entity_id;
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_user_attribute.user_id,
|
guacamole_user_attribute.user_id,
|
||||||
@@ -108,11 +119,13 @@
|
|||||||
guacamole_user_attribute.attribute_value
|
guacamole_user_attribute.attribute_value
|
||||||
FROM guacamole_user_attribute
|
FROM guacamole_user_attribute
|
||||||
JOIN guacamole_user ON guacamole_user.user_id = guacamole_user_attribute.user_id
|
JOIN guacamole_user ON guacamole_user.user_id = guacamole_user_attribute.user_id
|
||||||
WHERE username IN
|
JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE guacamole_entity.name IN
|
||||||
<foreach collection="identifiers" item="identifier"
|
<foreach collection="identifiers" item="identifier"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>;
|
</foreach>
|
||||||
|
AND guacamole_entity.type = 'USER';
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -122,7 +135,8 @@
|
|||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_user.user_id,
|
guacamole_user.user_id,
|
||||||
guacamole_user.username,
|
guacamole_entity.entity_id,
|
||||||
|
guacamole_entity.name,
|
||||||
password_hash,
|
password_hash,
|
||||||
password_salt,
|
password_salt,
|
||||||
password_date,
|
password_date,
|
||||||
@@ -139,16 +153,22 @@
|
|||||||
organizational_role,
|
organizational_role,
|
||||||
MAX(start_date) AS last_active
|
MAX(start_date) AS last_active
|
||||||
FROM guacamole_user
|
FROM guacamole_user
|
||||||
|
JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
JOIN guacamole_user_permission ON affected_user_id = guacamole_user.user_id
|
JOIN guacamole_user_permission ON affected_user_id = guacamole_user.user_id
|
||||||
LEFT JOIN guacamole_user_history ON guacamole_user_history.user_id = guacamole_user.user_id
|
LEFT JOIN guacamole_user_history ON guacamole_user_history.user_id = guacamole_user.user_id
|
||||||
WHERE guacamole_user.username IN
|
WHERE guacamole_entity.name IN
|
||||||
<foreach collection="identifiers" item="identifier"
|
<foreach collection="identifiers" item="identifier"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>
|
||||||
AND guacamole_user_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
AND guacamole_entity.type = 'USER'
|
||||||
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ'
|
AND permission = 'READ'
|
||||||
GROUP BY guacamole_user.user_id;
|
GROUP BY guacamole_user.user_id, guacamole_entity.entity_id;
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_user_attribute.user_id,
|
guacamole_user_attribute.user_id,
|
||||||
@@ -156,13 +176,19 @@
|
|||||||
guacamole_user_attribute.attribute_value
|
guacamole_user_attribute.attribute_value
|
||||||
FROM guacamole_user_attribute
|
FROM guacamole_user_attribute
|
||||||
JOIN guacamole_user ON guacamole_user.user_id = guacamole_user_attribute.user_id
|
JOIN guacamole_user ON guacamole_user.user_id = guacamole_user_attribute.user_id
|
||||||
|
JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
JOIN guacamole_user_permission ON affected_user_id = guacamole_user.user_id
|
JOIN guacamole_user_permission ON affected_user_id = guacamole_user.user_id
|
||||||
WHERE username IN
|
WHERE guacamole_entity.name IN
|
||||||
<foreach collection="identifiers" item="identifier"
|
<foreach collection="identifiers" item="identifier"
|
||||||
open="(" separator="," close=")">
|
open="(" separator="," close=")">
|
||||||
#{identifier,jdbcType=VARCHAR}
|
#{identifier,jdbcType=VARCHAR}
|
||||||
</foreach>
|
</foreach>
|
||||||
AND guacamole_user_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
AND guacamole_entity.type = 'USER'
|
||||||
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND permission = 'READ';
|
AND permission = 'READ';
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
@@ -173,7 +199,8 @@
|
|||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_user.user_id,
|
guacamole_user.user_id,
|
||||||
guacamole_user.username,
|
guacamole_entity.entity_id,
|
||||||
|
guacamole_entity.name,
|
||||||
password_hash,
|
password_hash,
|
||||||
password_salt,
|
password_salt,
|
||||||
password_date,
|
password_date,
|
||||||
@@ -190,10 +217,12 @@
|
|||||||
organizational_role,
|
organizational_role,
|
||||||
MAX(start_date) AS last_active
|
MAX(start_date) AS last_active
|
||||||
FROM guacamole_user
|
FROM guacamole_user
|
||||||
|
JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
LEFT JOIN guacamole_user_history ON guacamole_user_history.user_id = guacamole_user.user_id
|
LEFT JOIN guacamole_user_history ON guacamole_user_history.user_id = guacamole_user.user_id
|
||||||
WHERE
|
WHERE
|
||||||
guacamole_user.username = #{username,jdbcType=VARCHAR}
|
guacamole_entity.name = #{username,jdbcType=VARCHAR}
|
||||||
GROUP BY guacamole_user.user_id;
|
AND guacamole_entity.type = 'USER'
|
||||||
|
GROUP BY guacamole_user.user_id, guacamole_entity.entity_id;
|
||||||
|
|
||||||
SELECT
|
SELECT
|
||||||
guacamole_user_attribute.user_id,
|
guacamole_user_attribute.user_id,
|
||||||
@@ -201,14 +230,19 @@
|
|||||||
guacamole_user_attribute.attribute_value
|
guacamole_user_attribute.attribute_value
|
||||||
FROM guacamole_user_attribute
|
FROM guacamole_user_attribute
|
||||||
JOIN guacamole_user ON guacamole_user.user_id = guacamole_user_attribute.user_id
|
JOIN guacamole_user ON guacamole_user.user_id = guacamole_user_attribute.user_id
|
||||||
WHERE username = #{username,jdbcType=VARCHAR};
|
JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
guacamole_entity.name = #{username,jdbcType=VARCHAR}
|
||||||
|
AND guacamole_entity.type = 'USER'
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- Delete single user by username -->
|
<!-- Delete single user by username -->
|
||||||
<delete id="delete">
|
<delete id="delete">
|
||||||
DELETE FROM guacamole_user
|
DELETE FROM guacamole_entity
|
||||||
WHERE username = #{identifier,jdbcType=VARCHAR}
|
WHERE
|
||||||
|
name = #{identifier,jdbcType=VARCHAR}
|
||||||
|
AND type = 'USER'
|
||||||
</delete>
|
</delete>
|
||||||
|
|
||||||
<!-- Insert single user -->
|
<!-- Insert single user -->
|
||||||
@@ -216,7 +250,7 @@
|
|||||||
parameterType="org.apache.guacamole.auth.jdbc.user.UserModel">
|
parameterType="org.apache.guacamole.auth.jdbc.user.UserModel">
|
||||||
|
|
||||||
INSERT INTO guacamole_user (
|
INSERT INTO guacamole_user (
|
||||||
username,
|
entity_id,
|
||||||
password_hash,
|
password_hash,
|
||||||
password_salt,
|
password_salt,
|
||||||
password_date,
|
password_date,
|
||||||
@@ -233,7 +267,7 @@
|
|||||||
organizational_role
|
organizational_role
|
||||||
)
|
)
|
||||||
VALUES (
|
VALUES (
|
||||||
#{object.identifier,jdbcType=VARCHAR},
|
#{object.entityID,jdbcType=VARCHAR},
|
||||||
#{object.passwordHash,jdbcType=BINARY},
|
#{object.passwordHash,jdbcType=BINARY},
|
||||||
#{object.passwordSalt,jdbcType=BINARY},
|
#{object.passwordSalt,jdbcType=BINARY},
|
||||||
#{object.passwordDate,jdbcType=TIMESTAMP},
|
#{object.passwordDate,jdbcType=TIMESTAMP},
|
||||||
|
@@ -0,0 +1,96 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<mapper namespace="org.apache.guacamole.auth.jdbc.user.UserParentUserGroupMapper" >
|
||||||
|
|
||||||
|
<!-- Select the names of all parent user groups -->
|
||||||
|
<select id="selectChildIdentifiers" resultType="string">
|
||||||
|
SELECT name
|
||||||
|
FROM guacamole_user_group_member
|
||||||
|
JOIN guacamole_user_group ON guacamole_user_group_member.user_group_id = guacamole_user_group.user_group_id
|
||||||
|
JOIN guacamole_entity ON guacamole_entity.entity_id = guacamole_user_group.entity_id
|
||||||
|
WHERE
|
||||||
|
guacamole_user_group_member.member_entity_id = #{parent.entityID,jdbcType=INTEGER}
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Select the names of all readable parent user groups -->
|
||||||
|
<select id="selectReadableChildIdentifiers" resultType="string">
|
||||||
|
SELECT guacamole_entity.name
|
||||||
|
FROM guacamole_user_group_member
|
||||||
|
JOIN guacamole_user_group ON guacamole_user_group_member.user_group_id = guacamole_user_group.user_group_id
|
||||||
|
JOIN guacamole_entity ON guacamole_entity.entity_id = guacamole_user_group.entity_id
|
||||||
|
JOIN guacamole_user_group_permission ON affected_user_group_id = guacamole_user_group.user_group_id
|
||||||
|
WHERE
|
||||||
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_group_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
AND guacamole_user_group_member.member_entity_id = #{parent.entityID,jdbcType=INTEGER}
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
AND permission = 'READ'
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Delete parent groups by name -->
|
||||||
|
<delete id="delete">
|
||||||
|
DELETE FROM guacamole_user_group_member
|
||||||
|
USING guacamole_user_group_member
|
||||||
|
JOIN guacamole_user_group ON guacamole_user_group.user_group_id = guacamole_user_group_member.user_group_id
|
||||||
|
JOIN guacamole_entity ON guacamole_entity.entity_id = guacamole_user_group.entity_id
|
||||||
|
WHERE
|
||||||
|
member_entity_id = #{parent.entityID,jdbcType=INTEGER}
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
AND guacamole_entity.name IN
|
||||||
|
<foreach collection="children" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<!-- Insert parent groups by name -->
|
||||||
|
<insert id="insert">
|
||||||
|
INSERT INTO guacamole_user_group_member (
|
||||||
|
user_group_id,
|
||||||
|
member_entity_id
|
||||||
|
)
|
||||||
|
SELECT DISTINCT
|
||||||
|
guacamole_user_group.user_group_id,
|
||||||
|
#{parent.entityID,jdbcType=INTEGER}
|
||||||
|
FROM guacamole_user_group
|
||||||
|
JOIN guacamole_entity ON guacamole_user_group.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
guacamole_entity.name IN
|
||||||
|
<foreach collection="children" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
AND guacamole_user_group.user_group_id NOT IN (
|
||||||
|
SELECT guacamole_user_group_member.user_group_id
|
||||||
|
FROM guacamole_user_group_member
|
||||||
|
WHERE guacamole_user_group_member.member_entity_id = #{parent.entityID,jdbcType=INTEGER}
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
</mapper>
|
@@ -44,8 +44,9 @@
|
|||||||
guacamole_user_history.end_date
|
guacamole_user_history.end_date
|
||||||
FROM guacamole_user_history
|
FROM guacamole_user_history
|
||||||
JOIN guacamole_user ON guacamole_user_history.user_id = guacamole_user.user_id
|
JOIN guacamole_user ON guacamole_user_history.user_id = guacamole_user.user_id
|
||||||
|
JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
WHERE
|
WHERE
|
||||||
guacamole_user.username = #{username,jdbcType=VARCHAR}
|
guacamole_entity.name = #{username,jdbcType=VARCHAR}
|
||||||
ORDER BY
|
ORDER BY
|
||||||
guacamole_user_history.start_date DESC,
|
guacamole_user_history.start_date DESC,
|
||||||
guacamole_user_history.end_date DESC
|
guacamole_user_history.end_date DESC
|
||||||
@@ -66,7 +67,10 @@
|
|||||||
VALUES (
|
VALUES (
|
||||||
#{record.remoteHost,jdbcType=VARCHAR},
|
#{record.remoteHost,jdbcType=VARCHAR},
|
||||||
(SELECT user_id FROM guacamole_user
|
(SELECT user_id FROM guacamole_user
|
||||||
WHERE username = #{record.username,jdbcType=VARCHAR}),
|
JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
guacamole_entity.name = #{record.username,jdbcType=VARCHAR}
|
||||||
|
AND guacamole_entity.type = 'USER'),
|
||||||
#{record.username,jdbcType=VARCHAR},
|
#{record.username,jdbcType=VARCHAR},
|
||||||
#{record.startDate,jdbcType=TIMESTAMP},
|
#{record.startDate,jdbcType=TIMESTAMP},
|
||||||
#{record.endDate,jdbcType=TIMESTAMP}
|
#{record.endDate,jdbcType=TIMESTAMP}
|
||||||
@@ -79,7 +83,10 @@
|
|||||||
UPDATE guacamole_user_history
|
UPDATE guacamole_user_history
|
||||||
SET remote_host = #{record.remoteHost,jdbcType=VARCHAR},
|
SET remote_host = #{record.remoteHost,jdbcType=VARCHAR},
|
||||||
user_id = (SELECT user_id FROM guacamole_user
|
user_id = (SELECT user_id FROM guacamole_user
|
||||||
WHERE username = #{record.username,jdbcType=VARCHAR}),
|
JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
guacamole_entity.name = #{record.username,jdbcType=VARCHAR}
|
||||||
|
AND guacamole_entity.type = 'USER'),
|
||||||
username = #{record.username,jdbcType=VARCHAR},
|
username = #{record.username,jdbcType=VARCHAR},
|
||||||
start_date = #{record.startDate,jdbcType=TIMESTAMP},
|
start_date = #{record.startDate,jdbcType=TIMESTAMP},
|
||||||
end_date = #{record.endDate,jdbcType=TIMESTAMP}
|
end_date = #{record.endDate,jdbcType=TIMESTAMP}
|
||||||
@@ -105,7 +112,10 @@
|
|||||||
guacamole_user_history.user_id IN (
|
guacamole_user_history.user_id IN (
|
||||||
SELECT user_id
|
SELECT user_id
|
||||||
FROM guacamole_user
|
FROM guacamole_user
|
||||||
WHERE POSITION(#{term.term,jdbcType=VARCHAR} IN username) > 0
|
JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
POSITION(#{term.term,jdbcType=VARCHAR} IN guacamole_entity.name) > 0
|
||||||
|
AND guacamole_entity.type = 'USER'),
|
||||||
)
|
)
|
||||||
|
|
||||||
<if test="term.startDate != null and term.endDate != null">
|
<if test="term.startDate != null and term.endDate != null">
|
||||||
@@ -146,7 +156,11 @@
|
|||||||
<!-- Restrict to readable users -->
|
<!-- Restrict to readable users -->
|
||||||
JOIN guacamole_user_permission ON
|
JOIN guacamole_user_permission ON
|
||||||
guacamole_user_history.user_id = guacamole_user_permission.affected_user_id
|
guacamole_user_history.user_id = guacamole_user_permission.affected_user_id
|
||||||
AND guacamole_user_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
AND guacamole_user_permission.permission = 'READ'
|
AND guacamole_user_permission.permission = 'READ'
|
||||||
|
|
||||||
<!-- Search terms -->
|
<!-- Search terms -->
|
||||||
@@ -157,7 +171,10 @@
|
|||||||
guacamole_user_history.user_id IN (
|
guacamole_user_history.user_id IN (
|
||||||
SELECT user_id
|
SELECT user_id
|
||||||
FROM guacamole_user
|
FROM guacamole_user
|
||||||
WHERE POSITION(#{term.term,jdbcType=VARCHAR} IN username) > 0
|
JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
POSITION(#{term.term,jdbcType=VARCHAR} IN guacamole_entity.name) > 0
|
||||||
|
AND guacamole_entity.type = 'USER'
|
||||||
)
|
)
|
||||||
|
|
||||||
<if test="term.startDate != null and term.endDate != null">
|
<if test="term.startDate != null and term.endDate != null">
|
||||||
|
@@ -0,0 +1,229 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<mapper namespace="org.apache.guacamole.auth.jdbc.usergroup.UserGroupMapper" >
|
||||||
|
|
||||||
|
<!-- Result mapper for user group objects -->
|
||||||
|
<resultMap id="UserGroupResultMap" type="org.apache.guacamole.auth.jdbc.usergroup.UserGroupModel" >
|
||||||
|
|
||||||
|
<!-- User group properties -->
|
||||||
|
<id column="user_group_id" property="objectID" jdbcType="INTEGER"/>
|
||||||
|
<result column="entity_id" property="entityID" jdbcType="INTEGER"/>
|
||||||
|
<result column="name" property="identifier" jdbcType="VARCHAR"/>
|
||||||
|
<result column="disabled" property="disabled" jdbcType="BOOLEAN"/>
|
||||||
|
|
||||||
|
<!-- Arbitrary attributes -->
|
||||||
|
<collection property="arbitraryAttributes" resultSet="arbitraryAttributes"
|
||||||
|
ofType="org.apache.guacamole.auth.jdbc.base.ArbitraryAttributeModel"
|
||||||
|
column="user_group_id" foreignColumn="user_group_id">
|
||||||
|
<result property="name" column="attribute_name" jdbcType="VARCHAR"/>
|
||||||
|
<result property="value" column="attribute_value" jdbcType="VARCHAR"/>
|
||||||
|
</collection>
|
||||||
|
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<!-- Select all group names -->
|
||||||
|
<select id="selectIdentifiers" resultType="string">
|
||||||
|
SELECT name
|
||||||
|
FROM guacamole_entity
|
||||||
|
WHERE guacamole_entity.type = 'USER_GROUP'
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Select names of all readable groups -->
|
||||||
|
<select id="selectReadableIdentifiers" resultType="string">
|
||||||
|
SELECT guacamole_entity.name
|
||||||
|
FROM guacamole_user_group
|
||||||
|
JOIN guacamole_entity ON guacamole_user_group.entity_id = guacamole_entity.entity_id
|
||||||
|
JOIN guacamole_user_group_permission ON affected_user_group_id = guacamole_user_group.user_group_id
|
||||||
|
WHERE
|
||||||
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_group_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
AND permission = 'READ'
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Select multiple groups by name -->
|
||||||
|
<select id="select" resultMap="UserGroupResultMap"
|
||||||
|
resultSets="users,arbitraryAttributes">
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
guacamole_user_group.user_group_id,
|
||||||
|
guacamole_entity.entity_id,
|
||||||
|
guacamole_entity.name,
|
||||||
|
disabled
|
||||||
|
FROM guacamole_user_group
|
||||||
|
JOIN guacamole_entity ON guacamole_user_group.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE guacamole_entity.name IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP';
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
guacamole_user_group_attribute.user_group_id,
|
||||||
|
guacamole_user_group_attribute.attribute_name,
|
||||||
|
guacamole_user_group_attribute.attribute_value
|
||||||
|
FROM guacamole_user_group_attribute
|
||||||
|
JOIN guacamole_user_group ON guacamole_user_group.user_group_id = guacamole_user_group_attribute.user_group_id
|
||||||
|
JOIN guacamole_entity ON guacamole_user_group.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE guacamole_entity.name IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP';
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Select multiple groups by name only if readable -->
|
||||||
|
<select id="selectReadable" resultMap="UserGroupResultMap"
|
||||||
|
resultSets="users,arbitraryAttributes">
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
guacamole_user_group.user_group_id,
|
||||||
|
guacamole_entity.entity_id,
|
||||||
|
guacamole_entity.name,
|
||||||
|
disabled
|
||||||
|
FROM guacamole_user_group
|
||||||
|
JOIN guacamole_entity ON guacamole_user_group.entity_id = guacamole_entity.entity_id
|
||||||
|
JOIN guacamole_user_group_permission ON affected_user_group_id = guacamole_user_group.user_group_id
|
||||||
|
WHERE guacamole_entity.name IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_group_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
AND permission = 'READ';
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
guacamole_user_group_attribute.user_group_id,
|
||||||
|
guacamole_user_group_attribute.attribute_name,
|
||||||
|
guacamole_user_group_attribute.attribute_value
|
||||||
|
FROM guacamole_user_group_attribute
|
||||||
|
JOIN guacamole_user_group ON guacamole_user_group.user_group_id = guacamole_user_group_attribute.user_group_id
|
||||||
|
JOIN guacamole_entity ON guacamole_user_group.entity_id = guacamole_entity.entity_id
|
||||||
|
JOIN guacamole_user_group_permission ON affected_user_group_id = guacamole_user_group.user_group_id
|
||||||
|
WHERE guacamole_entity.name IN
|
||||||
|
<foreach collection="identifiers" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
AND <include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_group_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
AND permission = 'READ';
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Select single group by name -->
|
||||||
|
<select id="selectOne" resultMap="UserGroupResultMap"
|
||||||
|
resultSets="users,arbitraryAttributes">
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
guacamole_user_group.user_group_id,
|
||||||
|
guacamole_entity.entity_id,
|
||||||
|
guacamole_entity.name,
|
||||||
|
disabled
|
||||||
|
FROM guacamole_user_group
|
||||||
|
JOIN guacamole_entity ON guacamole_user_group.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
guacamole_entity.name = #{name,jdbcType=VARCHAR}
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP';
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
guacamole_user_group_attribute.user_group_id,
|
||||||
|
guacamole_user_group_attribute.attribute_name,
|
||||||
|
guacamole_user_group_attribute.attribute_value
|
||||||
|
FROM guacamole_user_group_attribute
|
||||||
|
JOIN guacamole_user_group ON guacamole_user_group.user_group_id = guacamole_user_group_attribute.user_group_id
|
||||||
|
JOIN guacamole_entity ON guacamole_user_group.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
guacamole_entity.name = #{name,jdbcType=VARCHAR}
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Delete single group by name -->
|
||||||
|
<delete id="delete">
|
||||||
|
DELETE FROM guacamole_entity
|
||||||
|
WHERE
|
||||||
|
name = #{identifier,jdbcType=VARCHAR}
|
||||||
|
AND type = 'USER_GROUP'
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<!-- Insert single group -->
|
||||||
|
<insert id="insert" useGeneratedKeys="true" keyProperty="object.objectID"
|
||||||
|
parameterType="org.apache.guacamole.auth.jdbc.usergroup.UserGroupModel">
|
||||||
|
|
||||||
|
INSERT INTO guacamole_user_group (
|
||||||
|
entity_id,
|
||||||
|
disabled
|
||||||
|
)
|
||||||
|
VALUES (
|
||||||
|
#{object.entityID,jdbcType=VARCHAR},
|
||||||
|
#{object.disabled,jdbcType=BOOLEAN}
|
||||||
|
)
|
||||||
|
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<!-- Update single group -->
|
||||||
|
<update id="update" parameterType="org.apache.guacamole.auth.jdbc.usergroup.UserGroupModel">
|
||||||
|
UPDATE guacamole_user_group
|
||||||
|
SET disabled = #{object.disabled,jdbcType=BOOLEAN}
|
||||||
|
WHERE user_group_id = #{object.objectID,jdbcType=VARCHAR}
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<!-- Delete attributes associated with group -->
|
||||||
|
<delete id="deleteAttributes">
|
||||||
|
DELETE FROM guacamole_user_group_attribute
|
||||||
|
WHERE user_group_id = #{object.objectID,jdbcType=INTEGER}
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<!-- Insert attributes for group -->
|
||||||
|
<insert id="insertAttributes" parameterType="org.apache.guacamole.auth.jdbc.base.ArbitraryAttributeModel">
|
||||||
|
INSERT INTO guacamole_user_group_attribute (
|
||||||
|
user_group_id,
|
||||||
|
attribute_name,
|
||||||
|
attribute_value
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
<foreach collection="object.arbitraryAttributes" item="attribute" separator=",">
|
||||||
|
(#{object.objectID,jdbcType=INTEGER},
|
||||||
|
#{attribute.name,jdbcType=VARCHAR},
|
||||||
|
#{attribute.value,jdbcType=VARCHAR})
|
||||||
|
</foreach>
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
</mapper>
|
@@ -0,0 +1,93 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<mapper namespace="org.apache.guacamole.auth.jdbc.usergroup.UserGroupMemberUserGroupMapper" >
|
||||||
|
|
||||||
|
<!-- Select the names of all member user groups -->
|
||||||
|
<select id="selectChildIdentifiers" resultType="string">
|
||||||
|
SELECT name
|
||||||
|
FROM guacamole_user_group_member
|
||||||
|
JOIN guacamole_entity ON guacamole_entity.entity_id = guacamole_user_group_member.member_entity_id
|
||||||
|
WHERE
|
||||||
|
guacamole_user_group_member.user_group_id = #{parent.objectID,jdbcType=INTEGER}
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Select the names of all readable member user groups -->
|
||||||
|
<select id="selectReadableChildIdentifiers" resultType="string">
|
||||||
|
SELECT guacamole_entity.name
|
||||||
|
FROM guacamole_user_group_member
|
||||||
|
JOIN guacamole_entity ON guacamole_entity.entity_id = guacamole_user_group_member.member_entity_id
|
||||||
|
JOIN guacamole_user_group ON guacamole_user_group.entity_id = guacamole_entity.entity_id
|
||||||
|
JOIN guacamole_user_group_permission ON affected_user_group_id = guacamole_user_group.user_group_id
|
||||||
|
WHERE
|
||||||
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_group_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
AND guacamole_user_group_member.user_group_id = #{parent.objectID,jdbcType=INTEGER}
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
AND permission = 'READ'
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Delete member groups by name -->
|
||||||
|
<delete id="delete">
|
||||||
|
DELETE FROM guacamole_user_group_member
|
||||||
|
USING guacamole_user_group_member
|
||||||
|
JOIN guacamole_entity ON guacamole_entity.entity_id = member_entity_id
|
||||||
|
WHERE
|
||||||
|
user_group_id = #{parent.objectID,jdbcType=INTEGER}
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
AND guacamole_entity.name IN
|
||||||
|
<foreach collection="children" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<!-- Insert member groups by name -->
|
||||||
|
<insert id="insert">
|
||||||
|
INSERT INTO guacamole_user_group_member (
|
||||||
|
user_group_id,
|
||||||
|
member_entity_id
|
||||||
|
)
|
||||||
|
SELECT DISTINCT
|
||||||
|
#{parent.objectID,jdbcType=INTEGER},
|
||||||
|
guacamole_entity.entity_id
|
||||||
|
FROM guacamole_entity
|
||||||
|
WHERE
|
||||||
|
guacamole_entity.name IN
|
||||||
|
<foreach collection="children" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier}
|
||||||
|
</foreach>
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
AND guacamole_entity.entity_id NOT IN (
|
||||||
|
SELECT guacamole_user_group_member.member_entity_id
|
||||||
|
FROM guacamole_user_group_member
|
||||||
|
WHERE guacamole_user_group_member.user_group_id = #{parent.objectID,jdbcType=INTEGER}
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
</mapper>
|
@@ -0,0 +1,93 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<mapper namespace="org.apache.guacamole.auth.jdbc.usergroup.UserGroupMemberUserMapper" >
|
||||||
|
|
||||||
|
<!-- Select the username of all member users -->
|
||||||
|
<select id="selectChildIdentifiers" resultType="string">
|
||||||
|
SELECT name
|
||||||
|
FROM guacamole_user_group_member
|
||||||
|
JOIN guacamole_entity ON guacamole_entity.entity_id = guacamole_user_group_member.member_entity_id
|
||||||
|
WHERE
|
||||||
|
guacamole_user_group_member.user_group_id = #{parent.objectID,jdbcType=INTEGER}
|
||||||
|
AND guacamole_entity.type = 'USER'
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Select the usernames of all readable member users -->
|
||||||
|
<select id="selectReadableChildIdentifiers" resultType="string">
|
||||||
|
SELECT guacamole_entity.name
|
||||||
|
FROM guacamole_user_group_member
|
||||||
|
JOIN guacamole_entity ON guacamole_entity.entity_id = guacamole_user_group_member.member_entity_id
|
||||||
|
JOIN guacamole_user ON guacamole_user.entity_id = guacamole_entity.entity_id
|
||||||
|
JOIN guacamole_user_permission ON affected_user_id = guacamole_user.user_id
|
||||||
|
WHERE
|
||||||
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
AND guacamole_user_group_member.user_group_id = #{parent.objectID,jdbcType=INTEGER}
|
||||||
|
AND guacamole_entity.type = 'USER'
|
||||||
|
AND permission = 'READ'
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Delete member users by name -->
|
||||||
|
<delete id="delete">
|
||||||
|
DELETE FROM guacamole_user_group_member
|
||||||
|
USING guacamole_user_group_member
|
||||||
|
JOIN guacamole_entity ON guacamole_entity.entity_id = member_entity_id
|
||||||
|
WHERE
|
||||||
|
user_group_id = #{parent.objectID,jdbcType=INTEGER}
|
||||||
|
AND guacamole_entity.type = 'USER'
|
||||||
|
AND guacamole_entity.name IN
|
||||||
|
<foreach collection="children" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<!-- Insert member users by name -->
|
||||||
|
<insert id="insert">
|
||||||
|
INSERT INTO guacamole_user_group_member (
|
||||||
|
user_group_id,
|
||||||
|
member_entity_id
|
||||||
|
)
|
||||||
|
SELECT DISTINCT
|
||||||
|
#{parent.objectID,jdbcType=INTEGER},
|
||||||
|
guacamole_entity.entity_id
|
||||||
|
FROM guacamole_entity
|
||||||
|
WHERE
|
||||||
|
guacamole_entity.name IN
|
||||||
|
<foreach collection="children" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier}
|
||||||
|
</foreach>
|
||||||
|
AND guacamole_entity.type = 'USER'
|
||||||
|
AND guacamole_entity.entity_id NOT IN (
|
||||||
|
SELECT guacamole_user_group_member.member_entity_id
|
||||||
|
FROM guacamole_user_group_member
|
||||||
|
WHERE guacamole_user_group_member.user_group_id = #{parent.objectID,jdbcType=INTEGER}
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
</mapper>
|
@@ -0,0 +1,96 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
or more contributor license agreements. See the NOTICE file
|
||||||
|
distributed with this work for additional information
|
||||||
|
regarding copyright ownership. The ASF licenses this file
|
||||||
|
to you under the Apache License, Version 2.0 (the
|
||||||
|
"License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing,
|
||||||
|
software distributed under the License is distributed on an
|
||||||
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
KIND, either express or implied. See the License for the
|
||||||
|
specific language governing permissions and limitations
|
||||||
|
under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<mapper namespace="org.apache.guacamole.auth.jdbc.usergroup.UserGroupParentUserGroupMapper" >
|
||||||
|
|
||||||
|
<!-- Select the names of all parent user groups -->
|
||||||
|
<select id="selectChildIdentifiers" resultType="string">
|
||||||
|
SELECT name
|
||||||
|
FROM guacamole_user_group_member
|
||||||
|
JOIN guacamole_user_group ON guacamole_user_group_member.user_group_id = guacamole_user_group.user_group_id
|
||||||
|
JOIN guacamole_entity ON guacamole_entity.entity_id = guacamole_user_group.entity_id
|
||||||
|
WHERE
|
||||||
|
guacamole_user_group_member.member_entity_id = #{parent.entityID,jdbcType=INTEGER}
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Select the names of all readable parent user groups -->
|
||||||
|
<select id="selectReadableChildIdentifiers" resultType="string">
|
||||||
|
SELECT guacamole_entity.name
|
||||||
|
FROM guacamole_user_group_member
|
||||||
|
JOIN guacamole_user_group ON guacamole_user_group_member.user_group_id = guacamole_user_group.user_group_id
|
||||||
|
JOIN guacamole_entity ON guacamole_entity.entity_id = guacamole_user_group.entity_id
|
||||||
|
JOIN guacamole_user_group_permission ON affected_user_group_id = guacamole_user_group.user_group_id
|
||||||
|
WHERE
|
||||||
|
<include refid="org.apache.guacamole.auth.jdbc.base.EntityMapper.isRelatedEntity">
|
||||||
|
<property name="column" value="guacamole_user_group_permission.entity_id"/>
|
||||||
|
<property name="entityID" value="#{user.entityID,jdbcType=INTEGER}"/>
|
||||||
|
<property name="groups" value="effectiveGroups"/>
|
||||||
|
</include>
|
||||||
|
AND guacamole_user_group_member.member_entity_id = #{parent.entityID,jdbcType=INTEGER}
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
AND permission = 'READ'
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Delete parent groups by name -->
|
||||||
|
<delete id="delete">
|
||||||
|
DELETE FROM guacamole_user_group_member
|
||||||
|
USING guacamole_user_group_member
|
||||||
|
JOIN guacamole_user_group ON guacamole_user_group.user_group_id = guacamole_user_group_member.user_group_id
|
||||||
|
JOIN guacamole_entity ON guacamole_entity.entity_id = guacamole_user_group.entity_id
|
||||||
|
WHERE
|
||||||
|
member_entity_id = #{parent.entityID,jdbcType=INTEGER}
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
AND guacamole_entity.name IN
|
||||||
|
<foreach collection="children" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<!-- Insert parent groups by name -->
|
||||||
|
<insert id="insert">
|
||||||
|
INSERT INTO guacamole_user_group_member (
|
||||||
|
user_group_id,
|
||||||
|
member_entity_id
|
||||||
|
)
|
||||||
|
SELECT DISTINCT
|
||||||
|
guacamole_user_group.user_group_id,
|
||||||
|
#{parent.entityID,jdbcType=INTEGER}
|
||||||
|
FROM guacamole_user_group
|
||||||
|
JOIN guacamole_entity ON guacamole_user_group.entity_id = guacamole_entity.entity_id
|
||||||
|
WHERE
|
||||||
|
guacamole_entity.name IN
|
||||||
|
<foreach collection="children" item="identifier"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
#{identifier,jdbcType=VARCHAR}
|
||||||
|
</foreach>
|
||||||
|
AND guacamole_entity.type = 'USER_GROUP'
|
||||||
|
AND guacamole_user_group.user_group_id NOT IN (
|
||||||
|
SELECT guacamole_user_group_member.user_group_id
|
||||||
|
FROM guacamole_user_group_member
|
||||||
|
WHERE guacamole_user_group_member.member_entity_id = #{parent.entityID,jdbcType=INTEGER}
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
</mapper>
|
Reference in New Issue
Block a user