public final JSONObject toJSON() {
		try {
			JSONObject json = new JSONObject();
			
			json.put("version", JSON_VERSION);
			
			JSONArray jsonGroups = new JSONArray();
			for(PrivilegeGroup group: groups) {
				try {
					jsonGroups.put(group.toJSON());
				}
				catch(Exception e) {
					onError(ERROR_JSON_INVALID_GROUP);
				}
			}
			
			JSONArray jsonUsers = new JSONArray();
			for(User user: users) {
				try {
					jsonUsers.put(user.toJSON());
				}
				catch(Exception e) {
					onError(ERROR_JSON_INVALID_GROUP);
				}
			}
			
			json.put("groups", jsonGroups);
			json.put("users", jsonUsers);
			
			return json;
		}
		catch(Exception e) {
			e.printStackTrace();
			return null;
		}
	}