Merge lp:~wgrant/launchpad/bug-1083709-again into lp:launchpad

Proposed by William Grant
Status: Merged
Merged at revision: 18211
Proposed branch: lp:~wgrant/launchpad/bug-1083709-again
Merge into: lp:launchpad
Diff against target: 104 lines (+20/-22)
4 files modified
lib/lp/registry/doc/productrelease.txt (+3/-4)
lib/lp/registry/doc/productseries.txt (+9/-9)
lib/lp/registry/interfaces/productseries.py (+3/-3)
lib/lp/security.py (+5/-6)
To merge this branch: bzr merge lp:~wgrant/launchpad/bug-1083709-again
Reviewer Review Type Date Requested Status
Colin Watson (community) Approve
Review via email: mp+306167@code.launchpad.net

Commit message

Let project drivers edit series and productreleases, as series drivers can. Project drivers should have series driver power over all series.

Description of the change

Let project drivers edit series and productreleases, as series drivers can. Project drivers should have series driver power over all series.

To post a comment you must log in.
Revision history for this message
Colin Watson (cjwatson) :
review: Needs Information
Revision history for this message
William Grant (wgrant) :
Revision history for this message
Colin Watson (cjwatson) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lib/lp/registry/doc/productrelease.txt'
2--- lib/lp/registry/doc/productrelease.txt 2012-04-10 14:01:17 +0000
3+++ lib/lp/registry/doc/productrelease.txt 2016-10-02 12:51:02 +0000
4@@ -20,9 +20,8 @@
5 >>> verifyObject(IProductRelease, firefox_109)
6 True
7
8-The driver for the release's milestone target cannot change the release, but
9-the driver of the milestone's series_target is a release manager and can
10-make changes.
11+A person appointed to the project or series driver role is a release
12+manager and can make changes.
13
14 >>> from lp.services.webapp.authorization import check_permission
15
16@@ -34,7 +33,7 @@
17
18 >>> ignored = login_person(driver)
19 >>> check_permission('launchpad.Edit', firefox_109)
20- False
21+ True
22
23 >>> ignored = login_person(release_manager)
24 >>> check_permission('launchpad.Edit', firefox_109)
25
26=== modified file 'lib/lp/registry/doc/productseries.txt'
27--- lib/lp/registry/doc/productseries.txt 2016-01-26 15:47:37 +0000
28+++ lib/lp/registry/doc/productseries.txt 2016-10-02 12:51:02 +0000
29@@ -110,20 +110,20 @@
30
31 = Drivers and release managers =
32
33-A driver for an IProduct or IProjectGroup cannot modify a product series.
34+A person appointed to the project or series driver role is a release
35+manager and can edit a product series.
36
37 >>> from lp.services.webapp.authorization import check_permission
38
39- >>> ignored = login_person(series_driver)
40- >>> print emacs_series.owner.name
41- name12
42- >>> print emacs_series.driver
43- None
44+ >>> firefox_driver = factory.makePerson()
45+ >>> ignored = login_person(firefox_driver)
46 >>> check_permission('launchpad.Edit', emacs_series)
47 False
48-
49-A person appointed to the series driver has the release manager role and can
50-edit a product series.
51+ >>> ignored = login_person(firefox.owner)
52+ >>> firefox.driver = firefox_driver
53+ >>> ignored = login_person(firefox_driver)
54+ >>> check_permission('launchpad.Edit', emacs_series)
55+ True
56
57 >>> ignored = login_person(firefox.owner)
58 >>> emacs_series.driver = series_driver
59
60=== modified file 'lib/lp/registry/interfaces/productseries.py'
61--- lib/lp/registry/interfaces/productseries.py 2013-04-03 03:59:28 +0000
62+++ lib/lp/registry/interfaces/productseries.py 2016-10-02 12:51:02 +0000
63@@ -182,9 +182,9 @@
64 description=_(
65 "The person or team responsible for decisions about features "
66 "and bugs that will be targeted to this series. If you don't "
67- "nominate someone here, then the owner of this series will "
68- "automatically have those permissions, as will the project "
69- "and project group drivers."),
70+ "nominate someone here, then the owners and drivers of the "
71+ "project and project group will automatically have those "
72+ "permissions."),
73 required=False, vocabulary='ValidPersonOrTeam'))
74
75 title = exported(
76
77=== modified file 'lib/lp/security.py'
78--- lib/lp/security.py 2016-08-23 08:05:44 +0000
79+++ lib/lp/security.py 2016-10-02 12:51:02 +0000
80@@ -1374,9 +1374,9 @@
81 usedfor = IProductSeries
82
83 def checkAuthenticated(self, user):
84- """Allow product owner, some experts, or admins."""
85- if (user.inTeam(self.obj.product.owner) or
86- user.inTeam(self.obj.driver)):
87+ """Allow product owner, drivers, some experts, or admins."""
88+ if (user.isOwner(self.obj.product) or
89+ user.isDriver(self.obj)):
90 # The user is the owner of the product, or the release manager.
91 return True
92 # Rosetta experts need to be able to upload translations.
93@@ -1710,9 +1710,8 @@
94 usedfor = IProductRelease
95
96 def checkAuthenticated(self, user):
97- if (user.inTeam(self.obj.productseries.owner) or
98- user.inTeam(self.obj.productseries.product.owner) or
99- user.inTeam(self.obj.productseries.driver)):
100+ if (user.isOwner(self.obj.productseries.product) or
101+ user.isDriver(self.obj.productseries)):
102 # The user is an owner or a release manager.
103 return True
104 return EditByOwnersOrAdmins.checkAuthenticated(