diff --git a/src/main/java/cz/cvut/kbss/study/model/Role.java b/src/main/java/cz/cvut/kbss/study/model/Role.java new file mode 100644 index 00000000..e4096a05 --- /dev/null +++ b/src/main/java/cz/cvut/kbss/study/model/Role.java @@ -0,0 +1,103 @@ +package cz.cvut.kbss.study.model; + +import cz.cvut.kbss.jopa.model.annotations.Individual; +import lombok.Getter; + +@Getter +public enum Role { + + @Individual(iri=Vocabulary.s_i_administrator) + administrator(Vocabulary.s_i_administrator), + + @Individual(iri = Vocabulary.s_i_user) + user(Vocabulary.s_i_user), + + @Individual(iri = Vocabulary.s_i_delete_all_records_role) + deleteAllRecords(Vocabulary.s_i_delete_all_records_role), + + @Individual(iri = Vocabulary.s_i_view_all_records_role) + viewAllRecords(Vocabulary.s_i_view_all_records_role), + + @Individual(iri = Vocabulary.s_i_edit_all_records_role) + editAllRecords(Vocabulary.s_i_edit_all_records_role), + + @Individual(iri = Vocabulary.s_i_delete_organization_records_role) + deleteOrganizationRecords(Vocabulary.s_i_delete_organization_records_role), + + @Individual(iri = Vocabulary.s_i_view_organization_records_role) + viewOrganizationRecords(Vocabulary.s_i_view_organization_records_role), + + @Individual(iri = Vocabulary.s_i_edit_organization_records_role) + editOrganizationRecords(Vocabulary.s_i_edit_organization_records_role), + + @Individual(iri = Vocabulary.s_i_edit_users_role) + editUsers(Vocabulary.s_i_edit_users_role), + + @Individual(iri = Vocabulary.s_i_complete_records_role) + completeRecords(Vocabulary.s_i_complete_records_role), + + @Individual(iri = Vocabulary.s_i_reject_records_role) + rejectRecords(Vocabulary.s_i_reject_records_role), + + @Individual(iri = Vocabulary.s_i_publish_records_role) + publishRecords(Vocabulary.s_i_publish_records_role), + + @Individual(iri = Vocabulary.s_i_import_codelists_role) + importCodelists(Vocabulary.s_i_import_codelists_role); + + private final String iri; + + Role(String iri) { + this.iri = iri; + } + + /** + * Returns {@link Role} with the specified IRI. + * + * @param iri role identifier + * @return matching {@code Role} + * @throws IllegalArgumentException When no matching role is found + */ + public static Role fromIri(String iri) { + for (Role r : values()) { + if (r.getIri().equals(iri)) { + return r; + } + } + throw new IllegalArgumentException("Unknown role identifier '" + iri + "'."); + } + + /** + * Returns {@link Role} with the specified constant name. + * + * @param name role name + * @return matching {@code Role} + * @throws IllegalArgumentException When no matching role is found + */ + public static Role fromName(String name) { + for (Role r : values()) { + if (r.name().equalsIgnoreCase(name)) { + return r; + } + } + throw new IllegalArgumentException("Unknown role '" + name + "'."); + } + + /** + * Returns a {@link Role} with the specified IRI or constant name. + *

+ * This function first tries to find the enum constant by IRI. If it is not found, constant name matching is + * attempted. + * + * @param identification Constant IRI or name to find match by + * @return matching {@code Role} + * @throws IllegalArgumentException When no matching role is found + */ + public static Role fromIriOrName(String identification) { + try { + return fromIri(identification); + } catch (IllegalArgumentException e) { + return fromName(identification); + } + } +} diff --git a/src/main/java/cz/cvut/kbss/study/model/RoleGroup.java b/src/main/java/cz/cvut/kbss/study/model/RoleGroup.java new file mode 100644 index 00000000..6191483c --- /dev/null +++ b/src/main/java/cz/cvut/kbss/study/model/RoleGroup.java @@ -0,0 +1,46 @@ +package cz.cvut.kbss.study.model; +import cz.cvut.kbss.jopa.model.annotations.Id; +import cz.cvut.kbss.jopa.model.annotations.OWLClass; +import cz.cvut.kbss.jopa.model.annotations.OWLDataProperty; +import cz.cvut.kbss.jopa.model.annotations.OWLObjectProperty; + +import java.net.URI; +import java.util.Set; + +@OWLClass(iri = Vocabulary.s_c_Person) +public class RoleGroup { + + @Id + private URI uri; + + @OWLDataProperty(iri = Vocabulary.s_p_roleGroupName) + private String roleGroupName; + + @OWLObjectProperty(iri = Vocabulary.s_p_has_role) + private Set roles; + + + public URI getUri() { + return uri; + } + + public void setUri(URI uri) { + this.uri = uri; + } + + public String getRoleGroupName() { + return roleGroupName; + } + + public void setRoleGroupName(String roleGroupName) { + this.roleGroupName = roleGroupName; + } + + public Set getRoles() { + return roles; + } + + public void setRoles(Set roles) { + this.roles = roles; + } +} diff --git a/src/main/java/cz/cvut/kbss/study/model/User.java b/src/main/java/cz/cvut/kbss/study/model/User.java index 31cff563..35ea5fec 100644 --- a/src/main/java/cz/cvut/kbss/study/model/User.java +++ b/src/main/java/cz/cvut/kbss/study/model/User.java @@ -7,22 +7,23 @@ import cz.cvut.kbss.jopa.model.annotations.OWLDataProperty; import cz.cvut.kbss.jopa.model.annotations.OWLObjectProperty; import cz.cvut.kbss.jopa.model.annotations.ParticipationConstraints; -import cz.cvut.kbss.jopa.model.annotations.Types; import cz.cvut.kbss.study.model.util.HasDerivableUri; import cz.cvut.kbss.study.util.Constants; import cz.cvut.kbss.study.util.IdentificationUtils; +import lombok.Getter; +import lombok.Setter; import org.springframework.security.crypto.password.PasswordEncoder; - import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.Date; -import java.util.HashSet; -import java.util.Set; + @OWLClass(iri = Vocabulary.s_c_Person) +@Getter +@Setter public class User implements HasDerivableUri, Serializable { @Id @@ -62,22 +63,18 @@ public class User implements HasDerivableUri, Serializable { private Institution institution; @OWLObjectProperty(iri = Vocabulary.s_p_has_role_group) - private String roleGroup; - - @OWLObjectProperty(iri = Vocabulary.s_p_has_role) - private Set types; + private RoleGroup roleGroup; - public String getRoleGroup() { + public RoleGroup getRoleGroup() { return roleGroup; } - public void setRoleGroup(String roleGroup) { + public void setRoleGroup(RoleGroup roleGroup) { this.roleGroup = roleGroup; } public User() { - this.types = new HashSet<>(); - types.add(Vocabulary.s_i_user); + } @Override @@ -148,18 +145,6 @@ public void setInstitution(Institution institution) { this.institution = institution; } - public Set getTypes() { - return types; - } - - public void setTypes(Set types) { - this.types = types; - } - - public void addType(String type) { - assert types != null; - getTypes().add(type); - } /** * Returns true if this user is an admin. @@ -169,8 +154,8 @@ public void addType(String type) { * @return {@code true} if this is admin, {@code false} otherwise */ public boolean isAdmin() { - assert types != null; - return getTypes().contains(Vocabulary.s_i_administrator); + assert roleGroup != null; + return roleGroup.getRoles().contains(Role.administrator); } public String getToken() { @@ -189,6 +174,7 @@ public void setIsInvited(Boolean isInvited) { this.isInvited = isInvited; } + /** * Encodes password of this person. * diff --git a/src/main/java/cz/cvut/kbss/study/security/model/RoleGroup.java b/src/main/java/cz/cvut/kbss/study/security/model/RoleGroup.java deleted file mode 100644 index 6c622256..00000000 --- a/src/main/java/cz/cvut/kbss/study/security/model/RoleGroup.java +++ /dev/null @@ -1,43 +0,0 @@ -package cz.cvut.kbss.study.security.model; - -import cz.cvut.kbss.study.model.Vocabulary; -import cz.cvut.kbss.study.security.SecurityConstants; - -import java.util.Optional; -import java.util.stream.Stream; - -public enum RoleGroup { - - - OPERATOR_ADMIN(SecurityConstants.ROLE_GROUP_OPERATOR_ADMIN, Vocabulary.s_i_operator_admin_role_group), - OPERATOR(SecurityConstants.ROLE_GROUP_OPERATOR, Vocabulary.s_i_operator_role_group), - SUPPLIER_ADMIN(SecurityConstants.ROLE_GROUP_SUPPLIER_ADMIN, Vocabulary.s_i_supplier_admin_role_group), - SUPPLIER(SecurityConstants.ROLE_GROUP_SUPPLIER, Vocabulary.s_i_supplier_role_group), - EXTERNAL_USER(SecurityConstants.ROLE_GROUP_EXTERNAL_USER, Vocabulary.s_i_external_user_role_group); - - - private final String name; - private final String type; - - RoleGroup(String name, String type) { - this.name = name; - this.type = type; - } - - public static Optional forType(String type) { - return Stream.of(RoleGroup.values()).filter(r -> r.type.equals(type)).findAny(); - } - - public static Optional forName(String name) { - return Stream.of(RoleGroup.values()).filter(r -> r.name.equals(name)).findAny(); - } - - public String getName() { - return name; - } - - public String getType() { - return type; - } -} - diff --git a/src/main/resources/model.ttl b/src/main/resources/model.ttl index 379afa38..5734a1f7 100644 --- a/src/main/resources/model.ttl +++ b/src/main/resources/model.ttl @@ -66,10 +66,6 @@ rm:has-question rdf:type owl:ObjectProperty ; rm:is-member-of rdf:type owl:ObjectProperty ; rdfs:subPropertyOf rm:relates-to . -### http://onto.fel.cvut.cz/ontologies/record-manager/role-group -rm:role-group rdf:type owl:ObjectProperty ; - rdfs:subPropertyOf rm:relates-to . - ### http://onto.fel.cvut.cz/ontologies/record-manager/relates-to rm:relates-to rdf:type owl:ObjectProperty . @@ -120,26 +116,23 @@ rm:key rdf:type owl:DatatypeProperty . ### http://onto.fel.cvut.cz/ontologies/record-manager/password rm:password rdf:type owl:DatatypeProperty . - ### http://onto.fel.cvut.cz/ontologies/record-manager/payload rm:payload rdf:type owl:DatatypeProperty . - ### http://onto.fel.cvut.cz/ontologies/record-manager/token rm:token rdf:type owl:DatatypeProperty . - ### http://xmlns.com/foaf/0.1/accountName rdf:type owl:DatatypeProperty . - ### http://xmlns.com/foaf/0.1/firstName rdf:type owl:DatatypeProperty . - ### http://xmlns.com/foaf/0.1/lastName rdf:type owl:DatatypeProperty . +### http://xmlns.com/foaf/0.1/roleGroupName +rm:roleGroupName rdf:type owl:DatatypeProperty . ### http://xmlns.com/foaf/0.1/mbox rdf:type owl:DatatypeProperty . @@ -208,61 +201,6 @@ rm:role rdf:type owl:Class; rm:role-group rdf:type owl:Class; rdfs:label "user role group" . - -################################################################# -# Groups -################################################################# - -### http://onto.fel.cvut.cz/ontologies/record-manager/operator-role-group -rm:operator-role-group rdf:type owl:NamedIndividual, rm:role-group; - rm:has-role rm:user, - rm:complete-records-role; - rdfs:label "operator role group"@en . - -### http://onto.fel.cvut.cz/ontologies/record-manager/operator-admin-role-group -rm:operator-admin-role-group rdf:type owl:NamedIndividual, rm:role-group ; - rm:has-role - rm:user, - rm:administrator, - rm:complete-records-role , - rm:delete-organization-records-role , - rm:edit-organization-records-role , - rm:view-organization-records-role , - rm:edit-users-role , - rm:import-codelists-role , - rm:publish-records-role , - rm:reject-records-role ; - rdfs:label "operator-admin role group"@en . - -### http://onto.fel.cvut.cz/ontologies/record-manager/supplier-role-group -rm:supplier-role-group rdf:type owl:NamedIndividual, rm:role-group ; - rm:has-role rm:user, - rm:complete-records-role ; - rdfs:label "supplier role group"@en . - -### http://onto.fel.cvut.cz/ontologies/record-manager/operator-admin-role-group -rm:supplier-admin-role-group rdf:type owl:NamedIndividual, rm:role-group; - rm:has-role rm:user, - rm:administrator, - rm:complete-records-role , - rm:delete-organization-records-role , - rm:edit-organization-records-role , - rm:view-organization-records-role , - rm:edit-users-role , - rm:import-codelists-role , - rm:reject-records-role , - rm:delete-all-records-role , - rm:edit-all-records-role , - rm:view-all-records-role ; - rdfs:label "supplier-admin role group"@en . - -### http://onto.fel.cvut.cz/ontologies/record-manager/external-user-role-group -rm:external-user-role-group rdf:type owl:NamedIndividual, rm:role-group; - rm:has-role rm:user, - rm:complete-records-role; - rdfs:label "external user role group"@en . - - ################################################################# # Roles #################################################################