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 entity_call(self, entity): |
48 def cell_call(self, row, col): |
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) |
51 w = self.w |
52 w = self.w |
52 _ = self._cw._ |
53 _ = self._cw._ |
53 w(u'<h1><span class="etype">%s</span> <a href="%s">%s</a></h1>' |
54 w(u'<h1><span class="etype">%s</span> <a href="%s">%s</a></h1>' |
54 % (entity.dc_type().capitalize(), |
55 % (entity.dc_type().capitalize(), |
55 xml_escape(entity.absolute_url()), |
56 xml_escape(entity.absolute_url()), |
62 if self._cw.vreg.schema.rschema('owned_by').has_perm(self._cw, 'add', |
63 if self._cw.vreg.schema.rschema('owned_by').has_perm(self._cw, 'add', |
63 fromeid=entity.eid): |
64 fromeid=entity.eid): |
64 self.owned_by_edit_form(entity) |
65 self.owned_by_edit_form(entity) |
65 else: |
66 else: |
66 self.owned_by_information(entity) |
67 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) |
67 |
75 |
68 def owned_by_edit_form(self, entity): |
76 def owned_by_edit_form(self, entity): |
69 self.w('<h3>%s</h3>' % self._cw._('ownership')) |
77 self.w('<h3>%s</h3>' % self._cw._('ownership')) |
70 msg = self._cw._('ownerships have been changed') |
78 msg = self._cw._('ownerships have been changed') |
71 form = self._cw.vreg['forms'].select('base', self._cw, entity=entity, |
79 form = self._cw.vreg['forms'].select('base', self._cw, entity=entity, |
86 self.w(self._cw._('this entity is currently owned by') + ' ') |
94 self.w(self._cw._('this entity is currently owned by') + ' ') |
87 self.wview('csv', entity.related('owned_by'), 'null') |
95 self.wview('csv', entity.related('owned_by'), 'null') |
88 self.w(u'</div>') |
96 self.w(u'</div>') |
89 # else we don't know if this is because entity has no owner or becayse |
97 # else we don't know if this is because entity has no owner or becayse |
90 # user as no access to owner users entities |
98 # 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>] ' % ( |
|
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) |
91 |
158 |
92 |
159 |
93 class ErrorView(AnyRsetView): |
160 class ErrorView(AnyRsetView): |
94 """default view when no result has been found""" |
161 """default view when no result has been found""" |
95 __select__ = yes() |
162 __select__ = yes() |