Changeset 2802


Ignore:
Timestamp:
Oct 25, 2006, 11:18:11 AM (17 years ago)
Author:
Nicklas Nordborg
Message:

Made it possible to select the requested permissions for a plugin

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/core/net/sf/basedb/core/Permission.java

    r2722 r2802  
    154154
    155155  /**
     156    Expand the given set of permissions to make sure it includes
     157    all implicitely granted permissions. For example if the set contains
     158    WRITE it is exapnded to READ, USE, RESTRICTED_WRITE and WRITE.
     159   
     160    @param permissions The permissions to expand
     161    @return A new set containing the expanded permissions or null
     162      if the parameter is null
     163  */
     164  public static Set<Permission> expand(Set<Permission> permissions)
     165  {
     166    if (permissions == null) return null;
     167    return fromInt(grant(permissions));
     168  }
     169 
     170  /**
    156171    Checks if the given <code>Permission</code> is granted by the
    157172    <code>permissions</code> code.
  • trunk/src/core/net/sf/basedb/core/plugin/Permissions.java

    r2722 r2802  
    8282  }
    8383 
     84 
     85  public String toString()
     86  {
     87    return itemType + "; granted=" + alwaysGranted + "; maybe=" + maybeGranted;
     88  }
     89 
    8490}
  • trunk/www/admin/plugindefinitions/edit_plugin.jsp

    r2753 r2802  
    4242  import="net.sf.basedb.core.RoleKey"
    4343  import="net.sf.basedb.core.SystemItems"
     44  import="net.sf.basedb.core.plugin.Plugin"
     45  import="net.sf.basedb.core.plugin.Permissions"
    4446  import="net.sf.basedb.core.query.Restrictions"
    4547  import="net.sf.basedb.core.query.Orders"
     
    5355  import="java.util.Map"
    5456  import="java.util.List"
     57  import="java.util.Collection"
    5558%>
    5659<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
     
    7881  sb.append(" []");
    7982  return sb.toString();
     83}
     84private void appendPermissionLetter(StringBuilder sb, Permission p, String letter,
     85  Set<Permission> defined, Set<Permission> always, Set<Permission> maybe)
     86{
     87  if (defined.contains(p))
     88  {
     89    if (always != null && always.contains(p))
     90    {
     91      sb.append(letter.toUpperCase());
     92    }
     93    else if (maybe != null && maybe.contains(p))
     94    {
     95      sb.append(letter.toLowerCase());
     96    }
     97    else
     98    {
     99      sb.append("-");
     100    }
     101  }
    80102}
    81103%>
     
    94116  boolean isTrusted = true;
    95117  boolean usePermissions = false;
     118  Collection<Permissions> requestedPermissions = null;
    96119 
    97120  final int selectedAgentId = Values.getInt(request.getParameter("jobagent_id"), -1);
     
    127150    agentQuery.join(Hql.innerJoin("plugins", "p"));
    128151    agentQuery.restrict(Restrictions.eq(Hql.property("p", "pluginDefinition"), Hql.entity(plugin)));
     152
     153    Plugin thePlugin = plugin.newInstance(Plugin.class, null, sc, null, null);
     154    requestedPermissions = thePlugin.getPermissions();
    129155  }
    130156 
     
    490516      if ((defined & permission) > 0)
    491517      {
    492         p = (granted & permission) > 0 ? cc : ((denied & permission) > 0 ? '-' : '?');
     518        p = (granted & permission) > 0 ? cc.toUpperCase() : ((denied & permission) > 0 ? '-' : cc.toLowerCase());
    493519      }
    494520      return p;
     
    628654      }
    629655    }
     656    <%
     657    if (requestedPermissions != null && requestedPermissions.size() > 0)
     658    {
     659      %>
     660      function setRequestedPermissions()
     661      {
     662        var frm = document.forms['plugin'];
     663        // Reset all existing permissions
     664        for (var i = 0; i < frm.items.length; i++)
     665        {
     666          var itemType = frm.items[i].value;
     667          if (itemType)
     668          {
     669            frm[itemType+'_granted'].value = 0;
     670            frm[itemType+'_denied'].value = 255;
     671          }
     672        }
     673        // Set requested permissions
     674        <%
     675        for (Permissions pp : requestedPermissions)
     676        {
     677          Item ppType = pp.getItemType();
     678          Set<Permission> always = Permission.expand(pp.getAlwaysGranted());
     679          Set<Permission> maybe = Permission.expand(pp.getMaybeGranted());
     680          %>
     681          frm['<%=ppType.name()%>_granted'].value = <%=always == null ? 0 : PermissionUtil.getPermissionCode(always)%>;
     682          frm['<%=ppType.name()%>_denied'].value = <%=maybe == null ? 255 : 255 & ~PermissionUtil.getPermissionCode(maybe)%>;
     683          <%
     684        }
     685        %>
     686        // Update the list
     687        initPermissions();
     688      }
     689      <%
     690    }
     691    %>
    630692    </script>
    631693  </base:head>
     
    686748          <input type="radio" name="use_permissions" value="0"
    687749            <%=!usePermissions ? "checked" : ""%> onclick="usePermissionsOnClick()">no
     750          <%
     751          if (plugin == null)
     752          {
     753            %>
     754            <input type="radio" name="use_permissions" value="2"
     755              onclick="usePermissionsOnClick()">if requested by plugin
     756            <%
     757          }
     758          %>
    688759        </td>
    689760      </tr>
    690761    </table>
    691762
    692     <table >
     763    <table>
    693764    <tr valign="top">
    694765    <td>
     
    715786    </td>
    716787    <td>
    717       <b>Always grant</b><br>
    718       <input type="checkbox" name="grant_create" onClick="permissionOnClick(this)">Create<br>
    719       <input type="checkbox" name="grant_read" onClick="permissionOnClick(this)">Read<br>
    720       <input type="checkbox" name="grant_use" onClick="permissionOnClick(this)">Use<br>
    721       <input type="checkbox" name="grant_write" onClick="permissionOnClick(this)">Write<br>
    722       <input type="checkbox" name="grant_delete" onClick="permissionOnClick(this)">Delete<br>
    723       <input type="checkbox" name="grant_set_owner" onClick="permissionOnClick(this)">Set owner<br>
    724       <input type="checkbox" name="grant_set_permission" onClick="permissionOnClick(this)">Set permission<br>
    725     </td>
    726     <td>
    727       <b>Always deny</b><br>
    728       <input type="checkbox" name="deny_create" onClick="permissionOnClick(this)">Create<br>
    729       <input type="checkbox" name="deny_read" onClick="permissionOnClick(this)">Read<br>
    730       <input type="checkbox" name="deny_use" onClick="permissionOnClick(this)">Use<br>
    731       <input type="checkbox" name="deny_write" onClick="permissionOnClick(this)">Write<br>
    732       <input type="checkbox" name="deny_delete" onClick="permissionOnClick(this)">Delete<br>
    733       <input type="checkbox" name="deny_set_owner" onClick="permissionOnClick(this)">Set owner<br>
    734       <input type="checkbox" name="deny_set_permission" onClick="permissionOnClick(this)">Set permission<br>
     788      <table>
     789      <tr><td>
     790        <b>Always grant</b><br>
     791        <input type="checkbox" name="grant_create" onClick="permissionOnClick(this)">Create<br>
     792        <input type="checkbox" name="grant_read" onClick="permissionOnClick(this)">Read<br>
     793        <input type="checkbox" name="grant_use" onClick="permissionOnClick(this)">Use<br>
     794        <input type="checkbox" name="grant_write" onClick="permissionOnClick(this)">Write<br>
     795        <input type="checkbox" name="grant_delete" onClick="permissionOnClick(this)">Delete<br>
     796        <input type="checkbox" name="grant_set_owner" onClick="permissionOnClick(this)">Set owner<br>
     797        <input type="checkbox" name="grant_set_permission" onClick="permissionOnClick(this)">Set permission
     798      </td>
     799      <td>
     800        <b>Always deny</b><br>
     801        <input type="checkbox" name="deny_create" onClick="permissionOnClick(this)">Create<br>
     802        <input type="checkbox" name="deny_read" onClick="permissionOnClick(this)">Read<br>
     803        <input type="checkbox" name="deny_use" onClick="permissionOnClick(this)">Use<br>
     804        <input type="checkbox" name="deny_write" onClick="permissionOnClick(this)">Write<br>
     805        <input type="checkbox" name="deny_delete" onClick="permissionOnClick(this)">Delete<br>
     806        <input type="checkbox" name="deny_set_owner" onClick="permissionOnClick(this)">Set owner<br>
     807        <input type="checkbox" name="deny_set_permission" onClick="permissionOnClick(this)">Set permission
     808      </td>
     809      <%
     810      if (requestedPermissions != null && requestedPermissions.size() > 0)
     811      {
     812        %>
     813        <td>
     814        <b>Requested by plugin</b><br>
     815        <table>
     816        <%
     817        for (Permissions pp : requestedPermissions)
     818        {
     819          Item ppType = pp.getItemType();
     820          Set<Permission> always = Permission.expand(pp.getAlwaysGranted());
     821          Set<Permission> maybe = Permission.expand(pp.getMaybeGranted());
     822          Set<Permission> defined = ppType.getDefinedPermissions();
     823          StringBuilder sb = new StringBuilder();
     824          sb.append("[");
     825          appendPermissionLetter(sb, Permission.CREATE, "C", defined, always, maybe);
     826          appendPermissionLetter(sb, Permission.READ, "R", defined, always, maybe);
     827          appendPermissionLetter(sb, Permission.USE, "U", defined, always, maybe);
     828          appendPermissionLetter(sb, Permission.WRITE, "W", defined, always, maybe);
     829          appendPermissionLetter(sb, Permission.DELETE, "D", defined, always, maybe);
     830          appendPermissionLetter(sb, Permission.SET_OWNER, "O", defined, always, maybe);
     831          appendPermissionLetter(sb, Permission.SET_PERMISSION, "P", defined, always, maybe);
     832          sb.append("]");
     833          %>
     834          <tr>
     835            <td><%=ppType%></td>
     836            <td><%=sb.toString()%></td>
     837          </tr>
     838          <%
     839        }
     840        %>
     841        </table>
     842        <table><tr><td>
     843        <base:button title="Use requested permissions" onclick="setRequestedPermissions()"
     844          tooltip="Use the permissions requested by the plugin." />
     845        </td></tr></table>
     846        </td>
     847        <%
     848      }
     849      %>
     850      </tr>
     851      </table>
     852      <b>Capital letters</b> = Permission is always granted<br>
     853      <b>Small letters</b> = Permission is only granted if logged in user
     854        has that permission
     855     
    735856    </td>
    736857    </tr>
    737858    </table>
     859   
     860   
    738861    </t:tab>
    739862   
  • trunk/www/admin/plugindefinitions/index.jsp

    r2753 r2802  
    134134    String className = Values.getStringOrNull(request.getParameter("className"));
    135135    String jarPath = Values.getStringOrNull(request.getParameter("jarPath"));
     136    int usePermissions = Values.getInt(request.getParameter("use_permissions"));
    136137    if (plugin == null)
    137138    {
    138       plugin = PluginDefinition.getNew(dc, className, jarPath, false);
     139      plugin = PluginDefinition.getNew(dc, className, jarPath, usePermissions == 2);
    139140      message = "Plugin created";
    140141      dc.saveItem(plugin);
     
    143144    {
    144145      dc.reattachItem(plugin);
    145       plugin.loadPluginInformation(jarPath, className, false);
     146      plugin.loadPluginInformation(jarPath, className, usePermissions == 2);
    146147      message = "Plugin updated";
    147148    }
     
    160161      plugin.setPermissions(key, PermissionUtil.getPermissions(granted), PermissionUtil.getPermissions(denied));
    161162    }
    162     plugin.setUsePermissions(Values.getBoolean(request.getParameter("use_permissions")));
     163    plugin.setUsePermissions(usePermissions != 0);
    163164   
    164165    // Installed on job agents
  • trunk/www/admin/plugindefinitions/view_plugin.jsp

    r2753 r2802  
    7070    Set<Permission> defined = itemType.getDefinedPermissions();
    7171    StringBuilder sb = new StringBuilder();
    72     if (defined.contains(Permission.CREATE)) sb.append(granted.contains(Permission.CREATE) ? "C" : denied.contains(Permission.CREATE) ? "-" : "?");
    73     if (defined.contains(Permission.READ)) sb.append(granted.contains(Permission.READ) ? "R" :  denied.contains(Permission.READ) ? "-" : "?");
    74     if (defined.contains(Permission.USE)) sb.append(granted.contains(Permission.USE) ? "U" :  denied.contains(Permission.USE) ? "-" : "?");
    75     if (defined.contains(Permission.WRITE)) sb.append(granted.contains(Permission.WRITE) ? "W" :  denied.contains(Permission.WRITE) ? "-" : "?");
    76     if (defined.contains(Permission.DELETE)) sb.append(granted.contains(Permission.DELETE) ? "D" :  denied.contains(Permission.DELETE) ? "-" : "?");
    77     if (defined.contains(Permission.SET_OWNER)) sb.append(granted.contains(Permission.SET_OWNER) ? "O" :  denied.contains(Permission.SET_OWNER) ? "-" : "?");
    78     if (defined.contains(Permission.SET_PERMISSION)) sb.append(granted.contains(Permission.SET_PERMISSION) ? "P" :  denied.contains(Permission.SET_PERMISSION) ? "-" : "?");
     72    if (defined.contains(Permission.CREATE)) sb.append(granted.contains(Permission.CREATE) ? "C" : denied.contains(Permission.CREATE) ? "-" : "c");
     73    if (defined.contains(Permission.READ)) sb.append(granted.contains(Permission.READ) ? "R" :  denied.contains(Permission.READ) ? "-" : "r");
     74    if (defined.contains(Permission.USE)) sb.append(granted.contains(Permission.USE) ? "U" :  denied.contains(Permission.USE) ? "-" : "u");
     75    if (defined.contains(Permission.WRITE)) sb.append(granted.contains(Permission.WRITE) ? "W" :  denied.contains(Permission.WRITE) ? "-" : "w");
     76    if (defined.contains(Permission.DELETE)) sb.append(granted.contains(Permission.DELETE) ? "D" :  denied.contains(Permission.DELETE) ? "-" : "d");
     77    if (defined.contains(Permission.SET_OWNER)) sb.append(granted.contains(Permission.SET_OWNER) ? "O" :  denied.contains(Permission.SET_OWNER) ? "-" : "o");
     78    if (defined.contains(Permission.SET_PERMISSION)) sb.append(granted.contains(Permission.SET_PERMISSION) ? "P" :  denied.contains(Permission.SET_PERMISSION) ? "-" : "p");
    7979    return sb.toString();
    8080  }
     
    554554        <tr class="panel">
    555555        <td colspan="99" class="panel">
    556         <b>C</b> = Create, <b>R</b> = Read, <b>U</b> = Use,
    557         <b>W</b> = Write, <b>D</b> = Delete, <b>O</b> = Change owner, <b>P</b> = Change permissions,
    558         <b>?</b> = Logged in user's permission, <b>-</b> = Denied
     556        Capital letters = Permission is always granted, Small letters = Permission is only granted if logged in user
     557        has that permission<br>
     558        <b>C/c</b> = Create, <b>R/r</b> = Read, <b>U/u</b> = Use,
     559        <b>W/w</b> = Write, <b>D/d</b> = Delete, <b>O/o</b> = Change owner,
     560        <b>P/p</b> = Change permissions
    559561        </td>
    560562        </tr>
Note: See TracChangeset for help on using the changeset viewer.