SEBSERV-8 #added java doc and finished model

This commit is contained in:
anhefti 2018-12-04 13:08:55 +01:00
parent 7498ede28e
commit bae30aeb87
10 changed files with 300 additions and 180 deletions

View file

@ -8,49 +8,70 @@
package ch.ethz.seb.sebserver.gbl.model.user; package ch.ethz.seb.sebserver.gbl.model.user;
import java.util.Set; import com.fasterxml.jackson.annotation.JsonProperty;
import org.joda.time.DateTime; import ch.ethz.seb.sebserver.gbl.model.Domain.USER;
/** TODO what filter criteria do we need? */
public final class UserFilter { public final class UserFilter {
public final Set<Long> institutionIds; @JsonProperty(USER.ATTR_ACTIVE)
public final String name;
public final String username;
public final String email;
public final DateTime creationDateFrom;
public final DateTime creationDateTo;
public final Set<Long> createdById;
public final Boolean active; public final Boolean active;
public final Set<String> locales; @JsonProperty(USER.ATTR_INSTITUTION_ID)
public final Set<String> timeZones; public final Long institutionId;
public final Set<String> roles; @JsonProperty(USER.ATTR_NAME)
public final String name;
@JsonProperty(USER.ATTR_USER_NAME)
public final String userName;
@JsonProperty(USER.ATTR_EMAIL)
public final String email;
@JsonProperty(USER.ATTR_LOCALE)
public final String locale;
public UserFilter( public UserFilter(
final Set<Long> institutionIds, @JsonProperty(USER.ATTR_INSTITUTION_ID) final Long institutionId,
final String name, @JsonProperty(USER.ATTR_NAME) final String name,
final String username, @JsonProperty(USER.ATTR_USER_NAME) final String userName,
final String email, @JsonProperty(USER.ATTR_EMAIL) final String email,
final DateTime creationDateFrom, @JsonProperty(USER.ATTR_ACTIVE) final Boolean active,
final DateTime creationDateTo, @JsonProperty(USER.ATTR_LOCALE) final String locale) {
final Set<Long> createdById,
final Boolean active,
final Set<String> locales,
final Set<String> timeZones,
final Set<String> roles) {
this.institutionIds = institutionIds; this.institutionId = institutionId;
this.name = name; this.name = name;
this.username = username; this.userName = userName;
this.email = email; this.email = email;
this.creationDateFrom = creationDateFrom;
this.creationDateTo = creationDateTo;
this.createdById = createdById;
this.active = active; this.active = active;
this.locales = locales; this.locale = locale;
this.timeZones = timeZones; }
this.roles = roles;
public Long getInstitutionId() {
return this.institutionId;
}
public String getName() {
return this.name;
}
public String getUserName() {
return this.userName;
}
public String getEmail() {
return this.email;
}
public Boolean getActive() {
return this.active;
}
public String getLocale() {
return this.locale;
}
@Override
public String toString() {
return "UserFilter [institutionId=" + this.institutionId + ", name=" + this.name + ", userName=" + this.userName
+ ", email="
+ this.email + ", active=" + this.active + ", locale=" + this.locale + "]";
} }
} }

View file

