You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
131 lines
5.0 KiB
131 lines
5.0 KiB
package de.superx.bianalysis; |
|
|
|
import static org.junit.Assert.assertEquals; |
|
import static org.junit.Assert.assertTrue; |
|
|
|
import org.junit.After; |
|
import org.junit.Before; |
|
import org.junit.Test; |
|
import org.springframework.beans.factory.annotation.Autowired; |
|
import org.springframework.jdbc.core.JdbcTemplate; |
|
|
|
import de.superx.BIATestUtils; |
|
import de.superx.BaseDbTest; |
|
import de.superx.bianalysis.models.Right; |
|
import de.superx.bianalysis.models.RightParam; |
|
import de.superx.bianalysis.rest.BiAnalysisApi; |
|
import de.superx.bianalysis.service.UserRestrictionService; |
|
import de.superx.rest.model.Result; |
|
|
|
public class ProjectRestrictionTest extends BaseDbTest { |
|
|
|
@Autowired |
|
BiAnalysisApi biAnalysisApi; |
|
|
|
// Zeig alle Projekte (Titel des Projektes) |
|
private ReportDefinition definition; |
|
|
|
private String oldUserName; |
|
private Integer oldUserPersonId; |
|
private Integer oldOrgId; |
|
|
|
@Before |
|
public void init() throws Exception { |
|
oldUserName = user.getName(); |
|
oldUserPersonId = user.getUserPersonId(); |
|
oldOrgId = user.getHisInOneOrgUnitLidOfRole(); |
|
|
|
// Werner Albrecht, bei einem Projekt Projektleiter (in fact_research_funds) |
|
user.setName("albrecht"); |
|
user.setUserPersonId(Integer.valueOf(430)); |
|
user.setHisInOneOrgUnitLidOfRole(Integer.valueOf(2)); |
|
setRight(Right.CREATE_ANALYSIS); |
|
|
|
String reportJson = """ |
|
{ |
|
"factTableId": "res:105", |
|
"hideEmptyColumns": false, |
|
"leftDimensionAttributeIds": [ "res:608" ], |
|
"measureIds": [ "res:127" ] |
|
} |
|
"""; |
|
this.definition = BIATestUtils.getReportDefinitionFromString(reportJson); |
|
} |
|
|
|
@After |
|
public void restoreUserValues() { |
|
user.setName(oldUserName); |
|
user.setHisInOneOrgUnitLidOfRole(oldOrgId); |
|
user.setUserPersonId(oldUserPersonId); |
|
} |
|
|
|
@Test |
|
public void testPersonIstProjektleiterSiehtEigeneProjekte() throws Exception { |
|
setRight(Right.CREATE_ANALYSIS); |
|
|
|
UserRestrictionService builder = new UserRestrictionService(user, dataSource); |
|
builder.calculateDimensionRestrictions(user.getUserPersonId()); |
|
|
|
Result result = biAnalysisApi.getReport(definition); |
|
assertEquals(2, result.rows.size()); // 1 für das Projekt, 1 für die Gesamtzeile |
|
} |
|
|
|
@Test |
|
public void testPersonIstProjektleiterSiehtAlleProjekte() throws Exception { |
|
String rightParamAlleProjekte = "2"; |
|
setRightParamValue(Right.CREATE_ANALYSIS, RightParam.PROJECT, rightParamAlleProjekte); |
|
|
|
UserRestrictionService builder = new UserRestrictionService(user, dataSource); |
|
builder.calculateDimensionRestrictions(user.getUserPersonId()); |
|
Result result = biAnalysisApi.getReport(definition); |
|
|
|
assertTrue(result.rows.size() > 2); // Werner sieht jetzt alle Projekte (sollten mehr als zwei sein) |
|
} |
|
|
|
@Test |
|
public void testPersonIstKeinProjektleiterSiehtKeineProjekte() throws Exception { |
|
user.setName("neuer testuser"); |
|
user.setUserPersonId(Integer.valueOf(3333)); |
|
user.setHisInOneOrgUnitLidOfRole(Integer.valueOf(2)); |
|
setRight(Right.CREATE_ANALYSIS); |
|
|
|
UserRestrictionService builder = new UserRestrictionService(user, dataSource); |
|
builder.calculateDimensionRestrictions(user.getUserPersonId()); |
|
Result result = biAnalysisApi.getReport(definition); |
|
|
|
assertEquals(1, result.rows.size()); // eine Zeile für die Gesamtzeile |
|
} |
|
|
|
@Test |
|
public void testPersonIstProjektleiterMitOrgeinheitEinschränkung() throws Exception { |
|
|
|
// Wir setzen die Organisationseinheit bei Werner Albrecht jetzt auf |
|
// "Lehrstuhl Numerische und Angewandte Mathematik" und erstellen die Orgunit |
|
// Restriktion. Da er seine Projekte als Forschungsleiter in einer anderen Orgunit |
|
// betreut hat, sollte er keine Projekte angezeigt bekommen. |
|
|
|
String dimOrgunitFlatInProjektFinanzSternId = "res:79126"; |
|
try { |
|
setIsRestricted(dimOrgunitFlatInProjektFinanzSternId, true); |
|
|
|
user.setHisInOneOrgUnitLidOfRole(Integer.valueOf(100199)); |
|
setRight(Right.CREATE_ANALYSIS); |
|
|
|
UserRestrictionService builder = new UserRestrictionService(user, dataSource); |
|
builder.calculateDimensionRestrictions(user.getUserPersonId()); |
|
builder.applyOrgunitRestrictions(); // Wir setzen die Orgunit Restriktion |
|
|
|
Result result = biAnalysisApi.getReport(definition); |
|
|
|
assertEquals(1, result.rows.size()); // eine Zeile für die Gesamtzeile |
|
} finally { |
|
setIsRestricted(dimOrgunitFlatInProjektFinanzSternId, false); |
|
} |
|
} |
|
|
|
private void setIsRestricted(String dimensionId, boolean isRestricted) { |
|
String sql = "UPDATE metadata.dimension SET is_restricted = ? WHERE id = ?"; |
|
int updatedRows = new JdbcTemplate(dataSource).update(sql, Boolean.valueOf(isRestricted), dimensionId); |
|
assertEquals("Expected to update exactly one entry.", 1, updatedRows); |
|
} |
|
}
|
|
|