package com.constellio.app.ui.pages.management.authorizations; import static com.constellio.app.ui.i18n.i18n.$; import static java.util.Arrays.asList; import java.util.ArrayList; import java.util.List; import com.constellio.app.modules.rm.navigation.RMViews; import com.constellio.app.modules.rm.wrappers.Document; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.app.ui.entities.AuthorizationVO; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.entities.RecordVO.VIEW_MODE; import com.constellio.app.ui.pages.base.BasePresenter; import com.constellio.model.entities.CorePermissions; import com.constellio.model.entities.Taxonomy; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.security.global.AuthorizationDetails; import com.constellio.model.entities.security.Role; import com.constellio.model.entities.security.global.AuthorizationAddRequest; import com.constellio.model.services.migrations.ConstellioEIMConfigs; import com.constellio.model.services.schemas.SchemaUtils; import com.constellio.model.services.security.AuthorizationsServices; import com.constellio.model.services.taxonomies.TaxonomiesManager; public class ShareContentPresenter extends BasePresenter<ShareContentView> { private transient AuthorizationsServices authorizationsServices; private String recordId; public ShareContentPresenter(ShareContentView view) { super(view); } public ShareContentPresenter forRequestParams(String parameters) { recordId = parameters; return this; } public RecordVO getRecordVO() { return presenterService().getRecordVO(recordId, VIEW_MODE.DISPLAY, view.getSessionContext()); } public void authorizationCreationRequested(AuthorizationVO authorizationVO) { AuthorizationAddRequest authorization = toAuthorization(authorizationVO); authorizationsServices().add(authorization, getCurrentUser()); view.showMessage($("ShareContentView.shared")); view.returnFromPage(); } public void backButtonClicked(String schemaCode) { if (schemaCode.startsWith(Folder.SCHEMA_TYPE)) { view.navigate().to(RMViews.class).displayFolder(recordId); } else if (schemaCode.startsWith(Document.SCHEMA_TYPE)) { view.navigate().to(RMViews.class).displayDocument(recordId); } } public List<String> getAllowedAccesses() { List<String> results = new ArrayList<>(3); User user = getCurrentUser(); Record record = presenterService().getRecord(recordId); if (user.hasReadAccess().on(record)) { results.add(Role.READ); } if (user.hasWriteAccess().on(record)) { results.add(Role.WRITE); } if (user.hasDeleteAccess().on(record)) { results.add(Role.DELETE); } return results; } public List<String> getAllowedRoles() { return getCurrentUser().getUserRoles(); } public boolean seeRolesField() { return new ConstellioEIMConfigs(modelLayerFactory.getSystemConfigurationsManager()).seeUserRolesInAuthorizations(); } private AuthorizationAddRequest toAuthorization(AuthorizationVO authorizationVO) { AuthorizationDetails details; ArrayList<String> roles = new ArrayList<>(); roles.addAll(authorizationVO.getAccessRoles()); for (String roleCode : authorizationVO.getUserRoles()) { roles.add(roleCode); } List<String> principals = new ArrayList<>(); principals.addAll(authorizationVO.getUsers()); principals.addAll(authorizationVO.getGroups()); return AuthorizationAddRequest.authorizationInCollection(collection).giving(roles) .forPrincipalsIds(principals).on(authorizationVO.getRecord()) .startingOn(authorizationVO.getStartDate()).endingOn(authorizationVO.getEndDate()); } private AuthorizationsServices authorizationsServices() { if (authorizationsServices == null) { authorizationsServices = modelLayerFactory.newAuthorizationsServices(); } return authorizationsServices; } @Override protected List<String> getRestrictedRecordIds(String params) { return asList(params); } @Override protected boolean hasRestrictedRecordAccess(String params, User user, Record restrictedRecord) { TaxonomiesManager taxonomiesManager = modelLayerFactory.getTaxonomiesManager(); String schemaType = new SchemaUtils().getSchemaTypeCode(restrictedRecord.getSchemaCode()); Taxonomy taxonomy = taxonomiesManager.getTaxonomyFor(user.getCollection(), schemaType); if (taxonomy != null && taxonomy.hasSameCode(taxonomiesManager.getPrincipalTaxonomy(user.getCollection()))) { return user.has(CorePermissions.MANAGE_SECURITY).globally(); } else { return user.hasReadAccess().on(restrictedRecord); } } @Override protected boolean hasPageAccess(String params, User user) { return true; } }