Skip to content
Snippets Groups Projects
Commit 6570f40f authored by Michael Hamann's avatar Michael Hamann
Browse files

XWIKI-22474: Use the ContextualAuthorization manager in SolrIndexScriptService

* Simplify SolrIndexScriptService by using a contextual authorization
  manager.
* Adapt the tests.
parent 5f134afb
No related branches found
No related tags found
No related merge requests found
......@@ -41,6 +41,7 @@
import org.xwiki.search.solr.internal.api.SolrIndexer;
import org.xwiki.security.authorization.AccessDeniedException;
import org.xwiki.security.authorization.AuthorizationManager;
import org.xwiki.security.authorization.ContextualAuthorizationManager;
import org.xwiki.security.authorization.Right;
import com.xpn.xwiki.XWikiContext;
......@@ -80,6 +81,9 @@ public class SolrIndexScriptService implements ScriptService
@Inject
private AuthorizationManager authorization;
@Inject
private ContextualAuthorizationManager contextualAuthorizationManager;
/**
* Used to access the current {@link XWikiContext}.
*/
......@@ -298,7 +302,7 @@ private void checkAccessToWikiIndex(EntityReference reference) throws AccessDeni
XWikiContext xcontext = this.xcontextProvider.get();
this.authorization.checkAccess(Right.ADMIN, xcontext.getUserReference(), wikiReference);
this.authorization.checkAccess(Right.PROGRAM, xcontext.getAuthorReference(), null);
this.contextualAuthorizationManager.checkAccess(Right.PROGRAM);
}
/**
......
......@@ -38,6 +38,7 @@
import org.xwiki.search.solr.internal.reference.SolrEntityReferenceResolver;
import org.xwiki.security.authorization.AccessDeniedException;
import org.xwiki.security.authorization.AuthorizationManager;
import org.xwiki.security.authorization.ContextualAuthorizationManager;
import org.xwiki.security.authorization.Right;
import org.xwiki.test.mockito.MockitoComponentMockingRule;
......@@ -76,14 +77,14 @@ public class SolrIndexScriptServiceTest
private DocumentReference userReference;
private DocumentReference contentAuthorReference;
private SolrIndexScriptService service;
private Logger logger;
private AuthorizationManager mockAuthorization;
private ContextualAuthorizationManager contextualAuthorizationManager;
@Before
public void setUp() throws Exception
{
......@@ -106,6 +107,7 @@ public void setUp() throws Exception
// RightService
this.mockAuthorization = this.mocker.getInstance(AuthorizationManager.class);
this.contextualAuthorizationManager = this.mocker.getInstance(ContextualAuthorizationManager.class);
this.service = mocker.getComponentUnderTest();
......@@ -126,7 +128,7 @@ public void indexSingleReferenceChecksRights() throws Exception
// Actual rights check
verify(this.mockAuthorization).checkAccess(Right.ADMIN, this.userReference, wikiReference);
verify(this.mockAuthorization).checkAccess(Right.PROGRAM, this.contentAuthorReference, null);
verify(this.contextualAuthorizationManager).checkAccess(Right.PROGRAM);
}
@Test
......@@ -144,7 +146,7 @@ public void indexMultipleReferencesChecksRights() throws Exception
// Actual rights check
verify(this.mockAuthorization).checkAccess(Right.ADMIN, this.userReference, wikiReference);
verify(this.mockAuthorization).checkAccess(Right.PROGRAM, this.contentAuthorReference, null);
verify(this.contextualAuthorizationManager).checkAccess(Right.PROGRAM);
}
@Test
......@@ -159,7 +161,7 @@ public void deleteSingleReferenceChecksRights() throws Exception
// Actual rights check
verify(this.mockAuthorization).checkAccess(Right.ADMIN, this.userReference, wikiReference);
verify(this.mockAuthorization).checkAccess(Right.PROGRAM, this.contentAuthorReference, null);
verify(this.contextualAuthorizationManager).checkAccess(Right.PROGRAM);
}
@Test
......@@ -177,7 +179,7 @@ public void deleteMultipleReferencesChecksRights() throws Exception
// Actual rights check
verify(this.mockAuthorization).checkAccess(Right.ADMIN, this.userReference, wikiReference);
verify(this.mockAuthorization).checkAccess(Right.PROGRAM, this.contentAuthorReference, null);
verify(this.contextualAuthorizationManager).checkAccess(Right.PROGRAM);
}
@Test
......@@ -193,7 +195,7 @@ public void operationsChecksRightsWithOtherReferences() throws Exception
// Actual rights check
EntityReference wikiReference = documentReference.extractReference(EntityType.WIKI);
verify(this.mockAuthorization).checkAccess(Right.ADMIN, this.userReference, wikiReference);
verify(this.mockAuthorization).checkAccess(Right.PROGRAM, this.contentAuthorReference, null);
verify(this.contextualAuthorizationManager).checkAccess(Right.PROGRAM);
}
@Test
......@@ -202,8 +204,7 @@ public void hasWikiAdminButNoProgrammingCausesRightsCheckFailure() throws Except
EntityReference wikiReference = new WikiReference("someWiki");
// Mock
doThrow(AccessDeniedException.class).when(this.mockAuthorization).checkAccess(Right.PROGRAM,
this.contentAuthorReference, null);
doThrow(AccessDeniedException.class).when(this.contextualAuthorizationManager).checkAccess(Right.PROGRAM);
// Call
this.service.index(wikiReference);
......@@ -212,7 +213,7 @@ public void hasWikiAdminButNoProgrammingCausesRightsCheckFailure() throws Except
// Actual rights check
verify(this.mockAuthorization).checkAccess(Right.ADMIN, this.userReference, wikiReference);
verify(this.mockAuthorization).checkAccess(Right.PROGRAM, this.contentAuthorReference, null);
verify(this.contextualAuthorizationManager).checkAccess(Right.PROGRAM);
// Rights check failure
verify(this.logger).error(isNull(), any(AccessDeniedException.class));
......@@ -237,7 +238,7 @@ public void hasProgrammingButNoWikiAdminCausesRightsCheckFailure() throws Except
// Actual rights check
verify(this.mockAuthorization).checkAccess(Right.ADMIN, this.userReference, wikiReference);
// hasProgrammingRights does not really get to be called, since hasWikiAdminRights already failed at this point
verify(this.mockAuthorization, times(0)).checkAccess(Right.PROGRAM, this.contentAuthorReference, null);
verify(this.contextualAuthorizationManager, times(0)).checkAccess(Right.PROGRAM);
// Rights check failure.
verify(this.logger).error(isNull(), any(AccessDeniedException.class));
......@@ -262,7 +263,7 @@ public void openrationsOnMultipleReferencesOnTheSameWikiChecksRightsOnlyOnceForT
// Actual rights check
verify(this.mockAuthorization).checkAccess(Right.ADMIN, this.userReference, wikiReference);
verify(this.mockAuthorization).checkAccess(Right.PROGRAM, this.contentAuthorReference, null);
verify(this.contextualAuthorizationManager).checkAccess(Right.PROGRAM);
}
@Test
......@@ -286,7 +287,7 @@ public void openrationsOnMultipleReferencesOnDifferentWikisChecksRightsOnEachWik
verify(this.mockAuthorization).checkAccess(Right.ADMIN, this.userReference, wikiReference1);
verify(this.mockAuthorization).checkAccess(Right.ADMIN, this.userReference, wikiReference2);
verify(this.mockAuthorization).checkAccess(Right.ADMIN, this.userReference, wikiReference3);
verify(this.mockAuthorization, times(3)).checkAccess(Right.PROGRAM, this.contentAuthorReference, null);
verify(this.contextualAuthorizationManager, times(3)).checkAccess(Right.PROGRAM);
}
@Test
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment