/**
* 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.util.Collection;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import org.fenixedu.bennu.core.domain.Bennu;
import org.fenixedu.bennu.core.i18n.BundleUtil;
import org.fenixedu.cms.domain.PermissionsArray.Permission;
public class DefaultRoles {
private static final String ADMIN_ROLE_NAME = "roles.admin";
private static final String EDITOR_ROLE_NAME = "roles.editor";
private static final String AUTHOR_ROLE_NAME = "roles.author";
private static final String CONTRIBUTOR_ROLE_NAME = "roles.contributor";
private static final String DEFAULT_BUNDLE = "CmsPermissionResources";
private static DefaultRoles instance;
private RoleTemplate adminRole;
private RoleTemplate editorRole;
private RoleTemplate contributorRole;
private RoleTemplate authorRole;
private DefaultRoles() {
init();
}
public void init() {
this.adminRole = getOrCreateTemplateWithPermissions(getAdminPermissions(), ADMIN_ROLE_NAME);
this.editorRole = getOrCreateTemplateWithPermissions(getEditorPermissions(), EDITOR_ROLE_NAME);
this.authorRole = getOrCreateTemplateWithPermissions(getAuthorPermissions(), AUTHOR_ROLE_NAME);
this.contributorRole = getOrCreateTemplateWithPermissions(getContributorPermissions(), CONTRIBUTOR_ROLE_NAME);
}
public RoleTemplate getOrCreateTemplateWithPermissions(Set<Permission> permissions, String description) {
return getTemplateWithPermissions(permissions)
.orElseGet(() -> createTemplate(permissions, description));
}
public Optional<RoleTemplate> getTemplateWithPermissions(Set<Permission> permissions) {
Collection<RoleTemplate> templates = Bennu.getInstance().getRoleTemplatesSet();
return templates.stream().filter(template->template.getPermissions().get().equals(permissions)).findAny();
}
private RoleTemplate createTemplate(Set<Permission> permissions, String description) {
RoleTemplate template = new RoleTemplate();
template.setPermissions(new PermissionsArray(EnumSet.copyOf(permissions)));
template.setDescription(BundleUtil.getLocalizedString(DEFAULT_BUNDLE, description));
return template;
}
private Set<Permission> getAdminPermissions() {
Set<Permission> permissions = new HashSet<>();
permissions.add(Permission.CREATE_POST);
permissions.add(Permission.CREATE_PAGE);
permissions.add(Permission.SEE_POSTS);
permissions.add(Permission.SEE_PRIVATE_POSTS);
permissions.add(Permission.SEE_PAGES);
permissions.add(Permission.SEE_PAGE_COMPONENTS);
permissions.add(Permission.DELETE_OTHERS_POSTS);
permissions.add(Permission.DELETE_PAGE);
permissions.add(Permission.DELETE_POSTS);
permissions.add(Permission.DELETE_PRIVATE_POSTS);
permissions.add(Permission.DELETE_POSTS_PUBLISHED);
permissions.add(Permission.EDIT_OTHERS_POSTS);
permissions.add(Permission.EDIT_PAGE);
permissions.add(Permission.EDIT_POSTS);
permissions.add(Permission.EDIT_POSTS_PUBLISHED);
permissions.add(Permission.LIST_CATEGORIES);
permissions.add(Permission.EDIT_CATEGORY);
permissions.add(Permission.DELETE_CATEGORY);
permissions.add(Permission.CREATE_CATEGORY);
permissions.add(Permission.MANAGE_ANALYTICS);
permissions.add(Permission.MANAGE_ROLES);
permissions.add(Permission.PUBLISH_PAGES);
permissions.add(Permission.PUBLISH_POSTS);
permissions.add(Permission.PUBLISH_SITE);
permissions.add(Permission.CREATE_MENU);
permissions.add(Permission.DELETE_MENU);
permissions.add(Permission.LIST_MENUS);
permissions.add(Permission.EDIT_MENU);
permissions.add(Permission.CREATE_MENU_ITEM);
permissions.add(Permission.DELETE_MENU_ITEM);
permissions.add(Permission.EDIT_MENU_ITEM);
permissions.add(Permission.CHANGE_PATH_PAGES);
permissions.add(Permission.CHOOSE_PATH_AND_FOLDER);
permissions.add(Permission.EDIT_SITE_INFORMATION);
permissions.add(Permission.CHOOSE_DEFAULT_PAGE);
return permissions;
}
private Set<Permission> getEditorPermissions() {
Set<Permission> permissions = new HashSet<>();
permissions.add(Permission.CREATE_POST);
permissions.add(Permission.CREATE_PAGE);
permissions.add(Permission.SEE_PAGES);
permissions.add(Permission.SEE_POSTS);
permissions.add(Permission.SEE_PRIVATE_POSTS);
permissions.add(Permission.DELETE_OTHERS_POSTS);
permissions.add(Permission.DELETE_PAGE);
permissions.add(Permission.DELETE_POSTS);
permissions.add(Permission.DELETE_PRIVATE_POSTS);
permissions.add(Permission.DELETE_POSTS_PUBLISHED);
permissions.add(Permission.EDIT_OTHERS_POSTS);
permissions.add(Permission.EDIT_PAGE);
permissions.add(Permission.EDIT_POSTS);
permissions.add(Permission.EDIT_POSTS_PUBLISHED);
permissions.add(Permission.LIST_CATEGORIES);
permissions.add(Permission.EDIT_CATEGORY);
permissions.add(Permission.DELETE_CATEGORY);
permissions.add(Permission.CREATE_CATEGORY);
permissions.add(Permission.PUBLISH_PAGES);
permissions.add(Permission.PUBLISH_POSTS);
permissions.add(Permission.LIST_MENUS);
permissions.add(Permission.EDIT_MENU);
permissions.add(Permission.CREATE_MENU_ITEM);
permissions.add(Permission.DELETE_MENU_ITEM);
permissions.add(Permission.EDIT_MENU_ITEM);
return permissions;
}
private Set<Permission> getAuthorPermissions() {
Set<Permission> permissions = new HashSet<>();
permissions.add(Permission.CREATE_POST);
permissions.add(Permission.DELETE_POSTS);
permissions.add(Permission.DELETE_POSTS_PUBLISHED);
permissions.add(Permission.SEE_POSTS);
permissions.add(Permission.EDIT_POSTS);
permissions.add(Permission.EDIT_POSTS_PUBLISHED);
permissions.add(Permission.LIST_CATEGORIES);
permissions.add(Permission.CREATE_CATEGORY);
permissions.add(Permission.PUBLISH_POSTS);
permissions.add(Permission.LIST_MENUS);
return permissions;
}
private Set<Permission> getContributorPermissions() {
Set<Permission> permissions = new HashSet<>();
permissions.add(Permission.CREATE_POST);
permissions.add(Permission.SEE_POSTS);
permissions.add(Permission.DELETE_POSTS);
permissions.add(Permission.EDIT_POSTS);
permissions.add(Permission.LIST_CATEGORIES);
return permissions;
}
public static DefaultRoles getInstance() {
if(instance == null) {
instance = new DefaultRoles();
}
return instance;
}
public RoleTemplate getAdminRole() {
return adminRole;
}
public RoleTemplate getEditorRole() {
return editorRole;
}
public RoleTemplate getContributorRole() {
return contributorRole;
}
public RoleTemplate getAuthorRole() {
return authorRole;
}
}