/** * Copyright © 2014 Instituto Superior Técnico * * This file is part of FenixEdu CMS. * * FenixEdu CMS 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 3 of the License, or * (at your option) any later version. * * FenixEdu CMS 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 FenixEdu CMS. If not, see <http://www.gnu.org/licenses/>. */ package org.fenixedu.cms.domain; import java.io.Serializable; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; import org.fenixedu.bennu.core.i18n.BundleUtil; import org.fenixedu.commons.i18n.LocalizedString; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.google.gson.JsonPrimitive; /** * Created by borgez-dsi on 03-09-2015. */ public class PermissionsArray implements Serializable { private static final JsonParser JSON_PARSER = new JsonParser(); private final EnumSet<Permission> permissions; public PermissionsArray(EnumSet<Permission> permissions) { this.permissions = permissions; } public static PermissionsArray fromJson(JsonElement json) { List<Permission> permissionList = new ArrayList<>(); for(JsonElement permissionJson : json.getAsJsonArray()) { permissionList.add(Permission.valueOf(permissionJson.getAsJsonPrimitive().getAsString())); } return new PermissionsArray(EnumSet.copyOf(permissionList)); } public String externalize() { return json().toString(); } public JsonArray json() { JsonArray json = new JsonArray(); permissions.stream().map(Permission::name).map(JsonPrimitive::new).forEach(json::add); return json; } public static PermissionsArray internalize(String json) { return fromJson(JSON_PARSER.parse(json)); } public static EnumSet<Permission> all() { return EnumSet.allOf(Permission.class); } public EnumSet<Permission> get() { return permissions; } public enum Permission { CREATE_POST(1), DELETE_POSTS(1), DELETE_POSTS_PUBLISHED(1), SEE_POSTS(1), EDIT_POSTS(1), EDIT_POSTS_PUBLISHED(1), PUBLISH_POSTS(1), EDIT_PRIVATE_POSTS(1), SEE_PRIVATE_POSTS(1), DELETE_PRIVATE_POSTS(1), SEE_METADATA(1), EDIT_METADATA(1), DELETE_OTHERS_POSTS(1), EDIT_OTHERS_POSTS(1), CHANGE_OWNERSHIP_POST(1), SEE_PAGES(1), CREATE_PAGE(1), EDIT_PAGE(1), DELETE_PAGE(1), PUBLISH_PAGES(1), CHANGE_PATH_PAGES(1), CHANGE_VISIBILITY_PAGES(1), SEE_PAGE_COMPONENTS(1), EDIT_PAGE_COMPONENTS(1), DELETE_PAGE_COMPONENTS(1), EDIT_ADVANCED_PAGES(1), LIST_CATEGORIES(1), CREATE_CATEGORY(1), EDIT_CATEGORY(1), DELETE_CATEGORY(1), LIST_MENUS(1), CREATE_MENU(1), EDIT_MENU(1), DELETE_MENU(1), CREATE_MENU_ITEM(1), EDIT_MENU_ITEM(1), DELETE_MENU_ITEM(1), CHOOSE_DEFAULT_PAGE(1), CHOOSE_PATH_AND_FOLDER(1), EDIT_SITE_INFORMATION(1), CHANGE_THEME(1), PUBLISH_SITE(1), MANAGE_ROLES(1), MANAGE_ANALYTICS(1), CREATE_PRIVILEGED_MENU(1), DELETE_PRIVILEGED_MENU(1), EDIT_PRIVILEGED_MENU(1), EDIT_PRIVILEGED_CATEGORY(1), USE_PRIVILEGED_CATEGORY(1); int order = 0; Permission(int order){ this.order = order; } public LocalizedString getLocalizedName() { return BundleUtil.getLocalizedString("CmsPermissionResources", "label.permission.name." + name()); } public LocalizedString getLocalizedDescription() { return BundleUtil.getLocalizedString("CmsPermissionResources", "label.permission.description." + name()); } } }