diff --git a/src/main/java/ru/ldeloff/hedgehogcloud/entity/BaseEntity.java b/src/main/java/ru/ldeloff/hedgehogcloud/entity/BaseEntity.java new file mode 100644 index 0000000..fb79963 --- /dev/null +++ b/src/main/java/ru/ldeloff/hedgehogcloud/entity/BaseEntity.java @@ -0,0 +1,33 @@ +package ru.ldeloff.hedgehogcloud.entity; + +import com.sun.istack.NotNull; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.data.domain.Persistable; + +import javax.persistence.Id; +import javax.persistence.MappedSuperclass; +import javax.persistence.Transient; +import java.util.UUID; + +@NoArgsConstructor +@Setter +@MappedSuperclass +@EqualsAndHashCode +public class BaseEntity implements Persistable { + @Id + protected String id = UUID.randomUUID().toString(); + @Transient + private Boolean justCreated = false; + + @Override + public String getId() { + return null; + } + + @Override + public boolean isNew() { + return justCreated; + } +} diff --git a/src/main/java/ru/ldeloff/hedgehogcloud/entity/RoleEntity.java b/src/main/java/ru/ldeloff/hedgehogcloud/entity/RoleEntity.java index da5eb44..59598f5 100644 --- a/src/main/java/ru/ldeloff/hedgehogcloud/entity/RoleEntity.java +++ b/src/main/java/ru/ldeloff/hedgehogcloud/entity/RoleEntity.java @@ -6,10 +6,7 @@ import lombok.Setter; import org.springframework.security.core.GrantedAuthority; import org.springframework.transaction.annotation.Transactional; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.Table; -import javax.persistence.Transient; +import javax.persistence.*; import java.util.Set; @NoArgsConstructor @@ -17,13 +14,15 @@ import java.util.Set; @Setter @Entity @Table(name = "roles") -public class RoleEntity implements GrantedAuthority { - @Id - private String id; +public class RoleEntity extends BaseEntity implements GrantedAuthority { private String name; @Transient + @ManyToMany private Set users; + public String getName() { + return name; + } @Override public String getAuthority() { return getName(); diff --git a/src/main/java/ru/ldeloff/hedgehogcloud/entity/UserEntity.java b/src/main/java/ru/ldeloff/hedgehogcloud/entity/UserEntity.java index 94a8749..7faa23d 100644 --- a/src/main/java/ru/ldeloff/hedgehogcloud/entity/UserEntity.java +++ b/src/main/java/ru/ldeloff/hedgehogcloud/entity/UserEntity.java @@ -1,14 +1,12 @@ package ru.ldeloff.hedgehogcloud.entity; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; import javax.persistence.*; import java.util.Collection; +import java.util.HashSet; import java.util.Set; @NoArgsConstructor @@ -16,15 +14,17 @@ import java.util.Set; @Setter @Entity @Table(name = "users") -public class UserEntity implements UserDetails { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private String id; +public class UserEntity extends BaseEntity implements UserDetails { private String username; private String password; @ManyToMany(fetch = FetchType.EAGER) - private Set roles; + @JoinTable( + name = "users_roles", + joinColumns = { @JoinColumn(name = "user_id") }, + inverseJoinColumns = { @JoinColumn(name = "role_id") } + ) + private Set roles = new HashSet<>(); @Override public Collection getAuthorities() { diff --git a/src/main/resources/db/scripts/release_0_0_1/changelog.xml b/src/main/resources/db/scripts/release_0_0_1/changelog.xml index a86ce26..4ce4477 100644 --- a/src/main/resources/db/scripts/release_0_0_1/changelog.xml +++ b/src/main/resources/db/scripts/release_0_0_1/changelog.xml @@ -6,5 +6,6 @@ + \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/03_create_table_users_roles.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/03_create_table_users_roles.sql new file mode 100644 index 0000000..0e6a177 --- /dev/null +++ b/src/main/resources/db/scripts/release_0_0_1/scripts/03_create_table_users_roles.sql @@ -0,0 +1,19 @@ +-- liquibase formatted sql + +-- changeset L_DelOff:create_table_users_roles rollbackSplitStatements:true +-- comment: Создание сопоставляющей таблицы пользователь - роли + +CREATE TABLE users_roles +( + `user_id` VARCHAR(36) NOT NULL, + `role_id` VARCHAR(36) NOT NULL, + PRIMARY KEY (`user_id`,`role_id`), + KEY `role_id` (`role_id`), + CONSTRAINT `users_roles_ibfk_1` + FOREIGN KEY (`user_id`) REFERENCES `users` (`id`), + CONSTRAINT `users_roles_ibfk_2` + FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) +); + + +-- rollback DROP TABLE users_roles; \ No newline at end of file