From b1ae37adb3360d6371a804d86a7dd167613f55a7 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Fri, 13 Feb 2015 00:31:52 -0800 Subject: [PATCH] GUAC-1101: Add permission model classes and mapper interfaces (no corresponding XML, though). --- .../mysql/dao/ObjectPermissionMapper.java | 33 ++++++ .../net/auth/mysql/dao/PermissionMapper.java | 73 ++++++++++++ .../mysql/dao/SystemPermissionMapper.java | 33 ++++++ .../mysql/model/ObjectPermissionModel.java | 91 +++++++++++++++ .../net/auth/mysql/model/PermissionModel.java | 110 ++++++++++++++++++ .../mysql/model/SystemPermissionModel.java | 41 +++++++ 6 files changed, 381 insertions(+) create mode 100644 extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/dao/ObjectPermissionMapper.java create mode 100644 extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/dao/PermissionMapper.java create mode 100644 extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/dao/SystemPermissionMapper.java create mode 100644 extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/model/ObjectPermissionModel.java create mode 100644 extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/model/PermissionModel.java create mode 100644 extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/model/SystemPermissionModel.java diff --git a/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/dao/ObjectPermissionMapper.java b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/dao/ObjectPermissionMapper.java new file mode 100644 index 000000000..8764afba0 --- /dev/null +++ b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/dao/ObjectPermissionMapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2015 Glyptodon LLC + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package net.sourceforge.guacamole.net.auth.mysql.dao; + +import net.sourceforge.guacamole.net.auth.mysql.model.ObjectPermissionModel; + +/** + * Mapper for object-related permissions. + * + * @author Michael Jumper + */ +public interface ObjectPermissionMapper extends PermissionMapper { +} \ No newline at end of file diff --git a/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/dao/PermissionMapper.java b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/dao/PermissionMapper.java new file mode 100644 index 000000000..fad022fcf --- /dev/null +++ b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/dao/PermissionMapper.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2015 Glyptodon LLC + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package net.sourceforge.guacamole.net.auth.mysql.dao; + +import java.util.Collection; +import net.sourceforge.guacamole.net.auth.mysql.model.UserModel; +import org.apache.ibatis.annotations.Param; + +/** + * Generic base for mappers which handle permissions. + * + * @author Michael Jumper + * @param + * The type of permission model object handled by this mapper. + */ +public interface PermissionMapper { + + /** + * Retrieves all permissions associated with the given user. + * + * @param user + * The user to retrieve permissions for. + * + * @return + * All permissions associated with the given user. + */ + Collection select(@Param("user") UserModel user); + + /** + * Inserts the given permissions into the database. If any permissions + * already exist, they will be ignored. + * + * @param permissions + * The permissions to insert. + * + * @return + * The number of rows inserted. + */ + int insert(@Param("permissions") Collection permissions); + + /** + * Deletes the given permissions from the database. If any permissions do + * not exist, they will be ignored. + * + * @param permissions + * The permissions to delete. + * + * @return + * The number of rows deleted. + */ + int delete(@Param("permissions") Collection permissions); + +} \ No newline at end of file diff --git a/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/dao/SystemPermissionMapper.java b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/dao/SystemPermissionMapper.java new file mode 100644 index 000000000..e1ff02019 --- /dev/null +++ b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/dao/SystemPermissionMapper.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2015 Glyptodon LLC + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package net.sourceforge.guacamole.net.auth.mysql.dao; + +import net.sourceforge.guacamole.net.auth.mysql.model.SystemPermissionModel; + +/** + * Mapper for system-level permissions. + * + * @author Michael Jumper + */ +public interface SystemPermissionMapper extends PermissionMapper { +} \ No newline at end of file diff --git a/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/model/ObjectPermissionModel.java b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/model/ObjectPermissionModel.java new file mode 100644 index 000000000..4194e216a --- /dev/null +++ b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/model/ObjectPermissionModel.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2015 Glyptodon LLC + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package net.sourceforge.guacamole.net.auth.mysql.model; + +import org.glyptodon.guacamole.net.auth.permission.ObjectPermission; + +/** + * Object representation of an object-related Guacamole permission, as + * represented in the database. + * + * @author Michael Jumper + */ +public class ObjectPermissionModel extends PermissionModel { + + /** + * The database ID of the object affected by this permission. + */ + private Integer affectedID; + + /** + * The unique identifier of the object affected by this permission. + */ + private String affectedIdentifier; + + /** + * Creates a new, empty object permission. + */ + public ObjectPermissionModel() { + } + + /** + * Returns the database ID of the object affected by this permission. + * + * @return + * The database ID of the object affected by this permission. + */ + public Integer getAffectedID() { + return affectedID; + } + + /** + * Sets the database ID of the object affected by this permission. + * + * @param affectedID + * The database ID of the object affected by this permission. + */ + public void setAffectedID(Integer affectedID) { + this.affectedID = affectedID; + } + + /** + * Returns the unique identifier of the object affected by this permission. + * + * @return + * The unique identifier of the object affected by this permission. + */ + public String getAffectedIdentifier() { + return affectedIdentifier; + } + + /** + * Sets the unique identifier of the object affected by this permission. + * + * @param affectedIdentifier + * The unique identifier of the object affected by this permission. + */ + public void setAffectedIdentifier(String affectedIdentifier) { + this.affectedIdentifier = affectedIdentifier; + } + +} diff --git a/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/model/PermissionModel.java b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/model/PermissionModel.java new file mode 100644 index 000000000..d5242b7d5 --- /dev/null +++ b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/model/PermissionModel.java @@ -0,0 +1,110 @@ +/* + * Copyright (C) 2015 Glyptodon LLC + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package net.sourceforge.guacamole.net.auth.mysql.model; + +/** + * Generic base permission model which grants a permission of a particular type + * to a specific user. + * + * @author Michael Jumper + * @param + * The type of permissions allowed within this model. + */ +public abstract class PermissionModel { + + /** + * The database ID of the user to whom this permission is granted. + */ + private Integer userID; + + /** + * The username of the user to whom this permission is granted. + */ + private String username; + + /** + * The type of action granted by this permission. + */ + private PermissionType type; + + /** + * Returns the database ID of the user to whom this permission is granted. + * + * @return + * The database ID of the user to whom this permission is granted. + */ + public Integer getUserID() { + return userID; + } + + /** + * Sets the database ID of the user to whom this permission is granted. + * + * @param userID + * The database ID of the user to whom this permission is granted. + */ + public void setUserID(Integer userID) { + this.userID = userID; + } + + /** + * Returns the username of the user to whom this permission is granted. + * + * @return + * The username of the user to whom this permission is granted. + */ + public String getUsername() { + return username; + } + + /** + * Sets the username of the user to whom this permission is granted. + * + * @param username + * The username of the user to whom this permission is granted. + */ + public void setUsername(String username) { + this.username = username; + } + + /** + * Returns the type of action granted by this permission. + * + * @return + * The type of action granted by this permission. + */ + public PermissionType getType() { + return type; + } + + /** + * Sets the type of action granted by this permission. + * + * @param type + * The type of action granted by this permission. + */ + public void setType(PermissionType type) { + this.type = type; + } + +} diff --git a/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/model/SystemPermissionModel.java b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/model/SystemPermissionModel.java new file mode 100644 index 000000000..712bcab2d --- /dev/null +++ b/extensions/guacamole-auth-mysql/src/main/java/net/sourceforge/guacamole/net/auth/mysql/model/SystemPermissionModel.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2015 Glyptodon LLC + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package net.sourceforge.guacamole.net.auth.mysql.model; + +import org.glyptodon.guacamole.net.auth.permission.SystemPermission; + +/** + * Object representation of an system-level Guacamole permission, as + * represented in the database. + * + * @author Michael Jumper + */ +public class SystemPermissionModel extends PermissionModel { + + /** + * Creates a new, empty System permission. + */ + public SystemPermissionModel() { + } + +}