user.getRoles() and rolemanager.getRolesForPrincipal()
from
Tim Hicks
on Jan 04, 2007 09:01 AM
Hi,
I wonder if someone with more PAS/Membrane zen can help me out...
I have an event listener that looks like::
def premiumMembershipFeePaid(event):
member = event.member
# Upgrade the Member to the 'PremiumMember' role
acl_users = getToolByName(member, 'acl_users')
user_plugins = acl_users._getOb('plugins')
rmanagers = user_plugins.listPlugins(IRoleAssignerPlugin)
if not (rmanagers):
raise NotImplementedError("There is no plugin that can modify
roles")
for rid, rmanager in rmanagers:
rmanager.assignRoleToPrincipal(config.PREMIUM_ROLE,
member.getUserName(), )
member.reindexObject()
My event gets fired and the listener gets called. Using
pdb.set_trace(), I have been able to ascertain that after the 'for' loop
above, the following is true::
(Pdb) rmanagers[0][1].getRolesForPrincipal(member)
('PremiumMember',)
(Pdb) member.getRoles()
('Member',)
(Pdb) member.reindexObject()
(Pdb) member.getRoles()
('Member',)
(Pdb) member.roles
(u'Member',)
So, it seems that the member role change is only partially successful.
getRolesForPrincipal knows about the change, but the getRoles method on
the member does not.
Can anyone suggest what I'm doing wrong?
Thanks,
Tim