/**
* UserRole
* Copyright 20.06.2016 by Robert Mader, @treba123
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program in the file lgpl21.txt
* If not, see <http://www.gnu.org/licenses/>.
*/
package org.loklak.server;
import org.json.JSONObject;
import org.loklak.tools.storage.JSONObjectWithDefault;
import javax.annotation.Nonnull;
public class UserRole {
private String name;
private JSONObject json;
private JSONObject permissions;
private UserRole parent;
private BaseUserRole baseUserRole;
/**
*
* @param name the key in the sourceObject
* @param baseUserRole
* @param parent if a parent user role exists
* @param sourceObject JSONObject in some storage file. Write changes here if exist
*/
public UserRole(@Nonnull String name, @Nonnull BaseUserRole baseUserRole, UserRole parent, JSONObject sourceObject){
this.baseUserRole = baseUserRole;
this.name = name;
if(sourceObject != null) json = sourceObject;
else json = new JSONObject();
if(!json.has("display-name")) json.put("display-name", name);
if(!json.has("permissions")) json.put("permissions", new JSONObject());
permissions = json.getJSONObject("permissions");
setParent(parent);
}
public BaseUserRole getBaseUserRole(){
return this.baseUserRole;
}
public String getName(){
return this.name;
}
public String getDisplayName() { return json.getString("display-name"); }
public void setDisplayName(String name) { json.put("display-name", name); }
public UserRole getParent(){
return parent;
}
public void setParent(UserRole parent){
if(parent == null){
json.put("parent", baseUserRole.name());
}
else{
json.put("parent", parent.getName());
}
this.parent = parent;
}
public JSONObjectWithDefault getPermissions(APIHandler servlet){
JSONObjectWithDefault permissions;
// get upstream permission from default values or from parent
if(parent == null){
permissions = new JSONObjectWithDefault(servlet.getDefaultPermissions(baseUserRole));
if(permissions == null) permissions = new JSONObjectWithDefault();
}
else{
permissions = parent.getPermissions(servlet);
}
// override of permissions
if(this.permissions.has(servlet.getClass().getCanonicalName())){
permissions.putAll(this.permissions.getJSONObject(servlet.getClass().getCanonicalName()));
}
return permissions;
}
public JSONObject getPermissionOverrides(){
return permissions;
}
public JSONObject getPermissionOverrides(String servletCanonicalName){
if(permissions.has(servletCanonicalName)) return permissions.getJSONObject(servletCanonicalName);
return null;
}
public JSONObject getPermissionOverrides(APIHandler servlet){
return getPermissionOverrides(servlet.getClass().getCanonicalName());
}
public void setPermission(String servletCanonicalName, String key, JSONObject value){
if(!permissions.has(servletCanonicalName)) permissions.put(servletCanonicalName, new JSONObject());
permissions.getJSONObject(servletCanonicalName).put(key, value);
}
public void setPermission(APIHandler servlet, String key, JSONObject value){
setPermission(servlet.getClass().getCanonicalName(), key, value);
}
}