/*
* Copyright (c) 2008 TouK.pl
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package pl.touk.wonderfulsecurity.beans;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Set;
import java.util.HashSet;
import java.util.ArrayList;
import java.util.List;
/**
* Model object that represents permission.
*
* @author Szymon Doroz - sdr@touk.pl
*/
@Entity
@Table(name="WSEC_PERMISSION",
uniqueConstraints = {@UniqueConstraint(columnNames = {"name"})})
public class WsecPermission implements Serializable {
public static enum SystemPermissions{
WSEC_USERS_TAB,
WSEC_PERMISSIONS_TAB,
WSEC_ROLES_TAB,
WSEC_GROUPS_TAB,
WSEC_ADD_USR_BTN,
WSEC_ADD_ROLE_BTN,
WSEC_ADD_GRP_BTN,
WSEC_LOGIN_CHANGE,
WSEC_GRP_NAME_CHANGE,
WSEC_ROLE_NAME_CHANGE,
WSEC_PASSWORD_CHANGE,
WSEC_CHNG_GRP_4USER,
WSEC_CHNG_ROLE_4USER,
WSEC_CHNG_ROLE_4GRP,
WSEC_CHNG_PERM_4USER,
WSEC_CHNG_PERM_4ROLE,
WSEC_CHNG_PERM_4GRP,
WSEC_SAVE_USR_DTLS,
WSEC_SAVE_ROLE_DTLS,
WSEC_SAVE_GRP_DTLS,
WSEC_ALLOW_EMPTY_PASSWORD
}
public static List<WsecPermission> SYSTEM_PERMISSIONS_COLLECTION = new ArrayList();
public static WsecPermission WSEC_USERS_TAB = new WsecPermission(SystemPermissions.WSEC_USERS_TAB.name(), "Uprawnienie do oglądania zakładki Użytkownicy");
public static WsecPermission WSEC_PERMISSIONS_TAB = new WsecPermission(SystemPermissions.WSEC_PERMISSIONS_TAB.name(), "Uprawnienie do oglądania zakładki Uprawnienia");
public static WsecPermission WSEC_ROLES_TAB = new WsecPermission(SystemPermissions.WSEC_ROLES_TAB.name(), "Uprawnienie do oglądania zakładki Role");
public static WsecPermission WSEC_GROUPS_TAB = new WsecPermission(SystemPermissions.WSEC_GROUPS_TAB.name(), "Uprawnienie do oglądania zakładki Grupy");
public static WsecPermission WSEC_ADD_USR_BTN = new WsecPermission(SystemPermissions.WSEC_ADD_USR_BTN.name(), "Uprawnienie do przycisku Dodaj nowego użytkownika");
public static WsecPermission WSEC_ADD_ROLE_BTN = new WsecPermission(SystemPermissions.WSEC_ADD_ROLE_BTN.name(), "Uprawnienie do przycisku Dodaj nową rolę");
public static WsecPermission WSEC_ADD_GRP_BTN = new WsecPermission(SystemPermissions.WSEC_ADD_GRP_BTN.name(), "Uprawnienie do przycisku Dodaj nową grupę");
public static WsecPermission WSEC_LOGIN_CHANGE = new WsecPermission(SystemPermissions.WSEC_LOGIN_CHANGE.name(), "Uprawnienie do modyfikacji pola login");
public static WsecPermission WSEC_GRP_NAME_CHANGE = new WsecPermission(SystemPermissions.WSEC_GRP_NAME_CHANGE.name(), "Uprawnienie do modyfikacji pola Nazwa dla Grupy użytkowników");
public static WsecPermission WSEC_ROLE_NAME_CHANGE = new WsecPermission(SystemPermissions.WSEC_ROLE_NAME_CHANGE.name(), "Uprawnienie do modyfikacji pola Nazwa dla roli");
public static WsecPermission WSEC_PASSWORD_CHANGE = new WsecPermission(SystemPermissions.WSEC_PASSWORD_CHANGE.name(), "Uprawnienie do modyfikacji pola hasło");
public static WsecPermission WSEC_CHNG_GRP_4USER = new WsecPermission(SystemPermissions.WSEC_CHNG_GRP_4USER.name(), "Uprawnienie do przycisku zapisz zmiany w grupie dla zakładki Edycja użytkownika");
public static WsecPermission WSEC_CHNG_ROLE_4USER = new WsecPermission(SystemPermissions.WSEC_CHNG_ROLE_4USER.name(), "Uprawnienie do przycisku zapisz zmiany w rolach dla zakładki Edycja użytkownika");
public static WsecPermission WSEC_CHNG_ROLE_4GRP = new WsecPermission(SystemPermissions.WSEC_CHNG_ROLE_4GRP.name(), "Uprawnienie do przycisku zapisz zmiany w rolach dla zakładki Edycja grupy");
public static WsecPermission WSEC_CHNG_PERM_4USER = new WsecPermission(SystemPermissions.WSEC_CHNG_PERM_4USER.name(), "Uprawnienie do przycisku zapisz zmiany w uprawnieniach dla zakładki Edycja użytkownika");
public static WsecPermission WSEC_CHNG_PERM_4ROLE = new WsecPermission(SystemPermissions.WSEC_CHNG_PERM_4ROLE.name(), "Uprawnienie do przycisku zapisz zmiany w uprawnieniach dla zakładki Edycja roli");
public static WsecPermission WSEC_CHNG_PERM_4GRP = new WsecPermission(SystemPermissions.WSEC_CHNG_PERM_4GRP.name(), "Uprawnienie do przycisku zapisz zmiany w uprawnieniach dla zakładki Edycja grupy");
public static WsecPermission WSEC_SAVE_USR_DTLS = new WsecPermission(SystemPermissions.WSEC_SAVE_USR_DTLS.name(), "Uprawnienie do przycisku zapisz dla danych personalnych na zakładce Edycja użytkownika ...");
public static WsecPermission WSEC_SAVE_ROLE_DTLS = new WsecPermission(SystemPermissions.WSEC_SAVE_ROLE_DTLS.name(), "Uprawnienie do przycisku zapisz dla danych szczegółowych na zakładce Edycja roli ...");
public static WsecPermission WSEC_SAVE_GRP_DTLS = new WsecPermission(SystemPermissions.WSEC_SAVE_GRP_DTLS.name(), "Uprawnienie do przycisku zapisz dla danych szczegółowych grupy na zakładce Edycja grupy ...");
public static WsecPermission WSEC_ALLOW_EMPTY_PASSWORD = new WsecPermission(SystemPermissions.WSEC_ALLOW_EMPTY_PASSWORD.name(), "Uprawnienie dające możliwość dodawania użytkownika z pustym hasłem");
static {
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_USERS_TAB);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_PERMISSIONS_TAB);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_ROLES_TAB);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_GROUPS_TAB);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_ADD_USR_BTN);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_ADD_ROLE_BTN);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_ADD_GRP_BTN);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_LOGIN_CHANGE);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_GRP_NAME_CHANGE);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_ROLE_NAME_CHANGE);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_PASSWORD_CHANGE);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_CHNG_GRP_4USER);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_CHNG_ROLE_4USER);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_CHNG_ROLE_4GRP);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_CHNG_PERM_4USER);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_CHNG_PERM_4ROLE);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_CHNG_PERM_4GRP);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_SAVE_USR_DTLS);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_SAVE_ROLE_DTLS);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_SAVE_GRP_DTLS);
SYSTEM_PERMISSIONS_COLLECTION.add(WSEC_ALLOW_EMPTY_PASSWORD);
}
// ------------------------------ FIELDS ------------------------------
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
protected String name;
protected String description;
@ManyToMany(mappedBy = "permissions")
protected Set<WsecRole> receivingRoles = new HashSet<WsecRole>();
@ManyToMany(mappedBy = "permissions")
protected Set<WsecGroup> receivingGroups = new HashSet<WsecGroup>();
@ManyToMany(mappedBy = "permissions")
protected Set<WsecUser> receivingUsers = new HashSet<WsecUser>();
/**
* This field is used, to determine exclusion of permissions.
*
* If A exludes with B (hence B implicitly exludes with A), we only need to add B to A.exludes
* Note that exlusion doesn't have to be declared symmetric, but it will work as if it were.
*
*/
@OneToMany
@JoinColumn(name = "EXCLUDES_ID")
protected Set<WsecPermission> excludes = new HashSet<WsecPermission>();
// --------------------------- CONSTRUCTORS ---------------------------
public WsecPermission() {
}
public WsecPermission(String name) {
this.name = name;
}
public WsecPermission(String name, String description) {
this.name = name;
this.description = description;
}
public WsecPermission(WsecPermission perm) {
this.id = perm.id;
this.name = perm.name;
this.description = perm.description;
}
// --------------------- GETTER / SETTER METHODS ---------------------
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Set<WsecPermission> getExcludes() {
return excludes;
}
public void setExcludes(Set<WsecPermission> excludes) {
this.excludes = excludes;
}
public Set<WsecRole> getReceivingRoles() {
return receivingRoles;
}
public void setReceivingRoles(Set<WsecRole> receivingRoles) {
this.receivingRoles = receivingRoles;
}
public Set<WsecGroup> getReceivingGroups() {
return receivingGroups;
}
public void setReceivingGroups(Set<WsecGroup> receivingGroups) {
this.receivingGroups = receivingGroups;
}
public Set<WsecUser> getReceivingUsers() {
return receivingUsers;
}
public void setReceivingUsers(Set<WsecUser> receivingUsers) {
this.receivingUsers = receivingUsers;
}
// ------------------------ CANONICAL METHODS ------------------------
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof WsecPermission)) return false;
WsecPermission that = (WsecPermission) o;
if (!name.equals(that.name)) return false;
return true;
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + (name==null ? 0 : name.hashCode());
return result;
}
public String toString() {
return new StringBuilder().append("id: ").append(id).append("\nName: ").append(name).toString();
}
}