Fixed another Lazy Init Exception

Former-commit-id: 39fae3139c
pull/2/head
Jens Pelzetter 2020-03-01 13:19:10 +01:00
parent 463446063f
commit 01b47b29d9
3 changed files with 69 additions and 54 deletions

View File

@ -35,16 +35,12 @@ import com.arsdigita.cms.ui.BaseItemPane;
import com.arsdigita.cms.ui.PartySearchForm; import com.arsdigita.cms.ui.PartySearchForm;
import com.arsdigita.cms.ui.VisibilityComponent; import com.arsdigita.cms.ui.VisibilityComponent;
import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.kernel.KernelConfig;
import com.arsdigita.toolbox.ui.ActionGroup; import com.arsdigita.toolbox.ui.ActionGroup;
import com.arsdigita.toolbox.ui.Property; import com.arsdigita.toolbox.ui.Property;
import com.arsdigita.toolbox.ui.PropertyList; import com.arsdigita.toolbox.ui.PropertyList;
import com.arsdigita.toolbox.ui.Section; import com.arsdigita.toolbox.ui.Section;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.configuration.ConfigurationManager;
import org.libreccm.security.Party; import org.libreccm.security.Party;
import org.libreccm.security.PartyRepository; import org.libreccm.security.PartyRepository;
import org.libreccm.security.PermissionChecker; import org.libreccm.security.PermissionChecker;
@ -129,40 +125,53 @@ class BaseRoleItemPane extends BaseItemPane {
@Override @Override
protected final java.util.List<Property> properties( protected final java.util.List<Property> properties(
final PageState state) { final PageState state
) {
final java.util.List<Property> properties = super.properties( final java.util.List<Property> properties = super.properties(
state); state
);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final ConfigurationManager manager = cdiUtil.findBean( final RoleAdminPaneController controller = cdiUtil
ConfigurationManager.class); .findBean(RoleAdminPaneController.class);
final KernelConfig config = manager.findConfiguration(
KernelConfig.class);
final Role role = roleRequestLocal.getRole(state); final Role role = roleRequestLocal.getRole(state);
properties.add(new Property(lz("cms.ui.role.name"), properties.add(
role.getName())); new Property(lz("cms.ui.role.name"), role.getName())
// Right now just loads the default locale description. );
properties.add(new Property(
lz("cms.ui.role.description"),
role.getDescription().getValue(config.getDefaultLocale())));
// Since Permissions don't seem to have a "pretty" form, the granted privilege is used. // Right now just loads the default locale description.
final RoleAdminPaneController controller = cdiUtil.findBean( properties.add(
RoleAdminPaneController.class); new Property(
lz("cms.ui.role.description"),
controller.getRoleDescription(role)
)
);
// Since Permissions don't seem to have a "pretty" form, the
// granted privilege is used.
final String permissions = controller final String permissions = controller
.generateGrantedPermissionsString( .generateGrantedPermissionsString(
role, role,
CMS.getContext().getContentSection()); CMS.getContext().getContentSection()
);
if (permissions.length() > 0) { if (permissions.length() > 0) {
properties.add(new Property(lz("cms.ui.role.privileges"), properties.add(
permissions)); new Property(
lz("cms.ui.role.privileges"),
permissions
)
);
} else { } else {
properties.add(new Property(lz("cms.ui.role.privileges"), properties.add(
lz("cms.ui.role.privilege.none"))); new Property(
lz("cms.ui.role.privileges"),
lz("cms.ui.role.privilege.none")
)
);
} }
return properties; return properties;
@ -192,7 +201,9 @@ class BaseRoleItemPane extends BaseItemPane {
private class MemberTable extends Table { private class MemberTable extends Table {
private static final int COL_NAME = 0; private static final int COL_NAME = 0;
private static final int COL_EMAIL = 1; private static final int COL_EMAIL = 1;
private static final int COL_REMOVE = 2; private static final int COL_REMOVE = 2;
MemberTable() { MemberTable() {

View File

@ -88,6 +88,22 @@ class RoleAdminPaneController {
return new ArrayList<>(contentSection.getRoles()); return new ArrayList<>(contentSection.getRoles());
} }
@Transactional
public String getRoleDescription(final Role ofRole) {
final Role role = roleRepo
.findById(ofRole.getRoleId())
.orElseThrow(
() -> new IllegalArgumentException(
String.format(
"No role with ID %d found.", ofRole.getRoleId()
)
)
);
final KernelConfig config = confManager
.findConfiguration(KernelConfig.class);
return role.getDescription().getValue(config.getDefaultLocale());
}
public String[] getGrantedPrivileges(final Role role, public String[] getGrantedPrivileges(final Role role,
final ContentSection section) { final ContentSection section) {
final List<Permission> sectionPermissions = permissionManager final List<Permission> sectionPermissions = permissionManager
@ -217,10 +233,10 @@ class RoleAdminPaneController {
KernelConfig.class); KernelConfig.class);
final Locale defaultLocale = kernelConfig.getDefaultLocale(); final Locale defaultLocale = kernelConfig.getDefaultLocale();
role.setName(roleName); roleToSave.setName(roleName);
role.getDescription().addValue(defaultLocale, roleDescription); roleToSave.getDescription().addValue(defaultLocale, roleDescription);
roleRepo.save(role); roleRepo.save(roleToSave);
final ContentSection contentSection = sectionRepo.findById( final ContentSection contentSection = sectionRepo.findById(
CMS.getContext().getContentSection().getObjectId()) CMS.getContext().getContentSection().getObjectId())
@ -241,28 +257,28 @@ class RoleAdminPaneController {
final Folder rootAssetsFolder = contentSection.getRootAssetsFolder(); final Folder rootAssetsFolder = contentSection.getRootAssetsFolder();
final List<Permission> currentPermissionsSection = permissionManager final List<Permission> currentPermissionsSection = permissionManager
.findPermissionsForRoleAndObject(role, contentSection); .findPermissionsForRoleAndObject(roleToSave, contentSection);
final List<Permission> currentPermissionsDocuments = permissionManager final List<Permission> currentPermissionsDocuments = permissionManager
.findPermissionsForRoleAndObject(role, rootDocumentsFolder); .findPermissionsForRoleAndObject(roleToSave, rootDocumentsFolder);
final List<Permission> currentPermissionsAssets = permissionManager final List<Permission> currentPermissionsAssets = permissionManager
.findPermissionsForRoleAndObject(role, rootAssetsFolder); .findPermissionsForRoleAndObject(roleToSave, rootAssetsFolder);
//Revoke permissions not in selectedPermissions //Revoke permissions not in selectedPermissions
revokeNotSelectedPrivileges(selectedPermissions, revokeNotSelectedPrivileges(selectedPermissions,
role, roleToSave,
currentPermissionsSection); currentPermissionsSection);
revokeNotSelectedPrivileges(selectedPermissions, revokeNotSelectedPrivileges(selectedPermissions,
role, roleToSave,
currentPermissionsDocuments); currentPermissionsDocuments);
revokeNotSelectedPrivileges(selectedPermissions, revokeNotSelectedPrivileges(selectedPermissions,
role, roleToSave,
currentPermissionsAssets); currentPermissionsAssets);
// Grant selected privileges // Grant selected privileges
for (final String privilege : adminPrivileges) { for (final String privilege : adminPrivileges) {
if (isPrivilegeSelected(selectedPermissions, privilege)) { if (isPrivilegeSelected(selectedPermissions, privilege)) {
permissionManager.grantPrivilege(privilege, permissionManager.grantPrivilege(privilege,
role, roleToSave,
contentSection); contentSection);
} }
} }
@ -270,7 +286,7 @@ class RoleAdminPaneController {
for (final String privilege : itemPrivileges) { for (final String privilege : itemPrivileges) {
if (isPrivilegeSelected(selectedPermissions, privilege)) { if (isPrivilegeSelected(selectedPermissions, privilege)) {
permissionManager.grantPrivilege(privilege, permissionManager.grantPrivilege(privilege,
role, roleToSave,
rootDocumentsFolder); rootDocumentsFolder);
} }
} }
@ -278,7 +294,7 @@ class RoleAdminPaneController {
for (final String privilege : assetPrivileges) { for (final String privilege : assetPrivileges) {
if (isPrivilegeSelected(selectedPermissions, privilege)) { if (isPrivilegeSelected(selectedPermissions, privilege)) {
permissionManager.grantPrivilege(privilege, permissionManager.grantPrivilege(privilege,
role, roleToSave,
rootAssetsFolder); rootAssetsFolder);
} }
} }

View File

@ -24,20 +24,10 @@ import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener; import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent; import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.cms.CMS; import com.arsdigita.cms.CMS;
import com.arsdigita.kernel.KernelConfig;
import org.libreccm.cdi.utils.CdiUtil; import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.configuration.ConfigurationManager;
import org.libreccm.l10n.LocalizedString;
import org.libreccm.security.Permission;
import org.libreccm.security.PermissionManager; import org.libreccm.security.PermissionManager;
import org.libreccm.security.Role; import org.libreccm.security.Role;
import org.libreccm.security.RoleRepository;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
/** /**
* Represents a {@link com.arsdigita.bebop.Form Form} to edit * Represents a {@link com.arsdigita.bebop.Form Form} to edit
@ -76,17 +66,15 @@ final class RoleEditForm extends BaseRoleForm {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final Role role = roleRequestLocal.getRole(state); final Role role = roleRequestLocal.getRole(state);
final KernelConfig kernelConfig = KernelConfig.getConfig(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final Locale defaultLocale = kernelConfig.getDefaultLocale(); final RoleAdminPaneController controller = cdiUtil.findBean(
RoleAdminPaneController.class);
getRoleName().setValue(state, role.getName()); getRoleName().setValue(state, role.getName());
getRoleDescription().setValue( getRoleDescription().setValue(
state, state,
role.getDescription().getValue(defaultLocale)); controller.getRoleDescription(role)
);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final RoleAdminPaneController controller = cdiUtil.findBean(
RoleAdminPaneController.class);
final String[] permissions = controller.getGrantedPrivileges( final String[] permissions = controller.getGrantedPrivileges(
role, CMS.getContext().getContentSection()); role, CMS.getContext().getContentSection());