@ -61,7 +61,7 @@ public final class UserInfo implements Entity, Serializable {
@NotNull @NotNull
@Size(min = 3, max = 255, message = "userInfo:username:size:{min}:{max}:${validatedValue}") @Size(min = 3, max = 255, message = "userInfo:username:size:{min}:{max}:${validatedValue}")
@JsonProperty(USER.ATTR_USER_NAME) @JsonProperty(USER.ATTR_USER_NAME)
public final String username; public final String userName;
/** E-mail address of the user */ /** E-mail address of the user */
@Email(message = "userInfo:email:email:_:_:${validatedValue}") @Email(message = "userInfo:email:email:_:_:${validatedValue}")
@ -93,7 +93,7 @@ public final class UserInfo implements Entity, Serializable {
@JsonProperty(USER.ATTR_UUID) final String uuid, @JsonProperty(USER.ATTR_UUID) final String uuid,
@JsonProperty(USER.ATTR_INSTITUTION_ID) final Long institutionId, @JsonProperty(USER.ATTR_INSTITUTION_ID) final Long institutionId,
@JsonProperty(USER.ATTR_NAME) final String name, @JsonProperty(USER.ATTR_NAME) final String name,
@JsonProperty(USER.ATTR_USER_NAME) final String username, @JsonProperty(USER.ATTR_USER_NAME) final String userName,
@JsonProperty(USER.ATTR_EMAIL) final String email, @JsonProperty(USER.ATTR_EMAIL) final String email,
@JsonProperty(USER.ATTR_ACTIVE) final Boolean active, @JsonProperty(USER.ATTR_ACTIVE) final Boolean active,
@JsonProperty(USER.ATTR_LOCALE) final Locale locale, @JsonProperty(USER.ATTR_LOCALE) final Locale locale,
@ -103,7 +103,7 @@ public final class UserInfo implements Entity, Serializable {
this.uuid = uuid; this.uuid = uuid;
this.institutionId = institutionId; this.institutionId = institutionId;
this.name = name; this.name = name;
this.username = username; this.userName = userName;
this.email = email; this.email = email;
this.active = BooleanUtils.isTrue(active); this.active = BooleanUtils.isTrue(active);
this.locale = locale; this.locale = locale;
@ -130,8 +130,8 @@ public final class UserInfo implements Entity, Serializable {
return this.name; return this.name;
} }
public String getUsername() { public String getUserName() {
return this.username; return this.userName;
} }
public String getEmail() { public String getEmail() {
@ -187,8 +187,8 @@ public final class UserInfo implements Entity, Serializable {
@Override @Override
public String toString() { public String toString() {
return "UserInfo [uuid=" + this.uuid + ", institutionId=" + this.institutionId + ", name=" + this.name return "UserInfo [uuid=" + this.uuid + ", institutionId=" + this.institutionId + ", name=" + this.name
+ ", username=" + ", userName="
+ this.username + ", email=" + this.email + ", active=" + this.active + ", locale=" + this.locale + this.userName + ", email=" + this.email + ", active=" + this.active + ", locale=" + this.locale
+ ", timeZone=" + this.timeZone + ", timeZone=" + this.timeZone
+ ", roles=" + this.roles + "]"; + ", roles=" + this.roles + "]";
} }
@ -202,7 +202,7 @@ public final class UserInfo implements Entity, Serializable {
userInfo.getUuid(), userInfo.getUuid(),
userInfo.getInstitutionId(), userInfo.getInstitutionId(),
userInfo.getName(), userInfo.getName(),
userInfo.getUsername(), userInfo.getUserName(),
userInfo.getEmail(), userInfo.getEmail(),
userInfo.getActive(), userInfo.getActive(),
userInfo.getLocale(), userInfo.getLocale(),

View file

@ -10,16 +10,26 @@ package ch.ethz.seb.sebserver.webservice.servicelayer.authorization;
import ch.ethz.seb.sebserver.gbl.model.EntityType; import ch.ethz.seb.sebserver.gbl.model.EntityType;
/** Defines a authorization grant rule for a specified EntityType.
*
* If there is the need for a specialized authorization grant rule for a specified EntityType, just
* create an implementation of this interface for a specified EntityType as a normal Spring Component
* and the AuthorizationGrantService will automatically collect it on initialization and use it for
* the specified EntityType instead of the default implementation. */
public interface AuthorizationGrantRule { public interface AuthorizationGrantRule {
/** The EntityType of the authorization grant rule implementation.
* This is used by the AuthorizationGrantService on initialization.
*
* @return the authorization grant rule implementation */
EntityType entityType(); EntityType entityType();
/** Implements a authorization grant rule check for a given entity, user and grant type.
*
* @param entity the GrantEntity instance to check the grant rule on
* @param user the SEBServerUser instance to check the grant rule on
* @param grantType the GrantType to check
* @return true if a given user has a given grant-type on a given entity, false otherwise */
boolean hasGrant(GrantEntity entity, SEBServerUser user, GrantType grantType); boolean hasGrant(GrantEntity entity, SEBServerUser user, GrantType grantType);
// boolean hasReadGrant(GrantEntity entity, SEBServerUser user);
//
// boolean hasModifyGrant(GrantEntity entity, SEBServerUser user);
//
// boolean hasWriteGrant(GrantEntity entity, SEBServerUser user);
} }

View file

@ -25,12 +25,19 @@ import ch.ethz.seb.sebserver.gbl.model.user.UserRole;
import ch.ethz.seb.sebserver.gbl.profile.WebServiceProfile; import ch.ethz.seb.sebserver.gbl.profile.WebServiceProfile;
import ch.ethz.seb.sebserver.webservice.servicelayer.authorization.RoleTypeGrant.RoleTypeKey; import ch.ethz.seb.sebserver.webservice.servicelayer.authorization.RoleTypeGrant.RoleTypeKey;
/** A service to check authorization grants for a given user for entity-types and -instances
*
* If there is one or more GrantEntity objects within an authenticated user-request, this service
* can be used check the authenticated user access grant within the object. Check if a given user
* has write, modify or even read-only rights on an entity instance or on an entity type. */
@Lazy @Lazy
@Service @Service
@WebServiceProfile @WebServiceProfile
public class AuthorizationGrantService { public class AuthorizationGrantService {
/** Map of role based grants for specified entity types. */
private final Map<RoleTypeGrant.RoleTypeKey, RoleTypeGrant> grants = new HashMap<>(); private final Map<RoleTypeGrant.RoleTypeKey, RoleTypeGrant> grants = new HashMap<>();
/** Map of collected AuthorizationGrantRule exceptions */
private final Map<EntityType, AuthorizationGrantRule> exceptionalRules = private final Map<EntityType, AuthorizationGrantRule> exceptionalRules =
new EnumMap<>(EntityType.class); new EnumMap<>(EntityType.class);
@ -48,6 +55,7 @@ public class AuthorizationGrantService {
} }
} }
/** Initialize the (hard-coded) grants */
@PostConstruct @PostConstruct
public void init() { public void init() {
// grants for institution // grants for institution
@ -100,6 +108,16 @@ public class AuthorizationGrantService {
// TODO other entities // TODO other entities
} }
/** Checks if a given user has a specified grant for a given entity-type
*
* NOTE: within this method only base-privileges for a given entity-type are checked
* there is no institutional or ownership grant check because this information lays on an entity-instance
* rather then the entity-type.
*
* @param entityType the entity type
* @param grantType the grant type to check
* @param principal an authorization Principal instance to extract the user from
* @return true if a given user has a specified grant for a given entity-type. False otherwise */
public boolean hasTypeGrant(final EntityType entityType, final GrantType grantType, final Principal principal) { public boolean hasTypeGrant(final EntityType entityType, final GrantType grantType, final Principal principal) {
final SEBServerUser user = this.currentUserService.extractFromPrincipal(principal); final SEBServerUser user = this.currentUserService.extractFromPrincipal(principal);
for (final UserRole role : user.getUserRoles()) { for (final UserRole role : user.getUserRoles()) {
@ -112,10 +130,22 @@ public class AuthorizationGrantService {
return false; return false;
} }
public boolean hasGrant(final GrantEntity entity, final GrantType type, final Principal principal) { /** Checks if a given user has specified grant for a given entity-instance
return hasGrant(entity, type, this.currentUserService.extractFromPrincipal(principal)); *
* @param entity the entity-instance
* @param grantType the grant type to check
* @param principal an authorization Principal instance to extract the user from
* @return true if a given user has a specified grant for a given entity-instance. False otherwise */
public boolean hasGrant(final GrantEntity entity, final GrantType grantType, final Principal principal) {
return hasGrant(entity, grantType, this.currentUserService.extractFromPrincipal(principal));
} }
/** Checks if a given user has specified grant for a given entity-instance
*
* @param entity the entity-instance
* @param grantType the grant type to check
* @param user a SEBServerUser instance to check grant for
* @return true if a given user has a specified grant for a given entity-instance. False otherwise */
public boolean hasGrant(final GrantEntity entity, final GrantType grantType, final SEBServerUser user) { public boolean hasGrant(final GrantEntity entity, final GrantType grantType, final SEBServerUser user) {
final AuthorizationGrantRule authorizationGrantRule = getGrantRule(entity.entityType()); final AuthorizationGrantRule authorizationGrantRule = getGrantRule(entity.entityType());
if (authorizationGrantRule == null) { if (authorizationGrantRule == null) {
@ -125,14 +155,26 @@ public class AuthorizationGrantService {
return authorizationGrantRule.hasGrant(entity, user, grantType); return authorizationGrantRule.hasGrant(entity, user, grantType);
} }
/** Closure to get a grant check predicate to filter a several entity-instances within the same grant
*
* @param entityType the EntityType for the grant check filter
* @param grantType the GrantType for the grant check filter
* @param principal an authorization Principal instance to extract the user from
* @return A filter predicate working on the given attributes to check user grants */
public <T extends GrantEntity> Predicate<T> getGrantFilter( public <T extends GrantEntity> Predicate<T> getGrantFilter(
final EntityType entityType, final EntityType entityType,
final GrantType type, final GrantType grantType,
final Principal principal) { final Principal principal) {
return getGrantFilter(entityType, type, this.currentUserService.extractFromPrincipal(principal)); return getGrantFilter(entityType, grantType, this.currentUserService.extractFromPrincipal(principal));
} }
/** Closure to get a grant check predicate to filter a several entity-instances within the same grant
*
* @param entityType the EntityType for the grant check filter
* @param grantType the GrantType for the grant check filter
* @param user a SEBServerUser instance to check grant for
* @return A filter predicate working on the given attributes to check user grants */
public <T extends GrantEntity> Predicate<T> getGrantFilter( public <T extends GrantEntity> Predicate<T> getGrantFilter(
final EntityType entityType, final EntityType entityType,
final GrantType grantType, final GrantType grantType,
@ -153,6 +195,52 @@ public class AuthorizationGrantService {
return new GrantRuleBuilder(entityType); return new GrantRuleBuilder(entityType);
} }
/** This is the default (or base) implementation of a AuthorizationGrantRule.
*
* The rule is: go over all user-roles of the given user and for each user-role check
* if there is base-privilege on the given entity-type for the given grant type.
* if true return true
* if false; check if there is a given institutional-privilege on the given
* entity-instance for the given grant type.
* if true return true
* if false; check if there is a given ownership-privilege on the given
* entity-instance for the given grant type.
* if true return true
* if false return false */
private final class BaseTypeGrantRule implements AuthorizationGrantRule {
private final EntityType type;
private final Map<UserRole, RoleTypeGrant> grants;
public BaseTypeGrantRule(final EntityType type) {
this.type = type;
this.grants = new EnumMap<>(UserRole.class);
for (final UserRole role : UserRole.values()) {
this.grants.put(role,
AuthorizationGrantService.this.grants.get(new RoleTypeKey(type, role)));
}
}
@Override
public EntityType entityType() {
return this.type;
}
@Override
public boolean hasGrant(final GrantEntity entity, final SEBServerUser user, final GrantType grantType) {
for (final UserRole role : user.getUserRoles()) {
final RoleTypeGrant roleTypeGrant = this.grants.get(role);
if (roleTypeGrant != null && roleTypeGrant.hasPrivilege(user, entity, grantType)) {
return true;
}
}
return false;
}
}
/** Implements a GrantRuleBuilder for internal use and to make the code more readable.
* See init (PostConstruct) */
private final class GrantRuleBuilder { private final class GrantRuleBuilder {
private final EntityType entityType; private final EntityType entityType;
private UserRole userRole; private UserRole userRole;
@ -203,38 +291,4 @@ public class AuthorizationGrantService {
} }
} }
private final class BaseTypeGrantRule implements AuthorizationGrantRule {
private final EntityType type;
private final Map<UserRole, RoleTypeGrant> grants;
public BaseTypeGrantRule(final EntityType type) {
this.type = type;
this.grants = new EnumMap<>(UserRole.class);
for (final UserRole role : UserRole.values()) {
this.grants.put(role,
AuthorizationGrantService.this.grants.get(new RoleTypeKey(type, role)));
}
}
@Override
public EntityType entityType() {
return this.type;
}
@Override
public boolean hasGrant(final GrantEntity entity, final SEBServerUser user, final GrantType grantType) {
for (final UserRole role : user.getUserRoles()) {
final RoleTypeGrant roleTypeGrant = this.grants.get(role);
if (roleTypeGrant != null) {
if (roleTypeGrant.hasPrivilege(user, entity, grantType)) {
return true;
}
}
}
return false;
}
}
} }

View file

@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
import ch.ethz.seb.sebserver.gbl.profile.WebServiceProfile; import ch.ethz.seb.sebserver.gbl.profile.WebServiceProfile;
/** A service to get the authenticated user from current request */
@Lazy @Lazy
@Service @Service
@WebServiceProfile @WebServiceProfile

View file

@ -1,76 +0,0 @@
/*
* Copyright (c) 2018 ETH Zürich, Educational Development and Technology (LET)
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package ch.ethz.seb.sebserver.webservice.servicelayer.authorization;
/** A privilege consisting of a overall grant type, a institutional grant type and a owner grant type.
*
* The overallGrantType defines the grant type independent of an institutional relation as well as an owner
* relation. The institutionalGrantType defines the grant type specific to the institutional relation of an entity.
* And the ownerGrantType defines the grant type specific to the ownership of an entity
*
* For example with a privilege of:
* overallGrantType = READ_ONLY
* institutionalGrantType = MODIFY
* ownerGrantType = WRITE
*
* A user with such a privilege is granted to see all type of specified entities independent of institutional relation
* or ownership, is able to modify all type of specified entities within its own institution and is able to create or
* delete owned entities. */
public final class Privilege {
public final GrantType overallGrantType;
public final GrantType institutionalGrantType;
public final GrantType ownerGrantType;
public Privilege(
final GrantType overallGrantType,
final GrantType institutionalGrantType,
final GrantType ownerGrantType) {
this.overallGrantType = overallGrantType;
this.institutionalGrantType = institutionalGrantType;
this.ownerGrantType = ownerGrantType;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((this.institutionalGrantType == null) ? 0 : this.institutionalGrantType.hashCode());
result = prime * result + ((this.overallGrantType == null) ? 0 : this.overallGrantType.hashCode());
result = prime * result + ((this.ownerGrantType == null) ? 0 : this.ownerGrantType.hashCode());
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Privilege other = (Privilege) obj;
if (this.institutionalGrantType != other.institutionalGrantType)
return false;
if (this.overallGrantType != other.overallGrantType)
return false;
if (this.ownerGrantType != other.ownerGrantType)
return false;
return true;
}
@Override
public String toString() {
return "Privilege [overallGrantType=" + this.overallGrantType + ", institutionalGrantType="
+ this.institutionalGrantType
+ ", ownerGrantType=" + this.ownerGrantType + "]";
}
}

View file

@ -11,26 +11,42 @@ package ch.ethz.seb.sebserver.webservice.servicelayer.authorization;
import ch.ethz.seb.sebserver.gbl.model.EntityType; import ch.ethz.seb.sebserver.gbl.model.EntityType;
import ch.ethz.seb.sebserver.gbl.model.user.UserRole; import ch.ethz.seb.sebserver.gbl.model.user.UserRole;
/** Defines a grant for a specified role and entity-type. */
public final class RoleTypeGrant { public final class RoleTypeGrant {
/** Defines a RoleTypeKey that is the combined identity of
* a UserRole and a EntityType the RoleTypeGrant is applying for */
public final RoleTypeKey roleTypeKey; public final RoleTypeKey roleTypeKey;
/** Defines a base-privilege grant type that defines the overall access for entity-type */
public final GrantType basePrivilege; public final GrantType basePrivilege;
/** Defines an institutional grant type that defines the institutional restricted access for a
* entity-instance */
public final GrantType institutionalPrivilege; public final GrantType institutionalPrivilege;
public final GrantType ownerPrivilege; /** Defines an ownership grant type that defines the ownership restricted access for a entity-instance */
public final GrantType ownershipPrivilege;
public RoleTypeGrant( public RoleTypeGrant(
final GrantType basePrivilege, final GrantType basePrivilege,
final GrantType institutionalPrivilege, final GrantType institutionalPrivilege,
final GrantType ownerPrivilege, final GrantType ownershipPrivilege,
final EntityType type, final EntityType type,
final UserRole role) { final UserRole role) {
this.roleTypeKey = new RoleTypeKey(type, role); this.roleTypeKey = new RoleTypeKey(type, role);
this.basePrivilege = basePrivilege; this.basePrivilege = basePrivilege;
this.institutionalPrivilege = institutionalPrivilege; this.institutionalPrivilege = institutionalPrivilege;
this.ownerPrivilege = ownerPrivilege; this.ownershipPrivilege = ownershipPrivilege;
} }
/** Checks if a given user has specified grant type for a given entity-instance.
* Checks all privileges in the order of: basePrivilege, institutionalPrivilege and ownershipPrivilege
*
*
* @param user SEBServerUser instance to check institutional grant
* @param entity entity-instance to check institutional grant
* @param grantType the GrantType to check on all privileges if one matches
* @return true if one privilege of this RoleTypeGrant matches the implicit grant type check for a given user and
* entity instance */
public boolean hasPrivilege( public boolean hasPrivilege(
final SEBServerUser user, final SEBServerUser user,
final GrantEntity entity, final GrantEntity entity,
@ -38,13 +54,35 @@ public final class RoleTypeGrant {
return hasBasePrivilege(grantType) || return hasBasePrivilege(grantType) ||
hasInstitutionalPrivilege(user, entity, grantType) || hasInstitutionalPrivilege(user, entity, grantType) ||
hasOwnerPrivilege(user, entity, grantType); hasOwnershipPrivilege(user, entity, grantType);
} }
/** Checks the base privilege on given grantType by using the hasImplicit
* function of this basePrivilege.
*
* Implicit in this case means: if the basePrivilege is of type GrantType.WRITE,
* GrantType.MODIFY and GrantType.READ_ONLY are implicitly included.
* If the basePrivilege is of type GrantType.MODIFY, the GrantType.READ_ONLY are implicitly included
* and so on.
*
* @param grantType the GrantType to check on basePrivilege
* @return true if the basePrivilege includes the given grantType */
public boolean hasBasePrivilege(final GrantType grantType) { public boolean hasBasePrivilege(final GrantType grantType) {
return this.basePrivilege.hasImplicit(grantType); return this.basePrivilege.hasImplicit(grantType);
} }
/** Checks the institutional privilege on given grantType by using the hasImplicit
* function of this institutionalPrivilege.
*
* Implicit in this case means: if the institutionalPrivilege is of type GrantType.WRITE,
* GrantType.MODIFY and GrantType.READ_ONLY are implicitly included.
* If the institutionalPrivilege is of type GrantType.MODIFY, the GrantType.READ_ONLY are implicitly included
* and so on.
*
* @param grantType the GrantType to check on institutionalPrivilege
* @param user SEBServerUser instance to check institutional grant
* @param entity entity-instance to check institutional grant
* @return true if the institutionalPrivilege includes the given grantType */
public boolean hasInstitutionalPrivilege( public boolean hasInstitutionalPrivilege(
final SEBServerUser user, final SEBServerUser user,
final GrantEntity entity, final GrantEntity entity,
@ -54,15 +92,61 @@ public final class RoleTypeGrant {
user.institutionId().longValue() == entity.institutionId().longValue(); user.institutionId().longValue() == entity.institutionId().longValue();
} }
public boolean hasOwnerPrivilege( /** Checks the ownership privilege on given grantType by using the hasImplicit
* function of this ownershipPrivilege.
*
* Implicit in this case means: if the ownershipPrivilege is of type GrantType.WRITE,
* GrantType.MODIFY and GrantType.READ_ONLY are implicitly included.
* If the ownershipPrivilege is of type GrantType.MODIFY, the GrantType.READ_ONLY are implicitly included
* and so on.
*
* @param grantType the GrantType to check on ownershipPrivilege
* @param user SEBServerUser instance to check ownership grant
* @param entity entity-instance to check ownership grant
* @return true if the ownershipPrivilege includes the given grantType */
public boolean hasOwnershipPrivilege(
final SEBServerUser user, final SEBServerUser user,
final GrantEntity entity, final GrantEntity entity,
final GrantType grantType) { final GrantType grantType) {
return this.ownerPrivilege.hasImplicit(grantType) && return this.ownershipPrivilege.hasImplicit(grantType) &&
user.uuid().equals(entity.ownerUUID()); user.uuid().equals(entity.ownerUUID());
} }
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((this.roleTypeKey == null) ? 0 : this.roleTypeKey.hashCode());
return result;
}
@Override
public boolean equals(final Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final RoleTypeGrant other = (RoleTypeGrant) obj;
if (this.roleTypeKey == null) {
if (other.roleTypeKey != null)
return false;
} else if (!this.roleTypeKey.equals(other.roleTypeKey))
return false;
return true;
}
@Override
public String toString() {
return "RoleTypeGrant [roleTypeKey=" + this.roleTypeKey + ", basePrivilege=" + this.basePrivilege
+ ", institutionalPrivilege=" + this.institutionalPrivilege + ", ownershipPrivilege="
+ this.ownershipPrivilege
+ "]";
}
/** A key that combines UserRole EntityType identity */
static final class RoleTypeKey { static final class RoleTypeKey {
public final EntityType entityType; public final EntityType entityType;
@ -97,6 +181,11 @@ public final class RoleTypeGrant {
return false; return false;
return true; return true;
} }
@Override
public String toString() {
return "RoleTypeKey [entityType=" + this.entityType + ", userRole=" + this.userRole + "]";
}
} }
} }

View file

@ -66,7 +66,7 @@ public final class SEBServerUser implements UserDetails, CredentialsContainer {
@Override @Override
public String getUsername() { public String getUsername() {
return this.userInfo.username; return this.userInfo.userName;
} }
@Override @Override

View file

@ -8,8 +8,7 @@
package ch.ethz.seb.sebserver.webservice.servicelayer.dao.impl; package ch.ethz.seb.sebserver.webservice.servicelayer.dao.impl;
import static org.mybatis.dynamic.sql.SqlBuilder.isEqualTo; import static org.mybatis.dynamic.sql.SqlBuilder.*;
import static org.mybatis.dynamic.sql.SqlBuilder.isNotEqualTo;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
@ -106,13 +105,7 @@ public class UserDaoImpl implements UserDAO {
.build() .build()
.execute(); .execute();
if (records == null) { return fromRecords(records);
return Result.of(Collections.emptyList());
}
return Result.of(records.stream()
.map(record -> UserInfo.fromRecord(record, getRoles(record)))
.collect(Collectors.toList()));
} catch (final Exception e) { } catch (final Exception e) {
final String errorMessage = "Unexpected error while trying to get all active users: "; final String errorMessage = "Unexpected error while trying to get all active users: ";
@ -150,8 +143,25 @@ public class UserDaoImpl implements UserDAO {
@Override @Override
@Transactional(readOnly = true) @Transactional(readOnly = true)
public Result<Collection<UserInfo>> all(final UserFilter filter) { public Result<Collection<UserInfo>> all(final UserFilter filter) {
// TODO Auto-generated method stub try {
return null;
final List<UserRecord> records = this.userRecordMapper.selectByExample().where(
UserRecordDynamicSqlSupport.active,
isNotEqualTo(BooleanUtils.toInteger(filter.active)))
.and(UserRecordDynamicSqlSupport.institutionId, isEqualToWhenPresent(filter.institutionId))
.and(UserRecordDynamicSqlSupport.name, isLikeWhenPresent(filter.name))
.and(UserRecordDynamicSqlSupport.userName, isLikeWhenPresent(filter.userName))
.and(UserRecordDynamicSqlSupport.locale, isLikeWhenPresent(filter.locale))
.build()
.execute();
return fromRecords(records);
} catch (final Exception e) {
final String errorMessage = "Unexpected error while trying to get fitered users: ";
log.error(errorMessage + " filter: {}", filter, e);
return Result.ofRuntimeError(errorMessage);
}
} }
@Override @Override
@ -184,6 +194,16 @@ public class UserDaoImpl implements UserDAO {
return Result.ofError(new RuntimeException("TODO")); return Result.ofError(new RuntimeException("TODO"));
} }
private Result<Collection<UserInfo>> fromRecords(final List<UserRecord> records) {
if (records == null) {
return Result.of(Collections.emptyList());
}
return Result.of(records.stream()
.map(record -> UserInfo.fromRecord(record, getRoles(record)))
.collect(Collectors.toList()));
}
private Result<UserInfo> updateUser(final UserMod userMod) { private Result<UserInfo> updateUser(final UserMod userMod) {
final UserInfo userInfo = userMod.getUserInfo(); final UserInfo userInfo = userMod.getUserInfo();
return recordByUUID(userInfo.uuid) return recordByUUID(userInfo.uuid)
@ -202,7 +222,7 @@ public class UserDaoImpl implements UserDAO {
null, null,
null, null,
userInfo.name, userInfo.name,
userInfo.username, userInfo.userName,
(changePWD) ? userMod.getNewPassword() : null, (changePWD) ? userMod.getNewPassword() : null,
userInfo.email, userInfo.email,
userInfo.locale.toLanguageTag(), userInfo.locale.toLanguageTag(),
@ -231,7 +251,7 @@ public class UserDaoImpl implements UserDAO {
userInfo.institutionId, userInfo.institutionId,
UUID.randomUUID().toString(), UUID.randomUUID().toString(),
userInfo.name, userInfo.name,
userInfo.username, userInfo.userName,
userMod.getNewPassword(), userMod.getNewPassword(),
userInfo.email, userInfo.email,
userInfo.locale.toLanguageTag(), userInfo.locale.toLanguageTag(),

View file

@ -32,6 +32,7 @@ public class AuthorizationGrantServiceTest {
private Principal principal; private Principal principal;
@Test @Test
@SuppressWarnings("unused")
public void testInit() { public void testInit() {
try { try {
final AuthorizationGrantService service = getTestServiceWithUserWithRoles(); final AuthorizationGrantService service = getTestServiceWithUserWithRoles();