📄 authorizationmanagertest.java
字号:
package com.ecyrd.jspwiki.auth;import java.io.File;import java.security.Permission;import java.security.Principal;import java.util.Properties;import junit.framework.Test;import junit.framework.TestCase;import junit.framework.TestSuite;import org.apache.commons.lang.ArrayUtils;import com.ecyrd.jspwiki.*;import com.ecyrd.jspwiki.attachment.Attachment;import com.ecyrd.jspwiki.auth.acl.UnresolvedPrincipal;import com.ecyrd.jspwiki.auth.authorize.Group;import com.ecyrd.jspwiki.auth.authorize.GroupManager;import com.ecyrd.jspwiki.auth.authorize.Role;import com.ecyrd.jspwiki.auth.permissions.AllPermission;import com.ecyrd.jspwiki.auth.permissions.PagePermission;import com.ecyrd.jspwiki.auth.permissions.PermissionFactory;import com.ecyrd.jspwiki.auth.permissions.WikiPermission;import com.ecyrd.jspwiki.auth.user.UserProfile;import com.ecyrd.jspwiki.providers.ProviderException;/** * Tests the AuthorizationManager class. * @author Janne Jalkanen */public class AuthorizationManagerTest extends TestCase{ private AuthorizationManager m_auth; private TestEngine m_engine; private GroupManager m_groupMgr; private WikiSession m_session; private static class TestPrincipal implements Principal { private final String m_name; public TestPrincipal( String name ) { m_name = name; } public String getName() { return m_name; } } public AuthorizationManagerTest( String s ) { super( s ); } public static Test suite() { TestSuite suite = new TestSuite( "Authorization Manager test" ); suite.addTestSuite( AuthorizationManagerTest.class ); return suite; } public void setUp() throws Exception { Properties props = new Properties(); props.load( TestEngine.findTestProperties() ); // Make sure we are using the default security policy file jspwiki.policy props.put( AuthorizationManager.POLICY, AuthorizationManager.DEFAULT_POLICY ); // Initialize the test engine m_engine = new TestEngine( props ); m_auth = m_engine.getAuthorizationManager(); m_groupMgr = m_engine.getGroupManager(); m_session = WikiSessionTest.adminSession( m_engine ); } /** * Tests the default policy. Anonymous users can read, Authenticated can * edit, etc. Uses the default tests/etc/jspwiki.policy file installed by * the JRE at startup. * @throws Exception */ public void testDefaultPermissions() throws Exception { // Save a page without an ACL m_engine.saveText( "TestDefaultPage", "Foo" ); Permission view = PermissionFactory.getPagePermission( "*:TestDefaultPage", "view" ); Permission edit = PermissionFactory.getPagePermission( "*:TestDefaultPage", "edit" ); WikiSession session; // Alice is asserted session = WikiSessionTest.assertedSession( m_engine, Users.ALICE ); assertTrue( "Alice view", m_auth.checkPermission( session, view ) ); assertTrue( "Alice edit", m_auth.checkPermission( session, edit ) ); // Bob is logged in session = WikiSessionTest.authenticatedSession( m_engine, Users.BOB, Users.BOB_PASS ); assertTrue( "Bob view", m_auth.checkPermission( session, view ) ); assertTrue( "Bob edit", m_auth.checkPermission( session, edit ) ); // Delete the test page try { m_engine.deletePage( "TestDefaultPage" ); } catch( ProviderException e ) { assertTrue( false ); } } public void testGetRoles() throws Exception { WikiSession session; Principal[] principals; // Create a new "asserted" session for Bob session = WikiSessionTest.assertedSession( m_engine, Users.BOB ); // Set up a group without Bob in it Group test = m_groupMgr.parseGroup( "Test", "Alice \n Charlie", true ); m_groupMgr.setGroup( m_session, test ); // Bob should have two roles: ASSERTED and ALL principals = session.getRoles(); assertTrue( "Bob in ALL", ArrayUtils.contains( principals, Role.ALL ) ); assertTrue( "Bob in ASSERTED", ArrayUtils.contains( principals, Role.ASSERTED ) ); assertFalse( "Bob not in ANONYMOUS", ArrayUtils.contains( principals, Role.ANONYMOUS ) ); assertFalse( "Bob not in Test", ArrayUtils.contains( principals, test.getPrincipal() ) ); // Re-save group "Test" with Bob as a member test = m_groupMgr.parseGroup( "Test", "Alice \n Bob \nCharlie", true ); m_groupMgr.setGroup( m_session, test ); // Bob not authenticated: should still have only two romes principals = session.getRoles(); assertTrue( "Bob in ALL", ArrayUtils.contains( principals, Role.ALL ) ); assertTrue( "Bob in ASSERTED", ArrayUtils.contains( principals, Role.ASSERTED ) ); assertFalse( "Bob not in ANONYMOUS", ArrayUtils.contains( principals, Role.ANONYMOUS ) ); assertFalse( "Bob in Test", ArrayUtils.contains( principals, test.getPrincipal() ) ); // Elevate Bob to "authenticated" status session = WikiSessionTest.authenticatedSession( m_engine, Users.BOB, Users.BOB_PASS ); // Re-save the group; Bob should possess the role now test = m_groupMgr.parseGroup( "Test", "Alice \n Bob \n Charlie", true ); m_groupMgr.setGroup( m_session, test ); principals = session.getRoles(); assertTrue( "Bob in ALL", ArrayUtils.contains( principals, Role.ALL ) ); assertFalse( "Bob in ASSERTED", ArrayUtils.contains( principals, Role.ASSERTED ) ); assertFalse( "Bob not in ANONYMOUS", ArrayUtils.contains( principals, Role.ANONYMOUS ) ); assertTrue( "Bob in Test", ArrayUtils.contains( principals, test.getPrincipal() ) ); // Cleanup m_groupMgr.removeGroup( "Test" ); } public void testAssertedSession() throws Exception { // Create Alice and her roles Principal alice = new WikiPrincipal( Users.ALICE ); Role it = new Role( "IT" ); Role engineering = new Role( "Engineering" ); Role finance = new Role( "Finance" ); Principal admin = new GroupPrincipal( "Admin" ); WikiSession session = WikiSessionTest.assertedSession( m_engine, Users.ALICE, new Principal[] { it, engineering, admin } ); // Create two groups: Alice should be part of group Bar, but not Foo Group fooGroup = m_groupMgr.parseGroup( "Foo", "", true ); Group barGroup = m_groupMgr.parseGroup( "Bar", "", true ); barGroup.add( alice ); m_groupMgr.setGroup( m_session, fooGroup ); m_groupMgr.setGroup( m_session, barGroup ); // Test user principal posession: Alice isn't considered to // have the "Alice" principal because she's not authenticated assertFalse ( "Alice has Alice", m_auth.hasRoleOrPrincipal( session, new WikiPrincipal( Users.ALICE ) ) ); assertFalse ( "Alice has Alice", m_auth.hasRoleOrPrincipal( session, new TestPrincipal( Users.ALICE ) ) ); assertFalse( "Alice not has Bob", m_auth.hasRoleOrPrincipal( session, new WikiPrincipal( Users.BOB ) ) ); assertFalse( "Alice not has Bob", m_auth.hasRoleOrPrincipal( session, new TestPrincipal( Users.BOB ) ) ); // Built-in role memberships assertTrue( "Alice in ALL", m_auth.hasRoleOrPrincipal( session, Role.ALL ) ); assertFalse( "Alice not in ANONYMOUS", m_auth.hasRoleOrPrincipal( session, Role.ANONYMOUS ) ); assertTrue( "Alice in ASSERTED", m_auth.hasRoleOrPrincipal( session, Role.ASSERTED ) ); assertFalse( "Alice not in AUTHENTICATED", m_auth.hasRoleOrPrincipal( session, Role.AUTHENTICATED ) ); // Custom roles should be FALSE because Alice is asserted assertFalse( "Alice not in IT", m_auth.hasRoleOrPrincipal( session, it ) ); assertFalse( "Alice not in Engineering", m_auth.hasRoleOrPrincipal( session, engineering ) ); assertFalse( "Alice not in Finance", m_auth.hasRoleOrPrincipal( session, finance ) ); // Group memberships should be FALSE because Alice is asserted assertFalse( "Alice not in Foo", m_auth.hasRoleOrPrincipal( session, fooGroup.getPrincipal() ) ); assertFalse( "Alice not in Bar", m_auth.hasRoleOrPrincipal( session, barGroup.getPrincipal() ) ); // Clean up m_groupMgr.removeGroup( "Foo" ); m_groupMgr.removeGroup( "Bar" ); } public void testAuthenticatedSession() throws Exception { // Create Alice and her roles Principal alice = new WikiPrincipal( Users.ALICE ); Role it = new Role( "IT" ); Role engineering = new Role( "Engineering" ); Role finance = new Role( "Finance" ); Principal admin = new GroupPrincipal( "Admin" ); WikiSession session = WikiSessionTest.containerAuthenticatedSession( m_engine, Users.ALICE, new Principal[] { it, engineering, admin } ); // Create two groups: Alice should be part of group Bar, but not Foo Group fooGroup = m_groupMgr.parseGroup( "Foo", "", true ); Group barGroup = m_groupMgr.parseGroup( "Bar", "", true ); barGroup.add( alice ); m_groupMgr.setGroup( m_session, fooGroup ); m_groupMgr.setGroup( m_session, barGroup ); // Test user principal posession: user principals of different // types should still be "the same" if their names are equal assertTrue( "Alice has Alice", m_auth.hasRoleOrPrincipal( session, new WikiPrincipal( Users.ALICE ) ) ); assertTrue( "Alice has Alice", m_auth.hasRoleOrPrincipal( session, new TestPrincipal( Users.ALICE ) ) ); assertFalse( "Alice not has Bob", m_auth.hasRoleOrPrincipal( session, new WikiPrincipal( Users.BOB ) ) ); assertFalse( "Alice not has Bob", m_auth.hasRoleOrPrincipal( session, new TestPrincipal( Users.BOB ) ) ); // Built-in role membership assertTrue( "Alice in ALL", m_auth.hasRoleOrPrincipal( session, Role.ALL ) ); assertFalse( "Alice not in ANONYMOUS", m_auth.hasRoleOrPrincipal( session, Role.ANONYMOUS ) ); assertFalse( "Alice not in ASSERTED", m_auth.hasRoleOrPrincipal( session, Role.ASSERTED ) ); assertTrue( "Alice in AUTHENTICATED", m_auth.hasRoleOrPrincipal( session, Role.AUTHENTICATED ) ); // Custom roles assertTrue( "Alice in IT", m_auth.hasRoleOrPrincipal( session, it ) ); assertTrue( "Alice in Engineering", m_auth.hasRoleOrPrincipal( session, engineering ) ); assertFalse( "Alice not in Finance", m_auth.hasRoleOrPrincipal( session, finance ) ); // Group memberships assertFalse( "Alice not in Foo", m_auth.hasRoleOrPrincipal( session, fooGroup.getPrincipal() ) );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -