package org.hsweb.web.bean.po.user; import org.hibernate.validator.constraints.Email; import org.hibernate.validator.constraints.NotEmpty; import org.hsweb.commons.MapUtils; import org.hsweb.commons.StringUtils; import org.hsweb.web.bean.po.GenericPo; import org.hsweb.web.bean.po.module.Module; import org.hsweb.web.bean.po.role.Role; import org.hsweb.web.bean.po.role.RoleModule; import org.hsweb.web.bean.po.role.UserRole; import javax.validation.constraints.NotNull; import java.util.*; import java.util.stream.Collectors; /** * 后台管理用户 * Created by generator */ public class User extends GenericPo<String> { private static final long serialVersionUID = 8910856253780046561L; //用户名 @NotNull @NotEmpty(message = "用户名不能为空") private String username; //密码 @NotNull @NotEmpty(message = "密码不能为空") private String password; //姓名 private String name; //邮箱 @Email(message = "邮箱格式错误") private String email; //联系电话 private String phone; //状态 private int status; //创建日期 private java.util.Date createDate; //修改日期 private java.util.Date updateDate; //用户角色绑定 private List<UserRole> userRoles; private Map<Module, Set<String>> roleInfo; /** * 判断此用户是否拥有对指定模块的访问权限 * * @param mId 模块id * @param actions 访问级别 * @return 是否能够访问 */ public boolean hasAccessModuleAction(String mId, String... actions) { if (!hasAccessModule(mId)) return false; if (actions == null || actions.length == 0) return hasAccessModule(mId); Set<String> lv = roleInfo.get(getModule(mId)); if (lv != null) for (String action : actions) { if (StringUtils.isNullOrEmpty(action)) return true; if (lv.contains(action)) return true; } return false; } public Module getModule(String mId) { for (Module module : getModules()) { if (module.getId().equals(mId)) return module; } return null; } public Module getModuleByUri(String uri) { for (Module module : getModules()) { if (uri.equals(module.getUri())) return module; } return null; } public Set<Module> getModules() { if (roleInfo == null) initRoleInfo(); return roleInfo.keySet(); } public Set<Module> getModulesByPid(String pid) { Set<Module> modules = getModules() .stream() .filter(module -> pid.equals(module.getParentId())) .collect(Collectors.toCollection(() -> new LinkedHashSet<>())); return modules; } public Set<Module> getModulesByPid(String pid, String level) { Set<Module> modules = getModules().stream() .filter(module -> module.getParentId().equals(pid) && hasAccessModuleAction(module.getId(), level)) .collect(Collectors.toCollection(() -> new LinkedHashSet<>())); return modules; } public boolean hasAccessRole(String rId) { if (getUserRoles() != null) return getUserRoles().stream().anyMatch(userRole -> userRole.getRoleId().equals(rId)); return false; } public boolean hasAccessModule(String mId) { if (roleInfo == null) initRoleInfo(); return roleInfo.keySet().stream().anyMatch(mdl -> mdl.getId().equals(mId)); } /** * 初始化用户的权限角色信息 */ public void initRoleInfo() { Map<Module, Set<String>> roleInfo_tmp = new LinkedHashMap<>(); if (getUserRoles() != null) for (UserRole userRole : getUserRoles()) { Role role = userRole.getRole(); if (role == null) continue; //角色可访问的路径 List<RoleModule> roleModules = role.getModules(); for (RoleModule roleModule : roleModules) { Module module = roleModule.getModule(); if (module == null || module.getStatus() != 1) continue; Set<String> actions = roleInfo_tmp.get(module); if (actions == null) roleInfo_tmp.put(module, new HashSet<>(roleModule.getActions())); else { actions.addAll(roleModule.getActions()); } } } //排序 roleInfo = MapUtils.sortMapByKey(roleInfo_tmp); } /** * 获取 用户名 * * @return String 用户名 */ public String getUsername() { if (this.username == null) return ""; return this.username; } /** * 设置 用户名 */ public void setUsername(String username) { this.username = username; } /** * 获取 密码 * * @return String 密码 */ public String getPassword() { if (this.password == null) return ""; return this.password; } /** * 设置 密码 */ public void setPassword(String password) { this.password = password; } /** * 获取 姓名 * * @return String 姓名 */ public String getName() { if (this.name == null) return ""; return this.name; } /** * 设置 姓名 */ public void setName(String name) { this.name = name; } /** * 获取 邮箱 * * @return String 邮箱 */ public String getEmail() { if (this.email == null) return ""; return this.email; } /** * 设置 邮箱 */ public void setEmail(String email) { this.email = email; } /** * 获取 联系电话 * * @return String 联系电话 */ public String getPhone() { if (this.phone == null) return ""; return this.phone; } /** * 设置 联系电话 */ public void setPhone(String phone) { this.phone = phone; } /** * 获取 状态 * * @return boolean 状态 */ public int getStatus() { return this.status; } /** * 设置 状态 */ public void setStatus(int status) { this.status = status; } /** * 获取 创建日期 * * @return java.util.Date 创建日期 */ public java.util.Date getCreateDate() { return this.createDate; } /** * 设置 创建日期 */ public void setCreateDate(java.util.Date createDate) { this.createDate = createDate; } /** * 获取 修改日期 * * @return java.util.Date 修改日期 */ public java.util.Date getUpdateDate() { return this.updateDate; } /** * 设置 修改日期 */ public void setUpdateDate(java.util.Date updateDate) { this.updateDate = updateDate; } public List<UserRole> getUserRoles() { return userRoles; } public void setUserRoles(List<UserRole> userRoles) { this.userRoles = userRoles; } public Map<Module, Set<String>> getRoleInfo() { return roleInfo; } public void setRoleInfo(Map<Module, Set<String>> roleInfo) { this.roleInfo = roleInfo; } public interface Property extends GenericPo.Property { /** * @see User#username */ String username = "username"; /** * @see User#password */ String password = "password"; /** * @see User#name */ String name = "name"; /** * @see User#email */ String email = "email"; /** * @see User#phone */ String phone = "phone"; /** * @see User#status */ String status = "status"; /** * @see User#createDate */ String createDate = "createDate"; /** * @see User#updateDate */ String updateDate = "updateDate"; /** * @see User#userRoles */ String userRoles = "userRoles"; /** * @see User#roleInfo */ String roleInfo = "roleInfo"; /** * @see User#getModules() */ String modules = "modules"; } }