The way I would approach the problem is to have a "create", "read" and "delete" permissions. When accessing a context of type B, it would then supply an __acl__ which is dynamically generated based on its origins. For example:
@property
def __acl__(self):
return [
(Allow, 'editor', ('read', 'update')),
(Allow, 'origin:' + self.origin, 'delete'),
]
With this, the object of type B has told us "who" is allowed to delete it. Now when Timothy accesses the system, it would be the responsibility of the authentication policy via the groupfinder to return a list of principals for Timothy. For example, Timothy is from france, so you would add the 'origin:france' principal, and he is an editor so you would add the 'editor' principal. Now when the auth system compares B's acl to timothy's principals, he will only have the delete permission if one of his principals matches up with one of the ACE's providing delete.
Again, look at it from the perspective of the context (the object of interest). That object (the product) should provide an ACL that tells the auth system what principals are allowed to use it. For example the product returns (Allow, 'agent_of_'+self.origin, 'read') where self is a product. The auth system then compares these acls with the principals returned by the authentication policy.