Author: szimano Date: 2005-11-30 15:48:34 -0500 (Wed, 30 Nov 2005) New Revision: 1671 Modified: trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/Credentials.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/JBossPortalCredentials.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/MediaDataSource.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/ShotokuDataSource.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/SimpleCredentials.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPage.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/DataSourceException.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/WikiException.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AdminConsolePlugin.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AttachementInfoPlugin.java trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/WikiTest.java trunk/forge/portal-extensions/maven.xml Log: Roles for viewing/editing pages http://jira.jboss.com/jira/browse/JBWIKI-3 Modified login forcer to not to break if there is no forcelogin.xml Modified maven's help Modified: trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java =================================================================== --- trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/ForgeConfWatcher.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -7,8 +7,12 @@ import org.jboss.forge.common.service.NodeWatcher; import org.jboss.logging.Logger; +import org.jboss.shotoku.ContentManager; import org.jboss.shotoku.Node; +import org.jboss.shotoku.aop.Inject; import org.jboss.shotoku.aop.NodeInject; +import org.jboss.shotoku.exceptions.RepositoryException; +import org.jboss.shotoku.exceptions.ResourceDoesNotExist; import org.w3c.dom.Document; import org.w3c.dom.NodeList; @@ -22,17 +26,26 @@ private Logger log = Logger.getLogger(this.getClass()); - @NodeInject("/default/freezone/forcelogin.xml") + @Inject + private ContentManager contentManager; + private Node configuration; public Object init(String arg0) { - lastNodeModification = configuration.getLastModification(); + try { + configuration = contentManager.getRootDirectory().getNode("/default/freezone/forcelogin.xml"); + lastNodeModification = configuration.getLastModification(); + } catch (RepositoryException e) { + configuration = null; + } catch (ResourceDoesNotExist e) { + configuration = null; + } return parseConfiguration(); } public Object nodeUpdate(String arg0, Object arg1) { - if (lastNodeModification < configuration.getLastModification()) { + if (configuration != null && lastNodeModification < configuration.getLastModification()) { lastNodeModification = configuration.getLastModification(); return parseConfiguration(); } @@ -40,6 +53,9 @@ } private List<String> parseConfiguration() { + if (configuration == null) + return null; + try { List<String> loggedInOnly = new ArrayList<String>(); Modified: trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java =================================================================== --- trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/forge-freezone/src/java/org/jboss/forge/projects/freezone/Freezone.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -212,7 +212,7 @@ loggedInOnly = (List<String>) ForgeHelper.getForgeManagement() .getFromCache("", ForgeConfWatcher.class.getName()); - return (request.getUser() != null) || (!loggedInOnly.contains(cmsPath)); + return (request.getUser() != null) || (loggedInOnly != null && !loggedInOnly.contains(cmsPath)); } @SuppressWarnings("unchecked") Modified: trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/jbosswiki/forge-wiki/src/java/org/jboss/wiki/WikiPortlet.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -320,7 +320,7 @@ pageToShow = wikiEngine.getByName(wikiPage, editWikiContext); - if ((pageToShow != null) && (!pageToShow.isEditable())) { + if ((pageToShow != null) && (!pageToShow.isEditable(credentials))) { if (!credentials.isAdmin()) { showPage = true; } @@ -457,9 +457,9 @@ rReq.setAttribute("defaultPage", defaultPage); - rReq.setAttribute("isEditable", pageToShow.isEditable()); + rReq.setAttribute("isEditable", pageToShow.isEditable(credentials)); - rReq.setAttribute("isViewable", pageToShow.isViewable()); + rReq.setAttribute("isViewable", pageToShow.isViewable(credentials)); rReq.setAttribute("isAdmin", credentials.isAdmin()); Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/Credentials.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/Credentials.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/Credentials.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -21,6 +21,8 @@ */ package org.jboss.wiki; +import java.util.Set; + import javax.portlet.ActionRequest; import javax.portlet.RenderRequest; @@ -61,4 +63,15 @@ * @param rReq ActionRequest to set. */ public abstract void setActionRequest(ActionRequest rReq); + + /**Checks if user is in given role. + * @param role to check + * @return True if is in role, false otherwise. + */ + public abstract boolean isUserInRole(String role); + + /**Get Set of ALL role names. + * @return Set of role names or empty Set if there are no roles + */ + public abstract Set<String> getAllRoles(); } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/FileDataSource.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -34,6 +34,7 @@ import java.util.TreeSet; import org.jboss.logging.Logger; +import org.jboss.wiki.exceptions.DataSourceException; import org.jboss.wiki.exceptions.PageRenamingException; /** @@ -447,6 +448,87 @@ } } + + public void saveRolesSet(String uid, Set<String> roles, int action) throws DataSourceException { + File rolesFile; + try { + rolesFile = getRolesFile(uid, action); + + if (rolesFile == null) + throw new DataSourceException("Wrong action number"); + + } catch (IOException e) { + throw new DataSourceException(e); + } + + FileOutputStream fos = null; + try { + fos = new FileOutputStream(rolesFile); + + Properties roleProps = new Properties(); + + int i = 1; + + for (String roleName : roles) { + roleProps.setProperty("Role."+i++, roleName); + } + + roleProps.store(fos, SAVE_COMMENT); + + fos.close(); + } catch (FileNotFoundException e) { + throw new DataSourceException(e); + } catch (IOException e) { + try { + fos.close(); + } catch (IOException e1) { + throw new DataSourceException(e); + } + throw new DataSourceException(e); + } + + } + + private File getRolesFile(String uid, int action) throws IOException { + String fileName = (action == MediaDataSource.EDITABLE) ? "editRoles" : (action == MediaDataSource.VIEWABLE) ? "viewRoles" : null; + + if (fileName == null) + return null; + + File rolesFile = new File(pathToMedia + "/OLD/" + uid + "/" + fileName + ".properties"); + + if (!rolesFile.exists()) { + rolesFile.createNewFile(); + } + + return rolesFile; + } + + private Set<String> getRoles(String uid, int action) throws IOException { + Set<String> set = new TreeSet<String>(); + + File rolesFile = getRolesFile(uid, action); + + if (rolesFile == null) + return null; + + FileInputStream rolesFileIs = new FileInputStream(rolesFile); + + Properties roleProps = new Properties(); + + roleProps.load(rolesFileIs); + + int i = 1; + + while (roleProps.getProperty("Role."+i) != null) { + set.add(roleProps.getProperty("Role."+i)); + i++; + } + + rolesFileIs.close(); + + return set; + } public WikiPage getPage(String pageName) { // log.info("[WIKI:FileDataSource]: Getting new page: " + @@ -495,6 +577,17 @@ (pageMods & EDITABLE) == EDITABLE); page.setLength(pageFile.length()); + + try { + page.setEditRoles(getRoles(pageName, EDITABLE)); + } catch (IOException e) { + log.error("Couldn't read edit roles for page: "+pageName, e); + } + try { + page.setViewRoles(getRoles(pageName, VIEWABLE)); + } catch (IOException e) { + log.error("Couldn't read view roles for page: "+pageName, e); + } } } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/JBossPortalCredentials.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/JBossPortalCredentials.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/JBossPortalCredentials.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -22,9 +22,17 @@ package org.jboss.wiki; +import java.util.Set; +import java.util.TreeSet; + +import javax.naming.InitialContext; +import javax.naming.NamingException; import javax.portlet.ActionRequest; import javax.portlet.RenderRequest; +import org.jboss.portal.core.model.Role; +import org.jboss.portal.core.modules.ModuleException; +import org.jboss.portal.core.modules.RoleModule; import org.jboss.portlet.JBossActionRequest; import org.jboss.portlet.JBossRenderRequest; @@ -34,12 +42,17 @@ private String name = null; private boolean logedIn = false; private boolean isAdmin = false; + private Set<String> roles; + private Set<Role> allRoles; + private static final String roleModulesCtx = "java:portal/RoleModule"; + public JBossPortalCredentials() { } public void setRenderRequest(RenderRequest rReq) { + if (rReq instanceof JBossRenderRequest) { JBossRenderRequest jrReq = (JBossRenderRequest)rReq; @@ -47,10 +60,24 @@ name = jrReq.getUser().getUserName(); logedIn = true; isAdmin = jrReq.getUser().getRoleNames().contains(adminRoleName); + roles = jrReq.getUser().getRoleNames(); } else { name = "Unknown"; } + + InitialContext initialContext; + try { + initialContext = new InitialContext(); + RoleModule roleModule = (RoleModule)initialContext.lookup(roleModulesCtx); + allRoles = roleModule.findRoles(); + } catch (NamingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ModuleException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } } else { @@ -66,6 +93,7 @@ name = jrReq.getUser().getUserName(); logedIn = true; isAdmin = jrReq.getUser().getRoleNames().contains(adminRoleName); + roles = jrReq.getUser().getRoleNames(); } } @@ -84,4 +112,23 @@ return logedIn; } + @Override + public boolean isUserInRole(String role) { + if (roles != null) + return roles.contains(role); + else + return false; + } + + @Override + public Set<String> getAllRoles() { + Set<String> roleNames = new TreeSet<String>(); + + for (Role role : allRoles) { + roleNames.add(role.getName()); + } + + return roleNames; + } + } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/MediaDataSource.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/MediaDataSource.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/MediaDataSource.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -23,6 +23,8 @@ import java.util.Set; +import org.jboss.wiki.exceptions.DataSourceException; + /** * @author <a href="mailto:tom...@jb...">Tomasz Szymanski</a> * @@ -205,4 +207,11 @@ * @param wikiEngine */ public void setWikiEngine(WikiEngine wikiEngine); + + /**Saves roles for given page. + * @param uid Page uid to save roles to + * @param roles Roles to save + * @param action can be MediaDataSource.EDITABLE or MediaDataSource.VIEWABLE + */ + public void saveRolesSet(String uid, Set<String> roles, int action) throws DataSourceException; } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/ShotokuDataSource.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/ShotokuDataSource.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/ShotokuDataSource.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -38,6 +38,7 @@ import org.jboss.shotoku.exceptions.RepositoryException; import org.jboss.shotoku.exceptions.ResourceAlreadyExists; import org.jboss.shotoku.exceptions.ResourceDoesNotExist; +import org.jboss.wiki.exceptions.DataSourceException; import org.jboss.wiki.exceptions.PageRenamingException; /** @@ -1523,4 +1524,9 @@ saveDictionary(); } + + public void saveRolesSet(String uid, Set<String> roles, int action) throws DataSourceException { + // TODO Auto-generated method stub + + } } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/SimpleCredentials.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/SimpleCredentials.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/SimpleCredentials.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -21,6 +21,9 @@ */ package org.jboss.wiki; +import java.util.Set; +import java.util.TreeSet; + import javax.portlet.ActionRequest; import javax.portlet.RenderRequest; @@ -53,9 +56,18 @@ @Override public void setActionRequest(ActionRequest rReq) { - // TODO Auto-generated method stub - + // Do nothing } + @Override + public boolean isUserInRole(String role) { + return false; + } + @Override + public Set<String> getAllRoles() { + return new TreeSet<String>(); + } + + } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiEngine.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -38,6 +38,8 @@ import javax.portlet.ActionRequest; import javax.portlet.RenderRequest; + +import org.jboss.wiki.exceptions.DataSourceException; import org.jboss.wiki.exceptions.PageNotEditedException; import org.jboss.wiki.exceptions.PageRenamingException; import org.jboss.wiki.exceptions.WikiException; @@ -186,8 +188,8 @@ } } - if ((wikiContext != null) && (ret != null) && (!ret.isViewable()) - && (!wikiContext.getUser().isAdmin())) { + if (((wikiContext != null) && (ret != null) && (!ret.isViewable(wikiContext.getUser())) + && (!wikiContext.getUser().isAdmin()))) { s.release(); return new WikiPage(realPageName, null, "I am sorry, but you are not allowed to see this page", 0, @@ -945,4 +947,8 @@ return cred; } + + public void saveRolesSet(WikiPage page, Set<String> roles, int action) throws DataSourceException { + mediaDataSource.saveRolesSet(getUid(page.getName()), roles, action); + } } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPage.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPage.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/WikiPage.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -28,8 +28,11 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Set; +import java.util.TreeSet; + import org.jboss.logging.Logger; +import org.jboss.wiki.exceptions.DataSourceException; import org.jboss.wiki.exceptions.EditSessionExpired; import org.jboss.wiki.exceptions.PageNotEditedException; @@ -146,6 +149,10 @@ private boolean editable; private boolean viewable; + + private Set<String> editRoles; + + private Set<String> viewRoles; public WikiPage(String pageName, Credentials pageAuthor, String pageContent, int pageLastVersion, int thisVersion, @@ -155,6 +162,9 @@ tempVariables = new HashMap<String, Object>(); permVariables = new HashMap<String, Object>(); + editRoles = new TreeSet<String>(); + viewRoles = new TreeSet<String>(); + name = pageName; lastAuthor = pageAuthor; this.pageContent = pageContent; @@ -360,8 +370,11 @@ public Object clone() throws CloneNotSupportedException { WikiPage clonedPage = new WikiPage(getName(), getLastAuthor(), getPageContent(), getLastVersion(), getVersion(), - getEditDate(), wikiEngine,isViewable(),isEditable()); + getEditDate(), wikiEngine,viewable,editable); + clonedPage.setViewRoles(viewRoles); + clonedPage.setEditRoles(editRoles); + clonedPage.setLength(getLength()); return clonedPage; @@ -462,24 +475,37 @@ return wikiEngine.getAttachmentsSet(this); } - public boolean isEditable() { - return editable; + public boolean isEditable(Credentials user) { + log.info("Editable: "+user.isAdmin() + " " + editable + " " + checkRoles(user, editRoles)); + + return user.isAdmin() || (editable && checkRoles(user, editRoles)); } public void setEditable(boolean editable) { this.editable = editable; - wikiEngine.setPageMod(getName(), ((isViewable()) ? MediaDataSource.VIEWABLE : 0) + ((isEditable()) ? MediaDataSource.EDITABLE : 0)); + wikiEngine.setPageMod(getName(), ((viewable) ? MediaDataSource.VIEWABLE : 0) + ((editable) ? MediaDataSource.EDITABLE : 0)); } - public boolean isViewable() { + public boolean isViewable(Credentials user) { + + log.info("Viewable: "+ user.isAdmin() + " " + viewable + " " + checkRoles(user, viewRoles)); + + return user.isAdmin() || (viewable && checkRoles(user, viewRoles)); + } + + public boolean isViewableForAll() { return viewable; } + + public boolean isEditableForAll() { + return editable; + } public void setViewable(boolean viewable) { this.viewable = viewable; - wikiEngine.setPageMod(getName(), ((isViewable()) ? MediaDataSource.VIEWABLE : 0) + ((isEditable()) ? MediaDataSource.EDITABLE : 0)); + wikiEngine.setPageMod(getName(), ((viewable) ? MediaDataSource.VIEWABLE : 0) + ((editable) ? MediaDataSource.EDITABLE : 0)); } public void addExpiredSessionId(Integer id) throws PageNotEditedException { @@ -518,4 +544,70 @@ public void removePermVariable(String key) { permVariables.remove(key); } + + public void setEditRoles(Set<String> editRoles) { + this.editRoles = editRoles; + } + + public void setViewRoles(Set<String> viewRoles) { + this.viewRoles = viewRoles; + } + + public boolean containsEditRole(String role) { + return editRoles.contains(role); + } + + public boolean containsViewRole(String role) { + return viewRoles.contains(role); + } + + private boolean checkRoles(Credentials user, Set<String> roleSet) { + // if roles are empty - return true + if (roleSet == null || roleSet.isEmpty()) { + return true; + } + + // check if user is in any role + for (String role : roleSet) { + if (user.isUserInRole(role)) { + return true; + } + } + + //nothing found - return false + return false; + } + + public void switchEditRole(String role) { + if (editRoles.contains(role)) { + editRoles.remove(role); + } + else + editRoles.add(role); + + log.info("EDIT ROLES "+editRoles.isEmpty()); + + try { + wikiEngine.saveRolesSet(this, editRoles, MediaDataSource.EDITABLE); + } catch (DataSourceException e) { + log.error("Couldn't save edit roles for page: "+getName(), e); + } + } + + public void switchViewRole(String role) { + if (viewRoles.contains(role)) { + viewRoles.remove(role); + } + else + viewRoles.add(role); + + log.info("VIEW ROLES "+viewRoles.isEmpty()); + + try { + wikiEngine.saveRolesSet(this, viewRoles, MediaDataSource.VIEWABLE); + } catch (DataSourceException e) { + log.error("Couldn't save view roles for page: "+getName(), e); + } + + } } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/DataSourceException.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/DataSourceException.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/DataSourceException.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -9,4 +9,8 @@ public DataSourceException(String msg) { super(msg); } + + public DataSourceException(Exception e) { + super(e); + } } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/WikiException.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/WikiException.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/exceptions/WikiException.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -30,4 +30,8 @@ public WikiException (String msg) { super(msg); } + + public WikiException(Exception e) { + super(e); + } } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AdminConsolePlugin.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AdminConsolePlugin.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AdminConsolePlugin.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -42,8 +42,8 @@ String actionURL = (String) wikiSession.getAttribute("actionURL"); String errorMsg = ""; - boolean editable = wikiPage.isEditable(); - boolean viewable = wikiPage.isViewable(); + boolean editable = wikiPage.isEditableForAll(); + boolean viewable = wikiPage.isViewableForAll(); if (wikiSession.getAttribute("var1") != null) { @@ -55,14 +55,18 @@ editingPage.setEditable(Boolean .valueOf((String) wikiSession .getAttribute("var2"))); - editable = editingPage.isEditable(); + editable = editingPage.isEditableForAll(); } if (wikiSession.getAttribute("var3") != null) { editingPage.setViewable(Boolean .valueOf((String) wikiSession .getAttribute("var3"))); - viewable = editingPage.isViewable(); + viewable = editingPage.isViewableForAll(); } + } else if (wikiSession.getAttribute("var1").equals("editRole") && wikiSession.getAttribute("var2") != null) { + wikiPage.switchEditRole((String)wikiSession.getAttribute("var2")); + } else if (wikiSession.getAttribute("var1").equals("viewRole") && wikiSession.getAttribute("var2") != null) { + wikiPage.switchViewRole((String)wikiSession.getAttribute("var2")); } else if ((SHOWDELETE) && (wikiSession.getAttribute("var1") .equals("deletePage"))) { @@ -161,6 +165,8 @@ .append( "\" >DELETE THIS PAGE WITH SUBPAGES</a><br />\n<br />\n"); } + + } // switch editable button adminConsole.append("This page ").append( @@ -182,8 +188,34 @@ .append("\" >SWITCH IT ").append((viewable) ? "NOT" : "") .append(" VIEWABLE</a><br />\n"); + adminConsole.append("<br />\n<table><tr><th>Role name</th><th colspan=\"2\">View Roles</th><th colspan=\"2\">Edit Roles</th></tr>"); + + // role set + + Set<String> allRoles = credentials.getAllRoles(); + + for (String role : allRoles) { + String roleEd = "<a href=\""+actionURL+"&page="+wikiPage.getName()+"&var1=editRole&var2="+role+"\">"+((wikiPage.containsEditRole(role)) ? "Remove this role" : " Add this role") + "</a>"; + String roleVi = "<a href=\""+actionURL+"&page="+wikiPage.getName()+"&var1=viewRole&var2="+role+"\">"+((wikiPage.containsViewRole(role)) ? "Remove this role" : " Add this role") + "</a>"; + + adminConsole.append("<tr><td>") + .append(role) + .append("</td><td>") + .append((wikiPage.containsViewRole(role)) ? "<b>*</b>" : "") + .append("</td><td>") + .append(roleVi) + .append("</td><td>") + .append((wikiPage.containsEditRole(role)) ? "<b>*</b>" : "") + .append("</td><td>") + .append(roleEd) + .append("</td></tr>\n"); + } + + adminConsole.append("</table>\n"); + wikiPage.setPageContent(adminConsole.toString()); } + return wikiPage; } Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AttachementInfoPlugin.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AttachementInfoPlugin.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/java/org/jboss/wiki/plugins/AttachementInfoPlugin.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -40,7 +40,7 @@ + wikiPage.getName() + "/file:"; String actionURL = (String) wikiSession.getAttribute("actionURL"); - if (((wikiPage.isEditable())||(credentials.isAdmin()))&&(rollbackToVer != null) + if (((wikiPage.isEditable(credentials))||(credentials.isAdmin()))&&(rollbackToVer != null) && (credentials.isLoggedIn()) && (Integer.valueOf((String) rollbackToVer) < wikiEngine.getLastAttachmentVersion( wikiPage.getName(), attachementName))) { @@ -74,13 +74,13 @@ if (i != lastVer) { history.append("<td>"); - if ((credentials.isLoggedIn())&&((wikiPage.isEditable())||(credentials.isAdmin()))) + if ((credentials.isLoggedIn())&&((wikiPage.isEditable(credentials))||(credentials.isAdmin()))) history.append("<a href=\"").append(actionURL).append( "&type=fileInfo&page=").append(wikiPage.getName()) .append("&var1=").append(attachementName).append( "&var2=").append(i).append("\" >"); - if (wikiPage.isEditable()) { + if (wikiPage.isEditable(credentials)) { history.append((!credentials.isLoggedIn()) ? "<i>" : "").append( "Rollback version ").append(i).append( (!credentials.isLoggedIn()) ? " (after login)</i>" : ""); @@ -89,7 +89,7 @@ history.append("<i>This page IS NOT editable</i>"); } - if ((credentials.isLoggedIn())&&((wikiPage.isEditable())||(credentials.isAdmin()))) + if ((credentials.isLoggedIn())&&((wikiPage.isEditable(credentials))||(credentials.isAdmin()))) history.append("</a>"); history.append("<td>"); Modified: trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/WikiTest.java =================================================================== --- trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/WikiTest.java 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/jbosswiki/wiki-common/src/test/java/org/jboss/wiki/test/WikiTest.java 2005-11-30 20:48:34 UTC (rev 1671) @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Set; +import java.util.TreeSet; import javax.portlet.ActionRequest; import javax.portlet.RenderRequest; @@ -156,6 +157,20 @@ // Do nothing } + + @Override + public boolean isUserInRole(String role) { + return logedIn; + } + + @Override + public Set<String> getAllRoles() { + Set<String> roles = new TreeSet<String>(); + + roles.add("TestRole"); + + return roles; + } } Modified: trunk/forge/portal-extensions/maven.xml =================================================================== --- trunk/forge/portal-extensions/maven.xml 2005-11-30 20:48:36 UTC (rev 1670) +++ trunk/forge/portal-extensions/maven.xml 2005-11-30 20:48:34 UTC (rev 1671) @@ -130,7 +130,7 @@ 4. forge-login/to-copy/portal-login-ds.xml 5. federation-register/src/web/WEB-INF/faces-config (only for the JOSF portal). 6. jbosswiki/wiki-common/src/etc/org/jboss/wiki/filedatasource.properties -7. shotoku/shotoku-svn-service/src/etc/repositories.xml +7. shotoku/shotoku-base/src/etc/shotoku.properties Available goals: - help - prints this info |