Создание простой модели пользователя / группы с разрешениями в Hibernate (аннотации) - PullRequest
1 голос
/ 04 августа 2011

Скорее всего, это очень простой вопрос, но тем не менее:

В сущности, у сущности User есть Id и перечисление привилегий. У группы есть идентификатор и имя.

Интересно, как смоделировать отношения, в которых пользователь может находиться в нескольких группах, имеющих разные уровни привилегий в разных группах. Конечно, в каждой группе может быть несколько участников.

Как мне идиоматически решать эту проблему с помощью Hibernate? Добавление какого-либо поля членства для пользователя? Поле членства в группе? И то и другое? Создание нового класса для него? Какие аннотации необходимы, чтобы соединить эти вещи вместе?

1 Ответ

1 голос
/ 04 августа 2011

Я использовал следующую архитектуру

Класс UserEntity

@Entity
@Table(name = "user")
public class UserEntity implements Serializable {

    private Long user_id;
    private String username;
    private String password;

    public UserEntity() {

    }

    public UserEntity(String name, String passwd) {
        username = name;
        password = passwd;
    }

    @Column(name = "password", nullable = false)
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getUser_id() {
        return user_id;
    }

    public void setUser_id(Long user_id) {
        this.user_id = user_id;
    }

    @Column(name = "username", nullable = false)
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}

Класс AuthorityEntity

@Entity
@Table(name = "authority_role")
public class AuthorityEntity implements Serializable {

    private Integer id;
    private String authority;
    private List<UserEntity> people;

    public AuthorityEntity() {
    }

    public AuthorityEntity(String authString) {
        authority = authString;
    }

    @Column(name = "authority", nullable = false)
    public String getAuthority() {
        return authority;
    }

    public void setAuthority(String authority) {
        this.authority = authority;
    }

    @Id
    @Column(name = "id")
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @ManyToMany(targetEntity = UserEntity.class,
    cascade = {CascadeType.PERSIST, CascadeType.MERGE})
    @JoinTable(name = "authority_role_people",
    joinColumns =
    @JoinColumn(name = "authority_role_id"),
    inverseJoinColumns =
    @JoinColumn(name = "user_id"))
    public List<UserEntity> getPeople() {
        return people;
    }

    public void setPeople(List<UserEntity> people) {
        this.people = people;
    }
}

Фактически - так реализован плагин безопасности Spring.В вашем случае вы можете реализовать эту архитектуру, которая будет более полезной для вас.

...