[Zope-CMF] trivial new portal folder type gives weird workflow/security behavior?
Carl Rendell
cer@sol43.com
Sun, 6 Oct 2002 09:21:08 -0700
Thanks for finding this! I was just looking at DefaultWorkflow and
tracing back the conditions when your email hit. I'm interested to
see what Shane thinks about it.
At least now I know I'm not completely crazy! I suspect that this
was not surfaced earlier either because most users are deploying
DCWorkflow or something other than the DefaultWorkflow and/or
_most_ users don't have folderish types under workflow. If I recall
correctly. It was not until CMF 1.3/a/b that this started to
surface because to changes to the workflow tool.
My two cents:
I would not expect _any_ item which is under direct workflow
control to acquire its workflow from parent.
However, my wish is for tools that filter a results set
(searchResults, LazyFilter, etc) to honor workflow state for
parents of children much like the security model.
~C
On Sunday, October 6, 2002, at 08:35 AM, Florent Guillaume wrote:
> Ok, I've finally gotten to the bottom of this. Note that the bug only
> appears when using DefaultWorkflow, and not with DCWorkflow.
>
> The short version is that there's a bug in the way
> utils._modifyPermissionMappings, and thus DefaultWorkflow, sets
> permission mappings.
>
> When an object is inserted into the DefaultWorkflow using
> notifyCreated,
> the workflow sets the state to 'private' and calls
> utils._modifyPermissionMappings with the mapping:
> {'View': {'Anonymous': 0, 'Reviewer': 0,
> 'Owner': 1},
> 'Modify portal content': {'Owner': 1}}
>
> But _modifyPermissionMappings has an incorrect logic in how it tries to
> modify the existing mapping. What it does is, for each permission, try
> to find the current roles that have this permission (through
> rolesForPermissionOn), and if the desired map has to make a change then
> (and only then) the roles are updated, and set to not acquire. In our
> case, if Anonymous and Reviewer currently don't have View, and
> Owner has
> it, then no change for that permission will happen (this is the normal
> case that's actually happening). The problem is that if later on an
> enclosing folder is changed, to allow Anonymous for instance, then
> because the object still has its original setting of having permissions
> acquired, it will become visible for Anonymous.
>
> One solution would be to make _modifyPermissionMappings *not* look at
> acquired permissions (which depend on the parents) when deciding
> what to
> do to the map. Another would be to reuse the slightly different logic
> that DCWorkflow has to change permission mappings.
>
> Shane, what do you think?
>
>
> Florent
>
> In article <9415BF90-D669-11D6-BF39-000393580FEA@sol43.com> Carl write:
>> On Wednesday, October 2, 2002, at 01:18 PM, Florent Guillaume wrote:
>>
>>> On Wed, 2002-10-02 at 22:12, Carl Rendell wrote:
>>>> I understand this part. What i'm not understanding right now is why
>>>> unpublished items within a published folder are being selected by
>>>> portal_catalog.searchResults() ?
>>>
>>> I don't know. You'll have dig a bit and add debugging statements
>>> so that
>>> we find out what's happening. What's the catalog entry for that
>>> object?
>>> When does it change?
>>>
>>
>> I've done some additional testing, and now see why i'm getting the
>> 'strange' behavior.
>>
>> Here is the scenario -
>>
>> o Create folder under workflow control (Default) and leave private
>>
>> o Create sub object within the folder hierarchy (tested to various
>> levels with no change)
>>
>> o 'Publish' the folder
>>
>> o Sub object is now visible
>>
>> So why? For some reason the change to the folder workflow state is
>> also cascading down to the object and changing what it should be in
>> the allowedRolesAndUsers index -
>>
>> ['Manager','user:x','user:y'] to
>>
>> ['Anonymous', 'user:x', 'user:y', 'Manager', 'Reviewer']
>>
>> Makes a lot of sense why the objects are visible!
>>
>> I've confirmed this by publishing and un-publishing the sub-object,
>> which has the effect of the sub object no longer having its index
>> changed by the parent. This also explains why the
>> reindexObjectSecurity() call has little effect because it is
>> reindexing the allowedRolesAndUsers idx, which has been changed by
>> the parent.
>>
>> I'm not sure what this means now? I can see some gross work arounds
>> like checking all sub objects to see if the allowedRolesAndUsers
>> matches up with the object review_state, and then doing a resync.
>> That feels like the wrong thing to do.
>>
>> So, am I crazy or what? This thing is really baking my noodle right
>> now. Why would the workflow change sub items?
>
>
>
> --
> Florent Guillaume, Nuxeo (Paris, France)
> +33 1 40 33 79 87 http://nuxeo.com mailto:fg@nuxeo.com
>
Carl E. Rendell
Solution43
Information Distribution Consulting | "Ahhhh the power of
cer@sol43.com | acquisition" - Chef Z