in jspwiki-main/src/main/java/org/apache/wiki/auth/SecurityVerifier.java [189:295]
public String policyRoleTable()
{
final Principal[] roles = m_policyPrincipals;
final String wiki = m_engine.getApplicationName();
final String[] pages = new String[]
{ "Main", "Index", "GroupTest", "GroupAdmin" };
final String[] pageActions = new String[]
{ "view", "edit", "modify", "rename", "delete" };
final String[] groups = new String[]
{ "Admin", "TestGroup", "Foo" };
final String[] groupActions = new String[]
{ "view", "edit", null, null, "delete" };
final int rolesLength = roles.length;
final int pageActionsLength = pageActions.length;
// Calculate column widths
final String colWidth;
if( pageActionsLength > 0 && rolesLength > 0 ) {
colWidth = ( 67f / ( pageActionsLength * rolesLength ) ) + "%";
} else {
colWidth = "67%";
}
final StringBuilder s = new StringBuilder();
// Write the table header
s.append( "<table class=\"wikitable\" border=\"1\">\n" );
s.append( " <colgroup span=\"1\" width=\"33%\"/>\n" );
s.append( " <colgroup span=\"" ).append( pageActionsLength * rolesLength ).append( "\" width=\"" ).append( colWidth ).append( "\" align=\"center\"/>\n" );
s.append( " <tr>\n" );
s.append( " <th rowspan=\"2\" valign=\"bottom\">Permission</th>\n" );
for (final Principal principal : roles) {
s.append(" <th colspan=\"").append(pageActionsLength).append("\" title=\"").append(principal.getClass().getName()).append("\">").append(principal.getName()).append("</th>\n");
}
s.append( " </tr>\n" );
// Print a column for each role
s.append( " <tr>\n" );
for( int i = 0; i < rolesLength; i++ )
{
for( final String pageAction : pageActions )
{
final String action = pageAction.substring( 0, 1 );
s.append( " <th title=\"" ).append( pageAction ).append( "\">" ).append( action ).append( "</th>\n" );
}
}
s.append( " </tr>\n" );
// Write page permission tests first
for( final String page : pages ) {
s.append( " <tr>\n" );
s.append( " <td>PagePermission \"" ).append( wiki ).append( ":" ).append( page ).append( "\"</td>\n" );
for( final Principal role : roles ) {
for( final String pageAction : pageActions ) {
final Permission permission = PermissionFactory.getPagePermission( wiki + ":" + page, pageAction );
s.append( printPermissionTest( permission, role, 1 ) );
}
}
s.append( " </tr>\n" );
}
// Now do the group tests
for( final String group : groups ) {
s.append( " <tr>\n" );
s.append( " <td>GroupPermission \"" ).append( wiki ).append( ":" ).append( group ).append( "\"</td>\n" );
for( final Principal role : roles ) {
for( final String groupAction : groupActions ) {
Permission permission = null;
if( groupAction != null ) {
permission = new GroupPermission( wiki + ":" + group, groupAction );
}
s.append( printPermissionTest( permission, role, 1 ) );
}
}
s.append( " </tr>\n" );
}
// Now check the wiki-wide permissions
final String[] wikiPerms = new String[] { "createGroups", "createPages", "login", "editPreferences", "editProfile" };
for( final String wikiPerm : wikiPerms ) {
s.append( " <tr>\n" );
s.append( " <td>WikiPermission \"" ).append( wiki ).append( "\",\"" ).append( wikiPerm ).append( "\"</td>\n" );
for( final Principal role : roles ) {
final Permission permission = new WikiPermission( wiki, wikiPerm );
s.append( printPermissionTest( permission, role, pageActionsLength ) );
}
s.append( " </tr>\n" );
}
// Lastly, check for AllPermission
s.append( " <tr>\n" );
s.append( " <td>AllPermission \"" ).append( wiki ).append( "\"</td>\n" );
for( final Principal role : roles )
{
final Permission permission = new AllPermission( wiki );
s.append( printPermissionTest( permission, role, pageActionsLength ) );
}
s.append( " </tr>\n" );
// We're done!
s.append( "</table>" );
return s.toString();
}