[gen] klass.creators can now be a method that either returns a list of global roles allowed to create instances of this class, or a boolean indicating if the currently logged user can create instances of this class or not. [gen] Bugfixes.

This commit is contained in:
Gaetan Delannay 2013-09-22 16:33:32 +02:00
parent e1b83574c5
commit 1f901e5545
6 changed files with 64 additions and 55 deletions

View file

@ -74,7 +74,7 @@ class Field:
# Displays a field label.
pxLabel = Px('''<label if="field.hasLabel and (field.type != 'Action')"
lfor="field.name">::zobj.translate('label', field=field)</label>''')
lfor=":field.name">::zobj.translate('label', field=field)</label>''')
# Displays a field description.
pxDescription = Px('''<span if="field.hasDescr"

View file

@ -185,14 +185,16 @@ class Transition:
# triggered if user has at least one of those roles and if all
# functions return True.
hasRole = None
for roleOrFunction in self.condition:
if isinstance(roleOrFunction, basestring):
for condition in self.condition:
# "Unwrap" role names from Role instances.
if isinstance(condition, Role): condition = condition.name
if isinstance(condition, basestring): # It is a role
if hasRole == None:
hasRole = False
if user.has_role(roleOrFunction, obj):
if user.has_role(condition, obj):
hasRole = True
elif type(roleOrFunction) == types.FunctionType:
if not roleOrFunction(wf, obj.appy()):
else: # It is a method
if not condition(wf, obj.appy()):
return False
if hasRole != False:
return True