#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.service.account;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import ${package}.dao.account.AuthorityDao;
import ${package}.dao.account.RoleDao;
import ${package}.dao.account.UserDao;
import ${package}.entity.account.Authority;
import ${package}.entity.account.Role;
import ${package}.entity.account.User;
import ${package}.service.ServiceException;
import org.springside.modules.orm.Page;
import org.springside.modules.orm.PropertyFilter;
import org.springside.modules.security.springsecurity.SpringSecurityUtils;
/**
* 安全相关实体的管理类, 包括用户,角色,资源与授权类.
*
* @author calvin
*/
//Spring Bean的标识.
@Component
//默认将类中的所有函数纳入事务管理.
@Transactional
public class AccountManager {
private static Logger logger = LoggerFactory.getLogger(AccountManager.class);
private UserDao userDao;
private RoleDao roleDao;
private AuthorityDao authorityDao;
//-- User Manager --//
@Transactional(readOnly = true)
public User getUser(Long id) {
return userDao.get(id);
}
public void saveUser(User entity) {
userDao.save(entity);
}
/**
* 删除用户,如果尝试删除超级管理员将抛出异常.
*/
public void deleteUser(Long id) {
if (isSupervisor(id)) {
logger.warn("操作员{}尝试删除超级管理员用户", SpringSecurityUtils.getCurrentUserName());
throw new ServiceException("不能删除超级管理员用户");
}
userDao.delete(id);
}
/**
* 判断是否超级管理员.
*/
private boolean isSupervisor(Long id) {
return id == 1;
}
/**
* 使用属性过滤条件查询用户.
*/
@Transactional(readOnly = true)
public Page<User> searchUser(final Page<User> page, final List<PropertyFilter> filters) {
return userDao.findPage(page, filters);
}
@Transactional(readOnly = true)
public User findUserByLoginName(String loginName) {
return userDao.findUniqueBy("loginName", loginName);
}
/**
* 检查用户名是否唯一.
*
* @return loginName在数据库中唯一或等于oldLoginName时返回true.
*/
@Transactional(readOnly = true)
public boolean isLoginNameUnique(String newLoginName, String oldLoginName) {
return userDao.isPropertyUnique("loginName", newLoginName, oldLoginName);
}
//-- Role Manager --//
@Transactional(readOnly = true)
public Role getRole(Long id) {
return roleDao.get(id);
}
@Transactional(readOnly = true)
public List<Role> getAllRole() {
return roleDao.getAll("id", true);
}
public void saveRole(Role entity) {
roleDao.save(entity);
}
public void deleteRole(Long id) {
roleDao.delete(id);
}
//-- Authority Manager --//
@Transactional(readOnly = true)
public List<Authority> getAllAuthority() {
return authorityDao.getAll();
}
@Autowired
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Autowired
public void setRoleDao(RoleDao roleDao) {
this.roleDao = roleDao;
}
@Autowired
public void setAuthorityDao(AuthorityDao authorityDao) {
this.authorityDao = authorityDao;
}
}