Skip to content

Instantly share code, notes, and snippets.

@cleydyr
Created June 30, 2017 18:45
Show Gist options
  • Save cleydyr/bfd7f875d095dcfd625b39786f88f181 to your computer and use it in GitHub Desktop.
Save cleydyr/bfd7f875d095dcfd625b39786f88f181 to your computer and use it in GitHub Desktop.
UsersAdminImpl.hasUpdateFieldPermission
@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