Skip to content

Commit 34c797c

Browse files
committed
Add an access policy for OpenPGP keyring distributions
Add a viewset for repository versions. Assisted-By: Claude Opus 4.6
1 parent 4153c42 commit 34c797c

2 files changed

Lines changed: 106 additions & 2 deletions

File tree

pulpcore/app/viewsets/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
from .vulnerability_report import VulnerabilityReportViewSet
8989
from .openpgp import (
9090
OpenPGPDistributionViewSet,
91+
OpenPGPKeyringVersionViewSet,
9192
OpenPGPKeyringViewSet,
9293
OpenPGPPublicKeyViewSet,
9394
OpenPGPPublicSubkeyViewSet,

pulpcore/app/viewsets/openpgp.py

Lines changed: 105 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,113 @@ class OpenPGPKeyringViewSet(RepositoryViewSet, ModifyRepositoryActionMixin, Role
181181
}
182182

183183

184-
class OpenPGPDistributionViewSet(DistributionViewSet):
184+
class OpenPGPKeyringVersionViewSet(RepositoryVersionViewSet):
185+
parent_viewset = OpenPGPKeyringViewSet
186+
187+
DEFAULT_ACCESS_POLICY = {
188+
"statements": [
189+
{
190+
"action": ["list", "retrieve"],
191+
"principal": "authenticated",
192+
"effect": "allow",
193+
"condition": "has_repository_model_or_domain_or_obj_perms:core.view_openpgpkeyring",
194+
},
195+
{
196+
"action": ["destroy"],
197+
"principal": "authenticated",
198+
"effect": "allow",
199+
"condition": [
200+
"has_repository_model_or_domain_or_obj_perms:core.delete_openpgpkeyring",
201+
"has_repository_model_or_domain_or_obj_perms:core.view_openpgpkeyring",
202+
],
203+
},
204+
{
205+
"action": ["repair"],
206+
"principal": "authenticated",
207+
"effect": "allow",
208+
"condition": [
209+
"has_repository_model_or_domain_or_obj_perms:core.repair_openpgpkeyring",
210+
"has_repository_model_or_domain_or_obj_perms:core.view_openpgpkeyring",
211+
],
212+
},
213+
],
214+
}
215+
216+
217+
class OpenPGPDistributionViewSet(DistributionViewSet, RolesMixin):
185218
endpoint_name = "openpgp"
186219
queryset = models.OpenPGPDistribution.objects.all()
187220
serializer_class = OpenPGPDistributionSerializer
188221
filterset_class = OpenPGPDistributionFilter
222+
queryset_filtering_required_permission = "core.view_openpgpdistribution"
189223

190-
# DEFAULT_ACCESS_POLICY
224+
DEFAULT_ACCESS_POLICY = {
225+
"statements": [
226+
{
227+
"action": ["list", "my_permissions"],
228+
"principal": "authenticated",
229+
"effect": "allow",
230+
},
231+
{
232+
"action": ["retrieve"],
233+
"principal": "authenticated",
234+
"effect": "allow",
235+
"condition": "has_model_or_domain_or_obj_perms:core.view_openpgpdistribution",
236+
},
237+
{
238+
"action": ["create"],
239+
"principal": "authenticated",
240+
"effect": "allow",
241+
"condition": [
242+
"has_model_or_domain_perms:core.add_openpgpdistribution",
243+
"has_repo_or_repo_ver_param_model_or_domain_or_obj_perms:"
244+
"core.view_openpgpkeyring",
245+
],
246+
},
247+
{
248+
"action": ["update", "partial_update", "set_label", "unset_label"],
249+
"principal": "authenticated",
250+
"effect": "allow",
251+
"condition": [
252+
"has_model_or_domain_or_obj_perms:core.change_openpgpdistribution",
253+
"has_model_or_domain_or_obj_perms:core.view_openpgpdistribution",
254+
"has_repo_or_repo_ver_param_model_or_domain_or_obj_perms:"
255+
"core.view_openpgpkeyring",
256+
],
257+
},
258+
{
259+
"action": ["destroy"],
260+
"principal": "authenticated",
261+
"effect": "allow",
262+
"condition": [
263+
"has_model_or_domain_or_obj_perms:core.delete_openpgpdistribution",
264+
"has_model_or_domain_or_obj_perms:core.view_openpgpdistribution",
265+
],
266+
},
267+
{
268+
"action": ["list_roles", "add_role", "remove_role"],
269+
"principal": "authenticated",
270+
"effect": "allow",
271+
"condition": [
272+
"has_model_or_domain_or_obj_perms:core.manage_roles_openpgpdistribution",
273+
],
274+
},
275+
],
276+
"creation_hooks": [
277+
{
278+
"function": "add_roles_for_object_creator",
279+
"parameters": {"roles": "core.openpgpdistribution_owner"},
280+
},
281+
],
282+
"queryset_scoping": {"function": "scope_queryset"},
283+
}
284+
LOCKED_ROLES = {
285+
"core.openpgpdistribution_creator": ["core.add_openpgpdistribution"],
286+
"core.openpgpdistribution_owner": [
287+
"core.view_openpgpdistribution",
288+
"core.change_openpgpdistribution",
289+
"core.delete_openpgpdistribution",
290+
"core.manage_roles_openpgpdistribution",
291+
],
292+
"core.openpgpdistribution_viewer": ["core.view_openpgpdistribution"],
293+
}

0 commit comments

Comments
 (0)