web/component.py
changeset 10075 136b5f995f8e
parent 10044 5907c2b0acd7
child 10510 51321946da37
--- a/web/component.py	Mon Dec 01 11:13:10 2014 +0100
+++ b/web/component.py	Thu Mar 20 10:41:22 2014 +0100
@@ -598,27 +598,41 @@
         w(self.rdef.rtype.display_name(self._cw, self.role,
                                        context=self.entity.cw_etype))
 
+    def add_js_css(self):
+        self._cw.add_js(('jquery.ui.js', 'cubicweb.widgets.js'))
+        self._cw.add_js(('cubicweb.ajax.js', 'cubicweb.ajax.box.js'))
+        self._cw.add_css('jquery.ui.css')
+        return True
+
     def render_body(self, w):
         req = self._cw
         entity = self.entity
         related = entity.related(self.rtype, self.role)
         if self.role == 'subject':
             mayadd = self.rdef.has_perm(req, 'add', fromeid=entity.eid)
-            maydel = self.rdef.has_perm(req, 'delete', fromeid=entity.eid)
         else:
             mayadd = self.rdef.has_perm(req, 'add', toeid=entity.eid)
-            maydel = self.rdef.has_perm(req, 'delete', toeid=entity.eid)
-        if mayadd or maydel:
-            req.add_js(('jquery.ui.js', 'cubicweb.widgets.js'))
-            req.add_js(('cubicweb.ajax.js', 'cubicweb.ajax.box.js'))
-            req.add_css('jquery.ui.css')
+        js_css_added = False
+        if mayadd:
+            js_css_added = self.add_js_css()
         _ = req._
         if related:
+            maydel = None
             w(u'<table class="ajaxEditRelationTable">')
             for rentity in related.entities():
+                if maydel is None:
+                    # Only check permission for the first related.
+                    if self.role == 'subject':
+                        fromeid, toeid = entity.eid, rentity.eid
+                    else:
+                        fromeid, toeid = rentity.eid, entity.eid
+                    maydel = self.rdef.has_perm(
+                            req, 'delete', fromeid=fromeid, toeid=toeid)
                 # for each related entity, provide a link to remove the relation
                 subview = rentity.view(self.item_vid)
                 if maydel:
+                    if not js_css_added:
+                        js_css_added = self.add_js_css()
                     jscall = unicode(js.ajaxBoxRemoveLinkedEntity(
                         self.__regid__, entity.eid, rentity.eid,
                         self.fname_remove,