package com.constellio.app.modules.rm.extensions;
import com.constellio.app.api.extensions.PageExtension;
import com.constellio.app.modules.rm.constants.RMPermissionsTo;
import com.constellio.app.modules.rm.wrappers.Document;
import com.constellio.app.modules.rm.wrappers.Folder;
import com.constellio.app.ui.pages.base.BasePresenter;
import com.constellio.app.ui.pages.management.authorizations.ListContentAccessAuthorizationsPresenter;
import com.constellio.app.ui.pages.management.authorizations.ShareContentPresenter;
import com.constellio.data.frameworks.extensions.ExtensionBooleanResult;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.wrappers.User;
public class RMModulePageExtension extends PageExtension {
@Override
public ExtensionBooleanResult hasRestrictedRecordAccess(Class<? extends BasePresenter> presenterClass, String params,
User user,
Record restrictedRecord) {
if (presenterClass.equals(ListContentAccessAuthorizationsPresenter.class)) {
return hasAccessToListContentAuthorizationPage(user, restrictedRecord);
} else if (presenterClass.equals(ShareContentPresenter.class)) {
return shareContent(user, restrictedRecord);
} else
return ExtensionBooleanResult.NOT_APPLICABLE;
}
private ExtensionBooleanResult hasAccessToListContentAuthorizationPage(User user, Record restrictedRecord) {
if (restrictedRecord.getSchemaCode().startsWith(Folder.SCHEMA_TYPE)) {
return ExtensionBooleanResult.trueIf(user.has(RMPermissionsTo.MANAGE_FOLDER_AUTHORIZATIONS).on(restrictedRecord));
} else if (restrictedRecord.getSchemaCode().startsWith(Document.SCHEMA_TYPE)) {
return ExtensionBooleanResult.trueIf(user.has(RMPermissionsTo.MANAGE_DOCUMENT_AUTHORIZATIONS).on(restrictedRecord));
} else {
return ExtensionBooleanResult.NOT_APPLICABLE;
}
}
private ExtensionBooleanResult shareContent(User user, Record restrictedRecord) {
if (restrictedRecord.getSchemaCode().startsWith(Folder.SCHEMA_TYPE)) {
return ExtensionBooleanResult.trueIf(user.hasAny(RMPermissionsTo.MANAGE_FOLDER_AUTHORIZATIONS,
RMPermissionsTo.SHARE_FOLDER).on(restrictedRecord));
} else if (restrictedRecord.getSchemaCode().startsWith(Document.SCHEMA_TYPE)) {
return ExtensionBooleanResult
.trueIf(user.hasAny(RMPermissionsTo.MANAGE_DOCUMENT_AUTHORIZATIONS, RMPermissionsTo.SHARE_DOCUMENT)
.on(restrictedRecord));
} else {
return ExtensionBooleanResult.NOT_APPLICABLE;
}
}
}