Created
June 30, 2017 18:45
-
-
Save cleydyr/bfd7f875d095dcfd625b39786f88f181 to your computer and use it in GitHub Desktop.
UsersAdminImpl.hasUpdateFieldPermission
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Override | |
public boolean hasUpdateFieldPermission( | |
PermissionChecker permissionChecker, User updatingUser, | |
User updatedUser, String field) | |
throws PortalException, SystemException { | |
// Condição de guarda. Não sei em que caso de uso updatedUser é null. | |
if (updatedUser == null) { | |
return true; | |
} | |
// Condição de guarda. updatingUser tem que ser não-nulo. | |
if (updatingUser == null) { | |
long updatingUserId = PrincipalThreadLocal.getUserId(); | |
if (updatingUserId > 0) { | |
updatingUser = UserLocalServiceUtil.fetchUserById( | |
updatingUserId); | |
} | |
} | |
// Eu não estou atualizando meus próprios dados, mas de outro usuário, então considere permissões do usuário. | |
// Se tiver, pode editar tudo. | |
if ((updatingUser != null) && !updatingUser.equals(updatedUser) && | |
UserPermissionUtil.contains( | |
permissionChecker, updatingUser.getUserId(), | |
ActionKeys.UPDATE_USER)) { | |
return true; | |
} | |
// user-with-mx = usuário do mesmo domínio da instância | |
// user-without-mx = usuário de domínio diferente do da instância | |
// Por padrão, todo mundo pode editar tudo. Precisa tirar os valores da propriedade field.editable.user.types | |
// Propriedade comentada é o mesmo que ignorar o for | |
for (String userType : PropsValues.FIELD_EDITABLE_USER_TYPES) { | |
if (userType.equals("user-with-mx") && updatedUser.hasCompanyMx()) { | |
return true; | |
} | |
if (userType.equals("user-without-mx") && | |
!updatedUser.hasCompanyMx()) { | |
return true; | |
} | |
} | |
// Pode editar tudo se tiver um dos papéis em field.editable.roles | |
// Propriedade comentada é o mesmo que ignorar o for | |
for (String roleName : PropsValues.FIELD_EDITABLE_ROLES) { | |
Role role = RoleLocalServiceUtil.fetchRole( | |
updatedUser.getCompanyId(), roleName); | |
if ((role != null) && | |
RoleLocalServiceUtil.hasUserRole( | |
updatedUser.getUserId(), role.getRoleId())) { | |
return true; | |
} | |
} | |
// Pode editar se o e-mail do usuário *editado* terminar com um dos domínios em field.editable.domains | |
// Propriedade comentada é o mesmo que ignorar o for | |
String emailAddress = updatedUser.getEmailAddress(); | |
for (String domainName : PropsValues.FIELD_EDITABLE_DOMAINS) { | |
if (emailAddress.endsWith(domainName)) { | |
return true; | |
} | |
} | |
// Pode editar determinados campos do usuário (ficam entre colchetes no portal.properties) | |
// se o e-mail do usuário editado tiver um determinado domínio definido na propriedade field.editable.domains[campo] | |
// ou se o valor da propriedade for * | |
// Propriedade comentada é o mesmo que ignorar o for | |
String[] fieldEditableDomainNames = PropsUtil.getArray( | |
PropsKeys.FIELD_EDITABLE_DOMAINS, new Filter(field)); | |
for (String domainName : fieldEditableDomainNames) { | |
if (domainName.equals(StringPool.STAR) || | |
emailAddress.endsWith(domainName)) { | |
return true; | |
} | |
} | |
return false; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment