Skip to content

Commit

Permalink
SHIBUI-2003
Browse files Browse the repository at this point in the history
First pass - ownership items
  • Loading branch information
chasegawa committed Aug 8, 2021
1 parent 0c24378 commit 4a8cfe6
Show file tree
Hide file tree
Showing 7 changed files with 399 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package edu.internet2.tier.shibboleth.admin.ui.security.model;

public interface Ownable {
/**
* @return representation of the id of the object. This is likely (but not limited to) the resource id of the object
*/
public String getObjectId();

/**
* @return the OwnableType that describes the Ownable object
*/
public OwnableType getOwnableType();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package edu.internet2.tier.shibboleth.admin.ui.security.model;

public enum OwnableType {
USER, ENTITY_DESCRIPTOR, METADATA_PROVIDER
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package edu.internet2.tier.shibboleth.admin.ui.security.model;

public interface Owner {
/**
* @return representation of the id of the owner. This is likely (but not limited to) the resource id of the owner
*/
public String getOwnerId();

/**
* @return the type describing the owner
*/
public OwnerType getOwnerType();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package edu.internet2.tier.shibboleth.admin.ui.security.model;

public enum OwnerType {
USER, GROUP
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package edu.internet2.tier.shibboleth.admin.ui.security.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import lombok.Data;
import lombok.NoArgsConstructor;

@Entity(name = "ownership")
@Data
@NoArgsConstructor
public class Ownership {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
protected Long id;

private String ownedId;
private String ownedType;
private String ownerId;
private String ownerType;

public Ownership(Owner owner, Ownable ownedObject) {
ownerId = owner.getOwnerId();
ownerType = owner.getOwnerType().name();

ownedId = ownedObject.getObjectId();
ownedType = ownedObject.getOwnableType().name();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package edu.internet2.tier.shibboleth.admin.ui.security.repository;

import java.util.List;
import java.util.Set;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import edu.internet2.tier.shibboleth.admin.ui.security.model.Ownable;
import edu.internet2.tier.shibboleth.admin.ui.security.model.Owner;
import edu.internet2.tier.shibboleth.admin.ui.security.model.Ownership;

public interface OwnershipRepository extends JpaRepository<Ownership, String> {
/**
* Delete the user from any groups they may in.
*/
@Query("DELETE FROM ownership o WHERE o.ownedId = :username AND o.ownedType = 'USER' AND o.ownerType = 'GROUP'")
@Modifying(clearAutomatically = true, flushAutomatically = true)
void clearUsersGroups(@Param("username") String username);

/**
* Remove any ownership of the ownable object
*/
@Query("DELETE FROM ownership o WHERE o.ownedId = :#{#ownedObject.getObjectId()} AND o.ownedType = :#{#ownedObject.getOwnableType().toString()}")
@Modifying(clearAutomatically = true, flushAutomatically = true)
void deleteEntriesForOwnedObject(@Param("ownedObject") Ownable ownedObject);

/**
* Find all items an owner owns
*/
@Query("SELECT o FROM ownership o WHERE o.ownerId = :#{#owner.getOwnerId()} AND o.ownerType = :#{#owner.getOwnerType().toString()}")
Set<Ownership> findAllByOwner(@Param("owner") Owner owner);

/**
* Find all the groups that a user belongs to
*/
@Query("SELECT o FROM ownership o WHERE o.ownedId = :username AND o.ownedType = 'USER' AND o.ownerType = 'GROUP' ")
Set<Ownership> findAllGroupsForUser(@Param("username") String username);

/**
* Find the owner of this object
*/
@Query("SELECT o FROM ownership o WHERE o.ownedId = :#{#ownedObject.getObjectId()} AND o.ownedType = :#{#ownedObject.getOwnableType().toString()}")
Set<Ownership> findOwnableObjectOwners(@Param("ownedObject") Ownable ownedObject);

/**
* Find all things the user owns
*/
@Query("SELECT o FROM ownership o WHERE o.ownerId = :username AND o.ownerType = 'USER' ")
List<Ownership> findOwnedByUser(@Param("username") String username);

/**
* Find only the users that the owner owns
*/
@Query("SELECT o FROM ownership o WHERE o.ownerId = :#{#owner.getOwnerId()} AND o.ownerType = :#{#owner.getOwnerType().toString()} AND o.ownedType='USER'")
Set<Ownership> findUsersByOwner(@Param("owner") Owner owner);
}
Loading

0 comments on commit 4a8cfe6

Please sign in to comment.