package org.dayatang.security.domain;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import java.util.Date;
/**
* 权限,是许可Permission与角色Role的共同基类。可以将Authority授予给参与者Actor(是用户User和用户组UserGroup的共同基类)
* Created by yyang on 15/1/19.
*/
@Entity
@Table(name = "security_authorities")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Authority extends AbstractEntity {
private String name;
private String remark;
protected Authority() {
}
public Authority(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
@Override
public String[] businessKeys() {
return new String[] {"name"};
}
/**
* 失效Permission,同时失效与其有关的授权信息
* @param date 失效日期
*/
@Override
public void disable(Date date) {
for (Authorization authorization : Authorization.findByAuthority(this)) {
authorization.disable(date);
}
super.disable(date);
}
/**
* 删除权限,同时删除与其有关的授权信息
*/
@Override
public void remove() {
for (Authorization authorization : Authorization.findByAuthority(this)) {
authorization.remove();
}
super.remove();
}
/**
* 根据名字获取某种类型的Authority
* @param authorityClass Authority的类
* @param name 名称
* @param <T> Authority的类型
* @return 如果找到,返回该Authority,否则返回null
*/
public static <T extends Authority> T getByName(Class<T> authorityClass, String name) {
return AbstractEntity.getByProperty(authorityClass, "name", name);
}
}