package org.dayatang.security.domain; import javax.persistence.*; import java.util.*; /** * 用户角色。角色是许可Permission的集合。如果一批Permission总是作为一个整体授予某个 * 或某些Actor,则为这批Permission定义一个Role并命名之,然后可以将这个role授予Actor。 * Created by yyang on 15/1/13. */ @Entity @DiscriminatorValue("ROLE") public class Role extends Authority { @ManyToMany @JoinTable(name = "security_role_permission", joinColumns = @JoinColumn(name = "role_id"), inverseJoinColumns = @JoinColumn(name = "permission_id")) private Set<Permission> permissions = new HashSet<Permission>(); protected Role() { } public Role(String name) { super(name); } public Role(String name, Set<Permission> permissions) { super(name); this.permissions = permissions; } public Set<Permission> getPermissions() { return permissions; } public void setPermissions(Set<Permission> permissions) { this.permissions = permissions; } public void setPermissions(Permission... permissions) { this.permissions = new HashSet<Permission>(Arrays.asList(permissions)); } public boolean hasPermission(Permission permission) { return getPermissions().contains(permission); } public static Role get(String id) { return get(Role.class, id); } public static Role getByName(String name) { return getByName(Role.class, name); } public static List<Role> list() { return findAll(Role.class); } public static Role create(String name) { Role role = new Role(name); role.save(); return role; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof Role)) { return false; } Role that = (Role) o; return Objects.equals(getName(), that.getName()); } @Override public int hashCode() { return Objects.hash(getName()); } @Override public String toString() { return "Role{" + getName() + "}"; } }