-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Last week I fixed a bug[1] that was caused by one of the security adapters delegating to another one by explicitly naming it. Unfortunately the named one was not appropriate. The fix was to not hard-code the adapter but to use getAdapter to let the machinery find the correct one.
After fixing that single instance Francis asked that I look at all of the places we do something similar in our various security.py files. There were many. I opened [2] to track fixing them. It is a common pattern for one object to defer to a child object's security adapter, e.g. the security rules for viewing a bug attachment are the same as for the associated bug, so the security adapter for the bug attachment forwards to the adapter for the bug. To remove the hard-coded names and facilitate this pattern of forwarding via lookup I created a new base class called ForwardedAuthorization. Here is a diff of the change to use the new class. It shows forwarding to the child 'archive' and using a different permission, 'launchpad.Append' instead of the original 'launchpad.Edit'. The permission is optional and should be omitted if it is the same as the original. 284 -class EditPublishing(AuthorizationBase): 285 +class EditPublishing(ForwardedAuthorization): 286 """Restrict editing of source and binary packages..""" 287 permission = "launchpad.Edit" 288 usedfor = IPublishingEdit 289 290 - def checkAuthenticated(self, user): 291 - return AppendArchive(self.obj.archive).checkAuthenticated(user) 292 + def __init__(self, obj): 293 + super(EditPublishing, self).__init__(obj.archive, 'launchpad.Append') 294 Please use this new class when you need to follow the forwarding pattern. My branch should land today. - --Brad [1] https://bugs.launchpad.net/launchpad/+bug/828914 [2] https://bugs.launchpad.net/launchpad/+bug/839784 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (Darwin) iD8DBQFOZhLLyVBcNIpRAS0RAvJqAJ4slaLUn52hZVaAMegPzpR8NIG56QCdG9SD 4EG3ahPY0aqjFEB76jHM3uI= =xlCT -----END PGP SIGNATURE----- _______________________________________________ Mailing list: https://launchpad.net/~launchpad-dev Post to : launchpad-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~launchpad-dev More help : https://help.launchpad.net/ListHelp