/** * Project: dubbo.registry-1.1.0-SNAPSHOT * * File Created at 2010-4-15 * $Id: User.java 181192 2012-06-21 05:05:47Z tony.chenl $ * * Copyright 2008 Alibaba.com Croporation Limited. * All rights reserved. * * This software is the confidential and proprietary information of * Alibaba Company. ("Confidential Information"). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Alibaba.com. */ package com.alibaba.dubbo.registry.common.domain; import java.util.Arrays; import java.util.List; import com.alibaba.dubbo.registry.common.route.ParseUtils; /** * User * * @author william.liangf */ public class User extends Entity { private static final long serialVersionUID = 7330539198581235339L; public static final String REALM = "dubbo"; public static final String ROOT = "R"; public static final String ADMINISTRATOR = "A"; public static final String MANAGER = "M"; public static final String GUEST = "G"; public static final String ANONYMOUS = "anonymous"; public static final String LEGACY = "legacy"; private String username; private String password; private String role; private String creator; private boolean enabled; private String name; private String department; private String email; private String phone; private String alitalk; private String locale; private String servicePrivilege; private List<String> servicePrivileges; public User() { } public User(Long id) { super(id); } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } public String getCreator() { return creator; } public void setCreator(String creator) { this.creator = creator; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public boolean hasServicePrivilege(String[] services) { if (services == null || services.length == 0) throw new IllegalArgumentException("services == null"); for (String service : services) { boolean r = hasServicePrivilege(service); if (! r) return false; } return true; } public static boolean isValidPrivilege(String servicePrivilege) { if (servicePrivilege == null || servicePrivilege.length() == 0) { return true; } String[] privileges = servicePrivilege.trim().split("\\s*,\\s*"); for (String privilege : privileges) { if(privilege.endsWith("*")){ privilege = privilege.substring(0, privilege.length() - 1); } if (privilege.indexOf('*') > -1) { return false; } } return true; } public boolean canGrantPrivilege(String servicePrivilege) { if (servicePrivilege == null || servicePrivilege.length() == 0) { return true; } if (servicePrivileges == null || servicePrivileges.size() == 0) { return false; } String[] privileges = servicePrivilege.trim().split("\\s*,\\s*"); for (String privilege : privileges) { boolean hasPrivilege = false; for (String ownPrivilege : servicePrivileges) { if (matchPrivilege(ownPrivilege, privilege)) { hasPrivilege = true; } } if (! hasPrivilege) { return false; } } return true; } private boolean matchPrivilege(String ownPrivilege, String privilege) { if ("*".equals(ownPrivilege) || ownPrivilege.equals(privilege)) { return true; } if(privilege.endsWith("*")){ if(! ownPrivilege.endsWith("*")){ return false; } privilege = privilege.substring(0, privilege.length() - 1); ownPrivilege = ownPrivilege.substring(0, ownPrivilege.length() - 1); return privilege.startsWith(ownPrivilege); } else { if(ownPrivilege.endsWith("*")){ ownPrivilege = ownPrivilege.substring(0, ownPrivilege.length() - 1); } return privilege.startsWith(ownPrivilege); } } public boolean hasServicePrivilege(String service) { if (service == null || service.length() == 0) return false; if (role == null || GUEST.equalsIgnoreCase(role)) { return false; } if(ROOT.equalsIgnoreCase(role)) { return true; } if (servicePrivileges != null && servicePrivileges.size() > 0) { for (String privilege : servicePrivileges) { boolean ok = ParseUtils.isMatchGlobPattern(privilege,service); if (ok) { return true; } } } return false; } public String getServicePrivilege() { return servicePrivilege; } public void setServicePrivilege(String servicePrivilege) { this.servicePrivilege = servicePrivilege; if (servicePrivilege != null && servicePrivilege.length() > 0) { servicePrivileges = Arrays.asList(servicePrivilege.trim().split("\\s*,\\s*")); } } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getAlitalk() { return alitalk; } public void setAlitalk(String alitalk) { this.alitalk = alitalk; } public boolean isEnabled() { return enabled; } public void setEnabled(boolean enabled) { this.enabled = enabled; } public String getLocale() { return locale; } public void setLocale(String locale) { this.locale = locale; } }