web/views/management.py
changeset 7784 7f5c455ec7d1
parent 6683 68cfebd3b9f3
child 7782 40a49f4350a5
equal deleted inserted replaced
7776:aa547cf3bf0d 7784:7f5c455ec7d1
     1 # copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     1 # copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     2 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
     2 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
     3 #
     3 #
     4 # This file is part of CubicWeb.
     4 # This file is part of CubicWeb.
     5 #
     5 #
     6 # CubicWeb is free software: you can redistribute it and/or modify it under the
     6 # CubicWeb is free software: you can redistribute it and/or modify it under the
    43 
    43 
    44     def call(self):
    44     def call(self):
    45         self.w(u'<div id="progress">%s</div>' % self._cw._('validating...'))
    45         self.w(u'<div id="progress">%s</div>' % self._cw._('validating...'))
    46         super(SecurityManagementView, self).call()
    46         super(SecurityManagementView, self).call()
    47 
    47 
    48     def cell_call(self, row, col):
    48     def entity_call(self, entity):
    49         self._cw.add_js('cubicweb.edition.js')
    49         self._cw.add_js('cubicweb.edition.js')
    50         self._cw.add_css('cubicweb.acl.css')
    50         self._cw.add_css('cubicweb.acl.css')
    51         entity = self.cw_rset.get_entity(row, col)
       
    52         w = self.w
    51         w = self.w
    53         _ = self._cw._
    52         _ = self._cw._
    54         w(u'<h1><span class="etype">%s</span> <a href="%s">%s</a></h1>'
    53         w(u'<h1><span class="etype">%s</span> <a href="%s">%s</a></h1>'
    55           % (entity.dc_type().capitalize(),
    54           % (entity.dc_type().capitalize(),
    56              xml_escape(entity.absolute_url()),
    55              xml_escape(entity.absolute_url()),
    63         if self._cw.vreg.schema.rschema('owned_by').has_perm(self._cw, 'add',
    62         if self._cw.vreg.schema.rschema('owned_by').has_perm(self._cw, 'add',
    64                                                     fromeid=entity.eid):
    63                                                     fromeid=entity.eid):
    65             self.owned_by_edit_form(entity)
    64             self.owned_by_edit_form(entity)
    66         else:
    65         else:
    67             self.owned_by_information(entity)
    66             self.owned_by_information(entity)
    68         # cwpermissions
       
    69         if 'require_permission' in entity.e_schema.subject_relations():
       
    70             w('<h3>%s</h3>' % _('permissions for this entity'))
       
    71             reqpermschema = self._cw.vreg.schema.rschema('require_permission')
       
    72             self.require_permission_information(entity, reqpermschema)
       
    73             if reqpermschema.has_perm(self._cw, 'add', fromeid=entity.eid):
       
    74                 self.require_permission_edit_form(entity)
       
    75 
    67 
    76     def owned_by_edit_form(self, entity):
    68     def owned_by_edit_form(self, entity):
    77         self.w('<h3>%s</h3>' % self._cw._('ownership'))
    69         self.w('<h3>%s</h3>' % self._cw._('ownership'))
    78         msg = self._cw._('ownerships have been changed')
    70         msg = self._cw._('ownerships have been changed')
    79         form = self._cw.vreg['forms'].select('base', self._cw, entity=entity,
    71         form = self._cw.vreg['forms'].select('base', self._cw, entity=entity,
    94             self.w(self._cw._('this entity is currently owned by') + ' ')
    86             self.w(self._cw._('this entity is currently owned by') + ' ')
    95             self.wview('csv', entity.related('owned_by'), 'null')
    87             self.wview('csv', entity.related('owned_by'), 'null')
    96             self.w(u'</div>')
    88             self.w(u'</div>')
    97         # else we don't know if this is because entity has no owner or becayse
    89         # else we don't know if this is because entity has no owner or becayse
    98         # user as no access to owner users entities
    90         # user as no access to owner users entities
    99 
       
   100     def require_permission_information(self, entity, reqpermschema):
       
   101         if entity.require_permission:
       
   102             w = self.w
       
   103             _ = self._cw._
       
   104             if reqpermschema.has_perm(self._cw, 'delete', fromeid=entity.eid):
       
   105                 delurl = self._cw.build_url('edit', __redirectvid='security',
       
   106                                             __redirectpath=entity.rest_path())
       
   107                 delurl = delurl.replace('%', '%%')
       
   108                 # don't give __delete value to build_url else it will be urlquoted
       
   109                 # and this will replace %s by %25s
       
   110                 delurl += '&__delete=%s:require_permission:%%s' % entity.eid
       
   111                 dellinktempl = u'[<a href="%s" title="%s">-</a>]&#160;' % (
       
   112                     xml_escape(delurl), _('delete this permission'))
       
   113             else:
       
   114                 dellinktempl = None
       
   115             w(u'<table class="schemaInfo">')
       
   116             w(u'<tr><th>%s</th><th>%s</th></tr>' % (_("permission"),
       
   117                                                     _('granted to groups')))
       
   118             for cwperm in entity.require_permission:
       
   119                 w(u'<tr>')
       
   120                 if dellinktempl:
       
   121                     w(u'<td>%s%s</td>' % (dellinktempl % cwperm.eid,
       
   122                                           cwperm.view('oneline')))
       
   123                 else:
       
   124                     w(u'<td>%s</td>' % cwperm.view('oneline'))
       
   125                 w(u'<td>%s</td>' % self._cw.view('csv', cwperm.related('require_group'), 'null'))
       
   126                 w(u'</tr>\n')
       
   127             w(u'</table>')
       
   128         else:
       
   129             self.w(self._cw._('no associated permissions'))
       
   130 
       
   131     def require_permission_edit_form(self, entity):
       
   132         newperm = self._cw.vreg['etypes'].etype_class('CWPermission')(self._cw)
       
   133         newperm.eid = self._cw.varmaker.next()
       
   134         self.w(u'<p>%s</p>' % self._cw._('add a new permission'))
       
   135         form = self._cw.vreg['forms'].select('base', self._cw, entity=newperm,
       
   136                                          form_buttons=[wdgs.SubmitButton()],
       
   137                                          domid='reqperm%s' % entity.eid,
       
   138                                          __redirectvid='security',
       
   139                                          __redirectpath=entity.rest_path())
       
   140         form.add_hidden('require_permission', entity.eid, role='object',
       
   141                         eidparam=True)
       
   142         permnames = getattr(entity, '__permissions__', None)
       
   143         cwpermschema = newperm.e_schema
       
   144         if permnames is not None:
       
   145             field = guess_field(cwpermschema, self._cw.vreg.schema.rschema('name'),
       
   146                                 widget=wdgs.Select({'size': 1}),
       
   147                                 choices=permnames)
       
   148         else:
       
   149             field = guess_field(cwpermschema, self._cw.vreg.schema.rschema('name'))
       
   150         form.append_field(field)
       
   151         field = guess_field(cwpermschema, self._cw.vreg.schema.rschema('label'))
       
   152         form.append_field(field)
       
   153         field = guess_field(cwpermschema, self._cw.vreg.schema.rschema('require_group'))
       
   154         form.append_field(field)
       
   155         renderer = self._cw.vreg['formrenderers'].select(
       
   156             'htable', self._cw, rset=None, display_progress_div=False)
       
   157         form.render(w=self.w, renderer=renderer)
       
   158 
    91 
   159 
    92 
   160 class ErrorView(AnyRsetView):
    93 class ErrorView(AnyRsetView):
   161     """default view when no result has been found"""
    94     """default view when no result has been found"""
   162     __select__ = yes()
    95     __select__ = yes()