Abel Deuring has proposed merging lp:~adeuring/launchpad/bug-1067736 into 
lp:launchpad.

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~adeuring/launchpad/bug-1067736/+merge/131527

This branch changes Product.userCanView() so that members of the registry 
experts team do not get accss to al rpivate products.

Additionally, the method now calls SharingService.checkPillarAccess() to check 
the permission for ordinary users. This method looks also for team grants, so I 
added a related assertion to test_access_launchpad_View_proprietary_product().

test:

./bin/test -vvt 
lp.registry.tests.test_product.TestProduct.test_access_launchpad_View_proprietary_product

no lint

-- 
https://code.launchpad.net/~adeuring/launchpad/bug-1067736/+merge/131527
Your team Launchpad code reviewers is requested to review the proposed merge of 
lp:~adeuring/launchpad/bug-1067736 into lp:launchpad.
=== modified file 'lib/lp/registry/model/product.py'
--- lib/lp/registry/model/product.py	2012-10-24 14:54:46 +0000
+++ lib/lp/registry/model/product.py	2012-10-26 07:05:25 +0000
@@ -90,6 +90,7 @@
     ILaunchpadUsage,
     IServiceUsage,
     )
+from lp.app.interfaces.services import IService
 from lp.app.model.launchpad import InformationTypeMixin
 from lp.blueprints.enums import (
     SpecificationFilter,
@@ -1522,25 +1523,16 @@
             return False
         if user.id in self._known_viewers:
             return True
-        # We need the plain Storm Person object for the SQL query below
-        # but an IPersonRoles object for the team membership checks.
-        if IPersonRoles.providedBy(user):
-            plain_user = user.person
-        else:
-            plain_user = user
+        if not IPersonRoles.providedBy(user):
             user = IPersonRoles(user)
-        if (user.in_commercial_admin or user.in_admin or
-            user.in_registry_experts):
-            self._known_viewers.add(user.id)
-            return True
-        policy = getUtility(IAccessPolicySource).find(
-            [(self, self.information_type)]).one()
-        grants_for_user = getUtility(IAccessPolicyGrantSource).find(
-            [(policy, plain_user)])
-        if grants_for_user.is_empty():
-            return False
-        self._known_viewers.add(user.id)
-        return True
+        if user.in_commercial_admin or user.in_admin:
+            self._known_viewers.add(user.id)
+            return True
+        if getUtility(IService, 'sharing').checkPillarAccess(
+            [self], self.information_type, user):
+            self._known_viewers.add(user.id)
+            return True
+        return False
 
 
 def get_precached_products(products, need_licences=False, need_projects=False,

=== modified file 'lib/lp/registry/tests/test_product.py'
--- lib/lp/registry/tests/test_product.py	2012-10-24 14:54:46 +0000
+++ lib/lp/registry/tests/test_product.py	2012-10-26 07:05:25 +0000
@@ -735,13 +735,20 @@
         with person_logged_in(ordinary_user):
             for attribute_name in names:
                 getattr(product, attribute_name)
+        # Access can be granted to a team too.
+        other_user = self.factory.makePerson()
+        team = self.factory.makeTeam(members=[other_user])
+        with person_logged_in(owner):
+            getUtility(IService, 'sharing').sharePillarInformation(
+                product, team, owner,
+                {InformationType.PROPRIETARY: SharingPermission.ALL})
+        with person_logged_in(other_user):
+            for attribute_name in names:
+                getattr(product, attribute_name)
         # Admins can access proprietary products.
         with celebrity_logged_in('admin'):
             for attribute_name in names:
                 getattr(product, attribute_name)
-        with celebrity_logged_in('registry_experts'):
-            for attribute_name in names:
-                getattr(product, attribute_name)
         # Commercial admins have access to all products.
         with celebrity_logged_in('commercial_admin'):
             for attribute_name in names:

_______________________________________________
Mailing list: https://launchpad.net/~launchpad-reviewers
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~launchpad-reviewers
More help   : https://help.launchpad.net/ListHelp

Reply via email to