package org.dayatang.security.domain; import javax.persistence.*; import java.util.Date; import java.util.HashSet; import java.util.Set; /** * 缺省授权范围。在数据库中记录范围的包含与被包含关系。 * Created by yyang on 15/8/16. */ @Entity @DiscriminatorValue("DEFAULT") public class DefaultAuthorizationScope extends AuthorizationScope { @ManyToOne @JoinTable(name = "security_authorization_scope_relationship", joinColumns = @JoinColumn(name = "parent_id"), inverseJoinColumns = @JoinColumn(name = "child_id")) private DefaultAuthorizationScope parent; @OneToMany(mappedBy = "parent") private Set<DefaultAuthorizationScope> children = new HashSet<DefaultAuthorizationScope>(); public DefaultAuthorizationScope() { } public DefaultAuthorizationScope(String name) { super(name); } @Override public AuthorizationScope getParent() { return parent; } @Override public Set<DefaultAuthorizationScope> getChildren() { return children; } public void addChildren(DefaultAuthorizationScope... scopes) { for (DefaultAuthorizationScope scope : scopes) { if (contains(scope)) { continue; } scope.parent = this; scope.save(); children.add(scope); } } public void removeChildren(DefaultAuthorizationScope... scopes) { Date now = new Date(); for (DefaultAuthorizationScope scope : scopes) { if (!children.contains(scope)) { continue; } scope.remove(); children.remove(scope); } } public DefaultAuthorizationScope createChild(String name) { DefaultAuthorizationScope child = new DefaultAuthorizationScope(name); addChildren(child); return child; } public static DefaultAuthorizationScope create(String scopeName) { DefaultAuthorizationScope scope = new DefaultAuthorizationScope(scopeName); scope.save(); return scope; } }