Fixed another Lazy Init Exception

Jens Pelzetter 2020-03-01 13:19:10 +01:00
parent d08d49c79f
commit 39fae3139c
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.VisibilityComponent;
import com.arsdigita.globalization.GlobalizedMessage;
import com.arsdigita.kernel.KernelConfig;
import com.arsdigita.toolbox.ui.ActionGroup;
import com.arsdigita.toolbox.ui.Property;
import com.arsdigita.toolbox.ui.PropertyList;
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.configuration.ConfigurationManager;
import org.libreccm.security.Party;
import org.libreccm.security.PartyRepository;
import org.libreccm.security.PermissionChecker;
@ -129,40 +125,53 @@ class BaseRoleItemPane extends BaseItemPane {
@Override
protected final java.util.List<Property> properties(
final PageState state) {
final PageState state
) {
final java.util.List<Property> properties = super.properties(
state);
state
);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final ConfigurationManager manager = cdiUtil.findBean(
ConfigurationManager.class);
final KernelConfig config = manager.findConfiguration(
KernelConfig.class);
final RoleAdminPaneController controller = cdiUtil
.findBean(RoleAdminPaneController.class);
final Role role = roleRequestLocal.getRole(state);
properties.add(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())));
properties.add(
new Property(lz("cms.ui.role.name"), role.getName())
);
// Since Permissions don't seem to have a "pretty" form, the granted privilege is used.
final RoleAdminPaneController controller = cdiUtil.findBean(
RoleAdminPaneController.class);
// Right now just loads the default locale description.
properties.add(
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
.generateGrantedPermissionsString(
role,
CMS.getContext().getContentSection());
CMS.getContext().getContentSection()
);
if (permissions.length() > 0) {
properties.add(new Property(lz("cms.ui.role.privileges"),
permissions));
properties.add(
new Property(
lz("cms.ui.role.privileges"),
permissions
)
);
} else {
properties.add(new Property(lz("cms.ui.role.privileges"),
lz("cms.ui.role.privilege.none")));
properties.add(
new Property(
lz("cms.ui.role.privileges"),
lz("cms.ui.role.privilege.none")
)
);
}
return properties;
@ -192,7 +201,9 @@ class BaseRoleItemPane extends BaseItemPane {
private class MemberTable extends Table {
private static final int COL_NAME = 0;
private static final int COL_EMAIL = 1;
private static final int COL_REMOVE = 2;
MemberTable() {

View File

@ -88,6 +88,22 @@ class RoleAdminPaneController {
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,
final ContentSection section) {
final List<Permission> sectionPermissions = permissionManager
@ -217,10 +233,10 @@ class RoleAdminPaneController {
KernelConfig.class);
final Locale defaultLocale = kernelConfig.getDefaultLocale();
role.setName(roleName);
role.getDescription().addValue(defaultLocale, roleDescription);
roleToSave.setName(roleName);
roleToSave.getDescription().addValue(defaultLocale, roleDescription);
roleRepo.save(role);
roleRepo.save(roleToSave);
final ContentSection contentSection = sectionRepo.findById(
CMS.getContext().getContentSection().getObjectId())
@ -241,28 +257,28 @@ class RoleAdminPaneController {
final Folder rootAssetsFolder = contentSection.getRootAssetsFolder();
final List<Permission> currentPermissionsSection = permissionManager
.findPermissionsForRoleAndObject(role, contentSection);
.findPermissionsForRoleAndObject(roleToSave, contentSection);
final List<Permission> currentPermissionsDocuments = permissionManager
.findPermissionsForRoleAndObject(role, rootDocumentsFolder);
.findPermissionsForRoleAndObject(roleToSave, rootDocumentsFolder);
final List<Permission> currentPermissionsAssets = permissionManager
.findPermissionsForRoleAndObject(role, rootAssetsFolder);
.findPermissionsForRoleAndObject(roleToSave, rootAssetsFolder);
//Revoke permissions not in selectedPermissions
revokeNotSelectedPrivileges(selectedPermissions,
role,
roleToSave,
currentPermissionsSection);
revokeNotSelectedPrivileges(selectedPermissions,
role,
roleToSave,
currentPermissionsDocuments);
revokeNotSelectedPrivileges(selectedPermissions,
role,
roleToSave,
currentPermissionsAssets);
// Grant selected privileges
for (final String privilege : adminPrivileges) {
if (isPrivilegeSelected(selectedPermissions, privilege)) {
permissionManager.grantPrivilege(privilege,
role,
roleToSave,
contentSection);
}
}
@ -270,7 +286,7 @@ class RoleAdminPaneController {
for (final String privilege : itemPrivileges) {
if (isPrivilegeSelected(selectedPermissions, privilege)) {
permissionManager.grantPrivilege(privilege,
role,
roleToSave,
rootDocumentsFolder);
}
}
@ -278,7 +294,7 @@ class RoleAdminPaneController {
for (final String privilege : assetPrivileges) {
if (isPrivilegeSelected(selectedPermissions, privilege)) {
permissionManager.grantPrivilege(privilege,
role,
roleToSave,
rootAssetsFolder);
}
}

View File

@ -24,20 +24,10 @@ import com.arsdigita.bebop.event.FormInitListener;
import com.arsdigita.bebop.event.FormProcessListener;
import com.arsdigita.bebop.event.FormSectionEvent;
import com.arsdigita.cms.CMS;
import com.arsdigita.kernel.KernelConfig;
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.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
@ -76,17 +66,15 @@ final class RoleEditForm extends BaseRoleForm {
final PageState state = event.getPageState();
final Role role = roleRequestLocal.getRole(state);
final KernelConfig kernelConfig = KernelConfig.getConfig();
final Locale defaultLocale = kernelConfig.getDefaultLocale();
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final RoleAdminPaneController controller = cdiUtil.findBean(
RoleAdminPaneController.class);
getRoleName().setValue(state, role.getName());
getRoleDescription().setValue(
state,
role.getDescription().getValue(defaultLocale));
final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final RoleAdminPaneController controller = cdiUtil.findBean(
RoleAdminPaneController.class);
controller.getRoleDescription(role)
);
final String[] permissions = controller.getGrantedPrivileges(
role, CMS.getContext().getContentSection());