Github user necouchman commented on a diff in the pull request:

    https://github.com/apache/guacamole-client/pull/319#discussion_r220396450
  
    --- Diff: 
extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/schema/upgrade/upgrade-pre-1.0.0.sql
 ---
    @@ -17,6 +17,319 @@
     -- under the License.
     --
     
    +--
    +-- Add new system-level permission
    +--
    +
    +ALTER TABLE `guacamole_system_permission`
    +    MODIFY `permission` enum('CREATE_CONNECTION',
    +                             'CREATE_CONNECTION_GROUP',
    +                             'CREATE_SHARING_PROFILE',
    +                             'CREATE_USER',
    +                             'CREATE_USER_GROUP',
    +                             'ADMINISTER') NOT NULL;
    +
    +--
    +-- Table of base entities which may each be either a user or user group. 
Other
    +-- tables which represent qualities shared by both users and groups will 
point
    +-- to guacamole_entity, while tables which represent qualities specific to
    +-- users or groups will point to guacamole_user or guacamole_user_group.
    +--
    +
    +CREATE TABLE `guacamole_entity` (
    +
    +  `entity_id`     int(11)            NOT NULL AUTO_INCREMENT,
    +  `name`          varchar(128)       NOT NULL,
    +  `type`          enum('USER',
    +                       'USER_GROUP') NOT NULL,
    +
    +  PRIMARY KEY (`entity_id`),
    +  UNIQUE KEY `guacamole_entity_name_scope` (`type`, `name`)
    +
    +) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    +
    +--
    +-- Table of user groups. Each user group may have an arbitrary set of 
member
    +-- users and member groups, with those members inheriting the permissions
    +-- granted to that group.
    +--
    +
    +CREATE TABLE `guacamole_user_group` (
    +
    +  `user_group_id` int(11)      NOT NULL AUTO_INCREMENT,
    +  `entity_id`     int(11)      NOT NULL,
    +
    +  -- Group disabled status
    +  `disabled`      boolean      NOT NULL DEFAULT 0,
    +
    +  PRIMARY KEY (`user_group_id`),
    +
    +  UNIQUE KEY `guacamole_user_group_single_entity` (`entity_id`),
    +
    +  CONSTRAINT `guacamole_user_group_entity`
    +    FOREIGN KEY (`entity_id`)
    +    REFERENCES `guacamole_entity` (`entity_id`)
    +    ON DELETE CASCADE
    +
    +) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    +
    +--
    +-- Table of users which are members of given user groups.
    +--
    +
    +CREATE TABLE `guacamole_user_group_member` (
    +
    +  `user_group_id`    int(11)     NOT NULL,
    +  `member_entity_id` int(11)     NOT NULL,
    +
    +  PRIMARY KEY (`user_group_id`, `member_entity_id`),
    +
    +  -- Parent must be a user group
    +  CONSTRAINT `guacamole_user_group_member_parent_id`
    +    FOREIGN KEY (`user_group_id`)
    +    REFERENCES `guacamole_user_group` (`user_group_id`) ON DELETE CASCADE,
    +
    +  -- Member may be either a user or a user group (any entity)
    +  CONSTRAINT `guacamole_user_group_member_entity_id`
    +    FOREIGN KEY (`member_entity_id`)
    +    REFERENCES `guacamole_entity` (`entity_id`) ON DELETE CASCADE
    +
    +) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    +
    +--
    +-- Table of user group permissions. Each user group permission grants a 
user
    +-- or user group access to a another user group (the "affected" user 
group) for
    +-- a specific type of operation.
    +--
    +
    +CREATE TABLE `guacamole_user_group_permission` (
    +
    +  `entity_id`              int(11) NOT NULL,
    +  `affected_user_group_id` int(11) NOT NULL,
    +  `permission`             enum('READ',
    +                                'UPDATE',
    +                                'DELETE',
    +                                'ADMINISTER') NOT NULL,
    +
    +  PRIMARY KEY (`entity_id`, `affected_user_group_id`, `permission`),
    +
    +  CONSTRAINT `guacamole_user_group_permission_affected_user_group`
    +    FOREIGN KEY (`affected_user_group_id`)
    +    REFERENCES `guacamole_user_group` (`user_group_id`) ON DELETE CASCADE,
    +
    +  CONSTRAINT `guacamole_user_group_permission_entity`
    +    FOREIGN KEY (`entity_id`)
    +    REFERENCES `guacamole_entity` (`entity_id`) ON DELETE CASCADE
    +
    +) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    +
    +--
    +-- Modify guacamole_user table to use guacamole_entity as a base
    +--
    +
    +-- Add new entity_id column
    +ALTER TABLE guacamole_user ADD COLUMN entity_id int(11);
    +
    +-- Create user entities for each guacamole_user entry
    +INSERT INTO guacamole_entity (name, type)
    +SELECT username, 'USER' FROM guacamole_user;
    +
    +-- Update guacamole_user to point to corresponding guacamole_entity
    +UPDATE guacamole_user SET entity_id = (
    +    SELECT entity_id FROM guacamole_entity
    +    WHERE
    +            username = guacamole_entity.name
    +        AND type = 'USER'
    +);
    +
    +-- The entity_id column should now be safely non-NULL
    +ALTER TABLE guacamole_user MODIFY entity_id int(11) NOT NULL;
    +
    +-- The entity_id column should now safely point to guacamole_entity entries
    --- End diff --
    
    Maybe this should say "The entity_id column should now safely be unique" ?  
Looks like this comment duplicates the one for the block just below.


---

Reply via email to