diff -r 5b75fd66c80e -r d7a270f50f54 selectors.py --- a/selectors.py Sun Nov 08 21:53:18 2009 +0100 +++ b/selectors.py Fri Nov 20 19:35:54 2009 +0100 @@ -667,19 +667,6 @@ self.target_etype = target_etype self.action = action - @lltrace - def __call__(self, cls, req, *args, **kwargs): - rschema = req.vreg.schema.rschema(self.rtype) - if not (rschema.has_perm(req, self.action) - or rschema.has_local_role(self.action)): - return 0 - if self.action != 'read': - if not (rschema.has_perm(req, 'read') - or rschema.has_local_role('read')): - return 0 - score = super(relation_possible, self).__call__(cls, req, *args, **kwargs) - return score - def score_class(self, eclass, req): eschema = eclass.e_schema try: @@ -691,12 +678,13 @@ return 0 if self.target_etype is not None: try: - if self.role == 'subject': - return int(self.target_etype in rschema.objects(eschema)) - else: - return int(self.target_etype in rschema.subjects(eschema)) + rdef = rschema.role_rdef(eschema, self.target_etype, self.role) + if not rdef.may_have_permission(self.action, req): + return 0 except KeyError: return 0 + else: + return rschema.may_have_permission(self.action, req, eschema, self.role) return 1