package org.dayatang.security.domain;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import java.util.Set;
/**
* 授权范围,指定用户或用户组的授权范围,例如用户张三拥有招聘权限,但仅限于广州分公司的招聘,“广州分公司”就是授权范围
* Created by yyang on 15/1/23.
*/
@Entity
@Table(name = "security_authority_scopes")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class AuthorizationScope extends AbstractEntity {
private String name;
protected AuthorizationScope() {
}
public AuthorizationScope(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String[] businessKeys() {
return new String[] {"name"};
}
/**
* 获取所属的上级范围
* @return 如果找到,返回之,否则返回null
*/
public abstract AuthorizationScope getParent();
/**
* 获取下属范围
* @return 下属范围。
*/
public abstract Set<? extends AuthorizationScope> getChildren();
/**
* 是否包含指定的范围
* @param scope 授权范围
* @return 如果包含,返回true;否则返回false
*/
public boolean contains(AuthorizationScope scope) {
if (scope == null) {
return false;
}
AuthorizationScope parent = scope.getParent();
while (parent != null) {
if (parent.equals(this)) {
return true;
}
parent = parent.getParent();
}
return false;
}
}