# HG changeset patch # User Sandrine Ribeau # Date 1269469897 25200 # Node ID 78c1a531f7b38d8dace1a940b8f901dde634fd6a # Parent 34e669b6fd9539286ff672dc9224c058887354d9 ticket #787032, schema view improvement diff -r 34e669b6fd95 -r 78c1a531f7b3 i18n/en.po --- a/i18n/en.po Tue Apr 13 13:21:10 2010 +0200 +++ b/i18n/en.po Wed Mar 24 15:31:37 2010 -0700 @@ -3102,7 +3102,7 @@ msgstr "" msgid "read_perm" -msgstr "read perm" +msgstr "read permission" msgid "read_permission" msgstr "can be read by" diff -r 34e669b6fd95 -r 78c1a531f7b3 web/data/cubicweb.acl.css --- a/web/data/cubicweb.acl.css Tue Apr 13 13:21:10 2010 +0200 +++ b/web/data/cubicweb.acl.css Wed Mar 24 15:31:37 2010 -0700 @@ -58,25 +58,29 @@ } -.users{ +div.users, a.users{ color : #00CC33; font-weight: bold } -.guests{ +div.guests, a.guests{ color : #ff7700; font-weight: bold; } -.staff{ +div.staff, a.staff{ color : #0083ab; font-weight: bold; } -.owners{ +div.owners, a.owners{ color : #8b0000; font-weight: bold; } +div.managers, a.managers{ + color: #000000; +} + .discret, a.grey{ color:#666; @@ -91,7 +95,7 @@ } div#schema_security{ - width:780px; + width:100%; } /******************************************************************************/ /* user groups edition form (views/euser.py) */ diff -r 34e669b6fd95 -r 78c1a531f7b3 web/views/management.py --- a/web/views/management.py Tue Apr 13 13:21:10 2010 +0200 +++ b/web/views/management.py Wed Mar 24 15:31:37 2010 -0700 @@ -17,6 +17,8 @@ from cubicweb.web import formwidgets as wdgs from cubicweb.web.formfields import guess_field +from yams.buildobjs import EntityType + SUBMIT_MSGID = _('Submit bug report') MAIL_SUBMIT_MSGID = _('Submit bug report by mail') @@ -52,19 +54,6 @@ w(u'\n') w(u'') - def has_schema_modified_permissions(self, eschema, access_types): - """ return True if eschema's actual permissions are diffrents - from the default ones - """ - for access_type in access_types: - if eschema.get_rqlexprs(access_type): - return True - if eschema.get_groups(access_type) != \ - frozenset(eschema.get_default_groups()[access_type]): - return True - return False - - class SecurityManagementView(EntityView, SecurityViewMixIn): """display security information for a given entity""" __regid__ = 'security' diff -r 34e669b6fd95 -r 78c1a531f7b3 web/views/schema.py --- a/web/views/schema.py Tue Apr 13 13:21:10 2010 +0200 +++ b/web/views/schema.py Wed Mar 24 15:31:37 2010 -0700 @@ -11,6 +11,7 @@ from logilab.mtconverter import xml_escape from yams import BASE_TYPES, schema2dot as s2d +from yams.buildobjs import DEFAULT_ATTRPERMS from cubicweb.selectors import (implements, yes, match_user_groups, has_related_entities) @@ -43,7 +44,7 @@ class SchemaView(tabs.TabsMixin, StartupView): __regid__ = 'schema' title = _('instance schema') - tabs = [_('schema-text'), _('schema-image')] + tabs = [_('schema-text'), _('schema-image'), _('schema-security')] default_tab = 'schema-text' def call(self): @@ -74,19 +75,21 @@ rset = self._cw.execute('Any X ORDERBY N WHERE X is CWEType, X name N, ' 'X final FALSE') self.wview('table', rset, displayfilter=True) + rset = self._cw.execute('Any X ORDERBY N WHERE X is CWRType, X name N, ' + 'X final FALSE') + self.wview('table', rset, displayfilter=True) + owl_downloadurl = self._cw.build_url('view', vid='owl') + self.w(u'
%s
' % + (owl_downloadurl, self._cw._(u'Download schema as OWL'))) -class ManagerSchemaPermissionsView(StartupView, management.SecurityViewMixIn): +class SchemaPermissionsView(StartupView, management.SecurityViewMixIn): __regid__ = 'schema-security' __select__ = StartupView.__select__ & match_user_groups('managers') def call(self, display_relations=True): self._cw.add_css('cubicweb.acl.css') skiptypes = skip_types(self._cw) - formparams = {} - formparams['sec'] = self.__regid__ - if not skiptypes: - formparams['skipmeta'] = u'0' schema = self._cw.vreg.schema # compute entities entities = sorted(eschema for eschema in schema.entities() @@ -101,78 +104,88 @@ relations = [] # index _ = self._cw._ - self.w(u'
') - self.w(u'

%s

' % _('index').capitalize()) - self.w(u'

%s

' % _('Entities').capitalize()) + url = xml_escape(self._cw.build_url('schema')) + self.w(u'
') + self.w(u'

%s

' % _('Index')) + self.w(u'

%s

