UserDetailsEntity.java
package sk.iway.iwcm.components.users.userdetail;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityListeners;
import javax.persistence.PrePersist;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;
import sk.iway.iwcm.common.CloudToolsForCore;
import sk.iway.iwcm.system.adminlog.EntityListenersType;
import sk.iway.iwcm.system.datatable.DataTableColumnType;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumn;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumnEditor;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumnEditorAttr;
import sk.iway.iwcm.system.datatable.annotations.DataTableColumnNested;
/**
* Udaje pouzivatela
* POZOR: z databazy necita/nezapisuje password a salt, to sa zapisuje separatnym SQL prikazom
* je to tak kvoli bezpecnosti, aby sa nahodou nedostali hash hesiel/salt na FE
*/
@Entity
@Table(name = "users")
@Getter
@Setter
@EntityListeners(sk.iway.iwcm.system.adminlog.AuditEntityListener.class)
@EntityListenersType(sk.iway.iwcm.Adminlog.TYPE_USER_EDIT)
public class UserDetailsEntity extends UserDetailsBasic {
public UserDetailsEntity(){
//
}
@PrePersist
public void prePersist() {
if (this.getDomainId()==null) {
if (UserDetailsService.isUsersSplitByDomain()) {
//in multiweb we must set current domainId
this.setDomainId(CloudToolsForCore.getDomainId());
} else {
this.setDomainId(1);
}
}
}
/*PERSONAL INFO - Access*/
@NotBlank
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title = "[[#{components.users.email}]]",
tab = "personalInfo",
sortAfter = "editorFields.login"
)
private String email;
@DataTableColumn(
inputType = DataTableColumnType.BOOLEAN,
title = "[[#{components.users.authorized}]]",
tab = "personalInfo",
editor = {
@DataTableColumnEditor(
attr = {
@DataTableColumnEditorAttr(key = "data-dt-field-headline", value = "useredit.access")
}
)
},
visible = false,
sortAfter = "photo"
)
private Boolean authorized;
@Column(name = "allow_login_start")
@Temporal(TemporalType.TIMESTAMP)
@DataTableColumn(
inputType = DataTableColumnType.DATE,
title = "[[#{user.admin.allowLoginStart}]]",
tab = "personalInfo",
visible = false,
sortAfter = "authorized"
)
private Date allowLoginStart;
@Column(name = "allow_login_end")
@Temporal(TemporalType.TIMESTAMP)
@DataTableColumn(
inputType = DataTableColumnType.DATE,
title = "[[#{user.admin.allowLoginEnd}]]",
tab = "personalInfo",
visible = false,
sortAfter = "allowLoginStart"
)
private Date allowLoginEnd;
/*FREE ITEMS - Fre usable items*/
@Column(name = "field_a")
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title = "[[#{user.field_a}]]",
tab = "freeItems",
editor = {
@DataTableColumnEditor(
attr = {
@DataTableColumnEditorAttr(key = "data-dt-field-headline", value = "components.users.free_usabel_items")
}
)
},
visible = false
)
private String fieldA;
@Column(name = "field_b")
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title = "[[#{user.field_b}]]",
tab = "freeItems",
visible = false
)
private String fieldB;
@Column(name = "field_c")
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title = "[[#{user.field_c}]]",
tab = "freeItems",
visible = false
)
private String fieldC;
@Column(name = "field_d")
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title = "[[#{user.field_d}]]",
tab = "freeItems",
visible = false
)
private String fieldD;
@Column(name = "field_e")
@DataTableColumn(
inputType = DataTableColumnType.TEXT,
title = "[[#{user.field_e}]]",
tab = "freeItems",
visible = false
)
private String fieldE;
/*RIGHTS*/
@Column(name = "is_admin")
@DataTableColumn(
inputType = DataTableColumnType.BOOLEAN,
title = "user.admin.admin",
tab = "rightsTab",
editor = {
@DataTableColumnEditor(
label = "components.users.admin",
attr = {
@DataTableColumnEditorAttr(key = "data-dt-field-headline", value = "components.users.admin_section_entry"),
@DataTableColumnEditorAttr(key = "data-dt-field-hr", value = "after")
}
)
},
visible = true,
sortAfter = "editorFields.emails"
)
private Boolean admin;
@Transient
private String userGroupsNames;
//ciarkou oddeleny zoznam
@Column(name = "user_groups")
private String userGroupsIds;
@Column(name = "editable_groups")
private String editableGroups;
@Column(name = "editable_pages")
private String editablePages;
@Column(name = "writable_folders")
private String writableFolders;
@Column(name = "reg_date")
@Temporal(TemporalType.TIMESTAMP)
@DataTableColumn(
title = "components.forum.regdate",
inputType = DataTableColumnType.DATETIME,
visible = false,
tab = "personalInfo",
sortAfter = "editorFields.allowWeakPassword",
className = "hide-on-create",
editor = {
@DataTableColumnEditor(
attr = {
@DataTableColumnEditorAttr(key = "disabled", value = "disabled")
}
)
}
)
private Date regDate;
//vo WJ8 sa settuje v triede UsersDB na riadku 88
@Transient
private String lastLogon;
@Column(name = "last_logon")
@Temporal(TemporalType.TIMESTAMP)
@DataTableColumn(
title = "admin.users.lastlogon",
inputType = DataTableColumnType.DATETIME,
tab = "personalInfo",
sortAfter = "regDate",
className = "hide-on-create",
editor = {
@DataTableColumnEditor(
attr = {
@DataTableColumnEditorAttr(key = "disabled", value = "disabled")
}
)
}
)
private Date lastLogonAsDate;
// private String modulePerms;
// private String disabledItems;
@Column(name = "forum_rank")
@DataTableColumn(
inputType = DataTableColumnType.HIDDEN,
hidden = true
)
private Integer forumRank;
@Column(name = "rating_rank")
@DataTableColumn(
inputType = DataTableColumnType.HIDDEN,
hidden = true
)
private Integer ratingRank;
// private String authorizeHash;
@Column(name = "parent_id")
@DataTableColumn(
inputType = DataTableColumnType.NUMBER,
hidden = true,
hiddenEditor = true,
visible = false
)
private Integer parentId;
@Transient //toto nechceme citat z DB a ani prenasat na FE
@JsonIgnore
private String passwordSalt;
@Column(name = "domain_id")
private Integer domainId;
//@Column(name = "mobile_device")
//private String mobileDevice;
//@Column(name = "api_key")
@DataTableColumn(
inputType = DataTableColumnType.PASSWORD,
title = "[[#{components.user.apiKey}]]",
tab = "personalInfo",
hidden = true
)
@Transient //toto nechceme citat z DB
private String apiKey;
@Transient
@DataTableColumnNested
@Valid
private UserDetailsEditorFields editorFields = null;
}