Changeset 7206


Ignore:
Timestamp:
Oct 19, 2016, 10:25:47 AM (5 years ago)
Author:
Nicklas Nordborg
Message:

References #2033: Permissions for annotating items may be incorrectly implemented

Changes in the web interface (Annotations tab) so that the "edit" icon is only visible if the user has permission to modify or create an annotation.

The edit dialog will still list all annotations but editing is disabled for read-only annotations.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/clients/web/net/sf/basedb/clients/web/AnnotationUtil.java

    r6965 r7206  
    4141import net.sf.basedb.core.ItemSubtype;
    4242import net.sf.basedb.core.Nameable;
     43import net.sf.basedb.core.Permission;
    4344import net.sf.basedb.core.Type;
    4445import net.sf.basedb.core.Unit;
     
    170171    json.put("source", a == null ? (inherited == null ? "PRIMARY" : "INHERITED") : a.getSource().name());
    171172
     173    // Flag indicating if the user has permission to modify the annotation
     174    json.put("annotatePermission", a != null ? a.hasPermission(Permission.WRITE) : at.hasPermission(Permission.USE));
     175   
    172176    JSONObject jsonAt = new JSONObject();
    173177    json.put("annotationType", jsonAt);
  • trunk/www/common/annotations/annotate.js

    r7097 r7206  
    150150    var div = document.createElement('div');
    151151    div.className = 'param interactable';
     152    if (!entry.annotatePermission) div.className += ' disabled';
    152153    div.id = entry.id;
    153154    div.title = Strings.encodeTags(at.name);
     
    156157    var icon = annotate.getIcon(entry);
    157158   
    158     html += '<input type="checkbox" style="float: right;" id="check.'+entry.id+'">';
     159    if (entry.annotatePermission)
     160    {
     161      html += '<input type="checkbox" style="float: right;" id="check.'+entry.id+'">';
     162    }
    159163    html += '<span class="icon">';
    160164    html += '<img id="icon.'+entry.id+'" src="../../images/'+icon+'">';
     
    309313      classes.push(selectedAnnotation.source);
    310314      if (at.description) classes.push('has-description');
     315      if (!selectedAnnotation.annotatePermission) classes.push('no-annotate-permission');
    311316     
    312317      if (selectedAnnotation.source != 'PRIMARY')
     
    721726      {
    722727        var checkbox = Doc.element('check.'+entry.id);
    723         if (first == null) first = checkbox.checked;
    724         checkbox.checked = specialKey ? !first : !checkbox.checked;
     728        if (checkbox)
     729        {
     730          if (first == null) first = checkbox.checked;
     731          checkbox.checked = specialKey ? !first : !checkbox.checked;
     732        }
    725733      }
    726734    }
     
    741749      {
    742750        var checkbox = Doc.element('check.'+entry.id);
    743         if (first == null) first = checkbox.checked;
    744         checkbox.checked = specialKey ? !first : !checkbox.checked;
     751        if (checkbox)
     752        {
     753          if (first == null) first = checkbox.checked;
     754          checkbox.checked = specialKey ? !first : !checkbox.checked;
     755        }
    745756      }
    746757    }
     
    763774    {
    764775      var entry = annotations[i];
    765       if (Doc.element('check.'+entry.id).checked)
     776      var checkbox = Doc.element('check.'+entry.id);
     777      if (checkbox && checkbox.checked)
    766778      {
    767779        numChecked++;
     
    12101222    {
    12111223      var entry = annotations[entryNo];
    1212       if (entry.modified)
     1224      if (entry.annotatePermission && entry.modified)
    12131225      {
    12141226        var tmp = {};
  • trunk/www/common/annotations/annotate.jsp

    r6955 r7206  
    462462  }
    463463  #selected-container.multiple #multiple-container
     464  {
     465    display: block;
     466  }
     467 
     468  #selected-container.no-annotate-permission #input-container
     469  {
     470    pointer-events: none;
     471    cursor: default;
     472    opacity: 0.5;
     473    filter: url(filters.svg#grayscale);
     474  }
     475  #selected-container.no-annotate-permission #no-annotate-permission
    464476  {
    465477    display: block;
     
    600612          <%
    601613        }
    602         if (!writePermission)
    603         {
    604           %>
    605           <div class="messagecontainer error">You do not have permission to change this information</div>
    606           <%
    607         }
    608614        %>
    609        
    610615        <div id="selected-container">
    611616          <div id="none-selected" class="messagecontainer note">
    612617            <base:icon image="goback.png" /> Select an annotation.
     618          </div>
     619
     620          <div id="no-annotate-permission" class="messagecontainer error">
     621            You do not have permission to change this annotation.
    613622          </div>
    614623
  • trunk/www/common/annotations/list_annotations.jsp

    r6962 r7206  
    277277            for (AnnotationType at : annotationTypes)
    278278            {
     279              // Permission for creating a new annotation
     280              boolean annotatePermission = writePermission & at.hasPermission(Permission.USE);
    279281              AnnotationSnapshot a = existing != null ? existing.get(at) : null;
    280282              List<?> values = null;
     
    283285              {
    284286                Annotation ann = a.getThisAnnotation(dc);
     287                // Permission on this annotation
     288                annotatePermission = ann.hasPermission(Permission.WRITE);
    285289                values = a.getActualValues(ann.getUnitConverter(null), ann.getValueType());
    286290                formatter = FormatterFactory.getAnnotationFormatter(sc, ann, null);
     
    321325                      data-item-id="<%=itemId %>"
    322326                      tooltip="Modify the values of this annotation"
    323                       visible="<%=writePermission %>"
     327                      visible="<%=annotatePermission %>"
    324328                    />
    325329                  </tbl:cell>
     
    397401              for (AnnotationType at : protocolParameters)
    398402              {
     403                // Permission for creating a new annotation
     404                boolean annotatePermission = writePermission & at.hasPermission(Permission.USE);
    399405                AnnotationSnapshot a = existing != null ? existing.get(at) : null;
    400406                Formatter formatter = null;
     
    403409                {
    404410                  Annotation ann = a.getThisAnnotation(dc);
     411                  // Permission on this annotation
     412                  annotatePermission = ann.hasPermission(Permission.WRITE);
    405413                  values = a.getActualValues(ann.getUnitConverter(null), ann.getValueType());
    406414                  formatter = FormatterFactory.getAnnotationFormatter(sc, ann, null);
     
    419427                      <base:icon image="edit.png" subclass="edit-annotation auto-init link"
    420428                        data-auto-init="edit-annotation"
    421                           data-annotation="<%=a!=null ? a.getThisAnnotationId() : 0 %>"
    422                           data-annotation-type="<%=at.getId()%>"
    423                           data-item-type="<%=itemType.name()%>"
    424                           data-item-id="<%=itemId %>"
    425                           tooltip="Modify the values of this protocol parameter"
    426                         visible="<%=writePermission %>"
     429                        data-annotation="<%=a!=null ? a.getThisAnnotationId() : 0 %>"
     430                        data-annotation-type="<%=at.getId()%>"
     431                        data-item-type="<%=itemType.name()%>"
     432                        data-item-id="<%=itemId %>"
     433                        tooltip="Modify the values of this protocol parameter"
     434                        visible="<%=annotatePermission %>"
    427435                      />
    428436                    </tbl:cell>
     
    503511            for (AnnotationSnapshot a : inheritedAnnotations)
    504512            {
     513              boolean annotatePermission = a.hasPermission(dc, Permission.WRITE);
    505514              AnnotationType at = a.getAnnotationType(dc);
    506515              AnnotationSnapshot from = a.getInheritedFrom();
     
    561570                    data-item-id="<%=itemId %>"
    562571                    tooltip="Modify the values of this annotation"
    563                     visible="<%=writePermission %>"
     572                    visible="<%=annotatePermission %>"
    564573                  />
    565574                </tbl:cell>
Note: See TracChangeset for help on using the changeset viewer.