' % _('Entity types')) ents = [] for eschema in sorted(entities): - url = xml_escape(self._cw.build_url('schema', **formparams)) - ents.append(u'
%s (%s)' % ( - url, eschema.type, eschema.type, _(eschema.type))) + ents.append(u'%s' % ( + url, eschema.type, eschema.type)) self.w(u', '.join(ents)) - self.w(u'

%s

' % (_('relations').capitalize())) + self.w(u'

%s

' % _('Relation types')) rels = [] for rschema in sorted(relations): - url = xml_escape(self._cw.build_url('schema', **formparams)) - rels.append(u'%s (%s), ' % ( - url , rschema.type, rschema.type, _(rschema.type))) - self.w(u', '.join(ents)) - # entities - self.display_entities(entities, formparams) - # relations + rels.append(u'%s' % ( + url , rschema.type, rschema.type)) + self.w(u', '.join(rels)) + # permissions tables + self.display_entities(entities) if relations: - self.display_relations(relations, formparams) + self.display_relations(relations) self.w(u'
') - def display_entities(self, entities, formparams): + def has_non_default_perms(self, rdef): + for access_type in rdef.ACTIONS: + def_rqlexprs = [] + def_groups = [] + for perm in DEFAULT_ATTRPERMS[access_type]: + if not isinstance(perm, basestring): + def_rqlexprs.append(perm.expression) + else: + def_groups.append(perm) + rqlexprs = [rql.expression for rql in rdef.get_rqlexprs(access_type)] + groups = rdef.get_groups(access_type) + if groups != frozenset(def_groups) or \ + frozenset(rqlexprs) != frozenset(def_rqlexprs): + return True + return False + + def display_entities(self, entities): _ = self._cw._ - self.w(u'') - self.w(u'

%s

' % _('permissions for entities').capitalize()) + url = xml_escape(self._cw.build_url('schema')) + self.w(u'

%s

' % _('Permissions for entity types')) for eschema in entities: - self.w(u'
' % (eschema.type, eschema.type)) - self.w(u'

%s (%s) ' % (eschema.type, _(eschema.type))) - url = xml_escape(self._cw.build_url('schema', **formparams) + '#index') - self.w(u'%s' % ( + self.w(u'

%s (%s) ' % ( + eschema.type, self._cw.build_url('cwetype/%s' % eschema.type), + eschema.type, _(eschema.type))) + self.w(u'%s' % ( url, self._cw.external_resource('UP_ICON'), _('up'))) self.w(u'

') self.w(u'
') - self._cw.vreg.schema_definition(eschema, link=False) + self.schema_definition(eschema) # display entity attributes only if they have some permissions modified modified_attrs = [] for attr, etype in eschema.attribute_definitions(): - if self.has_schema_modified_permissions(attr, attr.ACTIONS): - modified_attrs.append(attr) - if modified_attrs: - self.w(u'

%s

' % _('attributes with modified permissions:').capitalize()) + rdef = eschema.rdef(attr) + if attr not in META_RTYPES and self.has_non_default_perms(rdef): + modified_attrs.append(rdef) + if modified_attrs: + self.w(u'

%s

' % _('Attributes with non default permissions:')) self.w(u'
') self.w(u'
') - for attr in modified_attrs: - self.w(u'

%s (%s)

' % (attr.type, _(attr.type))) - self._cw.vreg.schema_definition(attr, link=False) + for rdef in modified_attrs: + attrtype = str(rdef.rtype) + self.w(u'

%s (%s)

' % (attrtype, _(attrtype))) + self.schema_definition(rdef) self.w(u'
') - def display_relations(self, relations, formparams): + def display_relations(self, relations): _ = self._cw._ - self.w(u'') - self.w(u'

%s

' % _('permissions for relations').capitalize()) + url = xml_escape(self._cw.build_url('schema')) + self.w(u'

%s

' % _('Permissions for relations')) for rschema in relations: - self.w(u'
' % (rschema.type, rschema.type)) - self.w(u'

%s (%s) ' % (rschema.type, _(rschema.type))) - url = xml_escape(self._cw.build_url('schema', **formparams) + '#index') - self.w(u'%s' % ( + self.w(u'

%s (%s) ' % ( + rschema.type, self._cw.build_url('cwrtype/%s' % rschema.type), + rschema.type, _(rschema.type))) + self.w(u'%s' % ( url, self._cw.external_resource('UP_ICON'), _('up'))) self.w(u'

') self.w(u'
') - subjects = [str(subj) for subj in rschema.subjects()] - self.w(u'
%s %s (%s)
' % ( - _('subject_plural:'), - ', '.join(str(subj) for subj in rschema.subjects()), - ', '.join(_(str(subj)) for subj in rschema.subjects()))) - self.w(u'
%s %s (%s)
' % ( - _('object_plural:'), - ', '.join(str(obj) for obj in rschema.objects()), - ', '.join(_(str(obj)) for obj in rschema.objects()))) - self._cw.vreg.schema_definition(rschema, link=False) + for rdef in rschema.rdefs.itervalues(): + self.w(u'

%s %s %s

' % ( + rdef.subject, rschema, rdef.object)) + self.schema_definition(rdef) self.w(u'
')