# HG changeset patch # User Sylvain Thénault # Date 1266243177 -3600 # Node ID 2380444d982c5ed47b26fb2035c4ce32c36aaa07 # Parent fc6bb020e60ecca0be43c698f39caf8fa9a2a795 [schema] refactor/cleanup check_permissions diff -r fc6bb020e60e -r 2380444d982c schema.py --- a/schema.py Mon Feb 15 15:11:49 2010 +0100 +++ b/schema.py Mon Feb 15 15:12:57 2010 +0100 @@ -283,22 +283,10 @@ isinstance(group_or_rqlexpr, RQLExpression): msg = "can't use rql expression for read permission of %s" raise BadSchemaDefinition(msg % self) - elif self.final and isinstance(group_or_rqlexpr, RRQLExpression): - if schema.reading_from_database: - # we didn't have final relation earlier, so turn - # RRQLExpression into ERQLExpression now - rqlexpr = group_or_rqlexpr - newrqlexprs = [x for x in self.get_rqlexprs(action) - if not x is rqlexpr] - newrqlexprs.append(ERQLExpression(rqlexpr.expression, - rqlexpr.mainvars, - rqlexpr.eid)) - self.set_rqlexprs(action, newrqlexprs) - else: - msg = "can't use RRQLExpression on %s, use an ERQLExpression" - raise BadSchemaDefinition(msg % self) - elif not self.final and \ - isinstance(group_or_rqlexpr, ERQLExpression): + if self.final and isinstance(group_or_rqlexpr, RRQLExpression): + msg = "can't use RRQLExpression on %s, use an ERQLExpression" + raise BadSchemaDefinition(msg % self) + if not self.final and isinstance(group_or_rqlexpr, ERQLExpression): msg = "can't use ERQLExpression on %s, use a RRQLExpression" raise BadSchemaDefinition(msg % self) RelationDefinitionSchema.check_permission_definitions = check_permission_definitions @@ -314,13 +302,14 @@ if eid is None and edef is not None: eid = getattr(edef, 'eid', None) self.eid = eid - # take care: no _groups attribute when deep-copying - if getattr(self, 'permissions', None): - for groups in self.permissions.itervalues(): - for group_or_rqlexpr in groups: - if isinstance(group_or_rqlexpr, RRQLExpression): - msg = "can't use RRQLExpression on an entity type, use an ERQLExpression (%s)" - raise BadSchemaDefinition(msg % self.type) + + def check_permission_definitions(self): + super(CubicWebEntitySchema, self).check_permission_definitions() + for groups in self.permissions.itervalues(): + for group_or_rqlexpr in groups: + if isinstance(group_or_rqlexpr, RRQLExpression): + msg = "can't use RRQLExpression on %s, use an ERQLExpression" + raise BadSchemaDefinition(msg % self.type) def attribute_definitions(self): """return an iterator on attribute definitions