diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/RoleAddForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/RoleAddForm.java index 304ae65e5..6e4b4c9b4 100755 --- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/RoleAddForm.java +++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/role/RoleAddForm.java @@ -24,11 +24,18 @@ import com.arsdigita.bebop.SingleSelectionModel; import com.arsdigita.bebop.event.FormProcessListener; import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.cms.CMS; +import com.arsdigita.kernel.KernelConfig; import org.apache.log4j.Logger; -import org.libreccm.security.Group; -import org.libreccm.security.Role; +import org.libreccm.cdi.utils.CdiUtil; +import org.libreccm.configuration.ConfigurationManager; +import org.libreccm.l10n.LocalizedString; +import org.libreccm.security.*; import org.librecms.contentsection.ContentSection; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + /** * For more detailed information see {@link com.arsdigita.bebop.Form}. * @@ -59,33 +66,38 @@ final class RoleAddForm extends BaseRoleForm { public final void process(final FormSectionEvent e) throws FormProcessException { final PageState state = e.getPageState(); - final ContentSection section = - CMS.getContext().getContentSection(); - Group group; - /* - if (m_useViewersGroup) { - group = section.getViewersGroup(); - } else { - group = section.getStaffGroup(); + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final PermissionManager permissionManager = cdiUtil.findBean(PermissionManager.class); + final ConfigurationManager manager = cdiUtil.findBean(ConfigurationManager.class); + final KernelConfig config = manager.findConfiguration(KernelConfig.class); + + final Role role = new Role(); + + role.setName((String) m_name.getValue(state)); + + LocalizedString localizedDescription = role.getDescription(); + localizedDescription.addValue(config.getDefaultLocale(), (String) m_description.getValue(state)); + role.setDescription(localizedDescription); + + List newPermissions = new ArrayList<>(); + String[] selectedPermissions = (String[]) m_privileges.getValue(state); + + for (Permission p : role.getPermissions()) { + if (Arrays.stream(selectedPermissions).anyMatch(x -> x.equals(p.getGrantedPrivilege()))) { + newPermissions.add(p); + } else { + permissionManager.revokePrivilege(p.getGrantedPrivilege(), role); + } } - final Role role = group.createRole - ((String) m_name.getValue(state)); - role.setName((String) m_name.getValue(state)); - role.setDescription((String) m_description.getValue(state)); + for (String s : selectedPermissions) { + if (newPermissions.stream().noneMatch(x -> x.getGrantedPrivilege().equals(s))) { + permissionManager.grantPrivilege(s, role); + } + } - group.save(); - - RoleFactory.updatePrivileges - (role, - (String[]) m_privileges.getValue(state), - CMS.getContext().getContentSection()); - - role.save(); - - m_model.setSelectedKey(state, role.getID().toString()); - */ + m_model.setSelectedKey(state, Long.toString(role.getRoleId())); } } }