provide security settings for publishable task states; (+ update source file header infos)

This commit is contained in:
Helmut Merz 2013-01-08 12:16:37 +01:00
parent 368fdc214f
commit 6fad66ea34
5 changed files with 44 additions and 17 deletions

View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2008 Helmut Merz helmutm@cy55.de # Copyright (c) 2013 Helmut Merz helmutm@cy55.de
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -18,8 +18,6 @@
""" """
Specialized schema factories Specialized schema factories
$Id$
""" """
from zope.component import adapts from zope.component import adapts

View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2012 Helmut Merz helmutm@cy55.de # Copyright (c) 2013 Helmut Merz helmutm@cy55.de
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by

View file

@ -20,6 +20,7 @@
Basic implementations for stateful objects and adapters. Basic implementations for stateful objects and adapters.
""" """
from zope.app.security.settings import Allow, Deny, Unset
from zope import component from zope import component
from zope.component import adapter from zope.component import adapter
from zope.interface import implementer from zope.interface import implementer
@ -30,6 +31,15 @@ from cybertools.stateful.definition import State, Transition
from cybertools.stateful.interfaces import IStatesDefinition, IStateful from cybertools.stateful.interfaces import IStatesDefinition, IStateful
from loops.common import adapted from loops.common import adapted
from loops.organize.stateful.base import StatefulLoopsObject from loops.organize.stateful.base import StatefulLoopsObject
from loops.security.interfaces import ISecuritySetter
def setPermissionsForRoles(settings):
def setSecurity(obj):
setter = ISecuritySetter(obj.context)
setter.setRolePermissions(settings)
setter.propagateSecurity()
return setSecurity
@implementer(IStatesDefinition) @implementer(IStatesDefinition)
@ -56,23 +66,44 @@ def taskStates():
def publishableTask(): def publishableTask():
return StatesDefinition('publishable_task', return StatesDefinition('publishable_task',
State('draft', 'draft', ('release', 'release_publish', 'cancel',), State('draft', 'draft', ('release', 'release_publish', 'cancel',),
color='yellow'), color='yellow',
State('active', 'active', ('finish', 'publish', 'cancel',), setSecurity=setPermissionsForRoles({
color='lightblue'), ('zope.View', 'zope.Member'): Deny,
('zope.View', 'loops.Member'): Deny,})),
State('active', 'active', ('retract', 'finish', 'publish', 'cancel',),
color='lightblue',
setSecurity=setPermissionsForRoles({
('zope.View', 'zope.Member'): Deny,
('zope.View', 'loops.Member'): Allow,})),
State('active_published', 'active (published)', State('active_published', 'active (published)',
('finish_published', 'retract', 'cancel',), color='blue'), ('retract', 'finish_published', 'retract', 'cancel',), color='blue',
setSecurity=setPermissionsForRoles({
('zope.View', 'zope.Member'): Allow,
('zope.View', 'loops.Member'): Allow,})),
State('finished', 'finished', ('reopen', 'archive',), State('finished', 'finished', ('reopen', 'archive',),
color='lightgreen'), color='lightgreen',
setSecurity=setPermissionsForRoles({
('zope.View', 'zope.Member'): Deny,
('zope.View', 'loops.Member'): Allow,})),
State('finished_published', 'finished (published)', ('reopen', 'archive',), State('finished_published', 'finished (published)', ('reopen', 'archive',),
color='green'), color='green',
setSecurity=setPermissionsForRoles({
('zope.View', 'zope.Member'): Allow,
('zope.View', 'loops.Member'): Allow,})),
State('cancelled', 'cancelled', ('reopen',), State('cancelled', 'cancelled', ('reopen',),
color='x'), color='x',
setSecurity=setPermissionsForRoles({
('zope.View', 'zope.Member'): Deny,
('zope.View', 'loops.Member'): Deny,})),
State('archived', 'archived', ('reopen',), State('archived', 'archived', ('reopen',),
color='grey'), color='grey',
setSecurity=setPermissionsForRoles({
('zope.View', 'zope.Member'): Deny,
('zope.View', 'loops.Member'): Deny,})),
Transition('release', 'release', 'active'), Transition('release', 'release', 'active'),
Transition('release_publish', 'release, publish', 'active_published'), Transition('release_publish', 'release, publish', 'active_published'),
Transition('publish', 'publish', 'active_published'), Transition('publish', 'publish', 'active_published'),
Transition('retract', 'retract', 'active'), Transition('retract', 'retract', 'draft'),
Transition('finish', 'finish', 'finished'), Transition('finish', 'finish', 'finished'),
Transition('finish_published', 'finish (published)', 'finished_published'), Transition('finish_published', 'finish (published)', 'finished_published'),
Transition('cancel', 'cancel', 'cancelled'), Transition('cancel', 'cancel', 'cancelled'),

View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2012 Helmut Merz helmutm@cy55.de # Copyright (c) 2013 Helmut Merz helmutm@cy55.de
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by

View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2009 Helmut Merz helmutm@cy55.de # Copyright (c) 2013 Helmut Merz helmutm@cy55.de
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -18,8 +18,6 @@
""" """
Specialized fields factories. Specialized fields factories.
$Id$
""" """
from zope.component import adapts from zope.component import adapts