Skip to content

Commit 8b0179d

Browse files
authored
App platform/update permissions token auth (#14046)
* ref(app-platform): Use published_scope map as default
1 parent 1059c9d commit 8b0179d

File tree

2 files changed

+30
-2
lines changed

2 files changed

+30
-2
lines changed

src/sentry/api/bases/sentryapps.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,16 @@ def wrapped(self, *args, **kwargs):
4545

4646
class SentryAppsPermission(SentryPermission):
4747
scope_map = {
48-
'GET': (), # Public endpoint.
48+
# GET is ideally a public endpoint but for now we are allowing for
49+
# anyone who has member permissions or above.
50+
'GET': ('event:read',
51+
'event:write',
52+
'event:admin',
53+
'project:releases',
54+
'project:read',
55+
'org:read',
56+
'member:read',
57+
'team:read',),
4958
'POST': ('org:read', 'org:integrations', 'org:write', 'org:admin'),
5059
}
5160

@@ -118,12 +127,25 @@ class SentryAppPermission(SentryPermission):
118127
}
119128

120129
published_scope_map = {
121-
'GET': (), # Public endpoint.
130+
# GET is ideally a public endpoint but for now we are allowing for
131+
# anyone who has member permissions or above.
132+
'GET': ('event:read',
133+
'event:write',
134+
'event:admin',
135+
'project:releases',
136+
'project:read',
137+
'org:read',
138+
'member:read',
139+
'team:read',),
122140
'PUT': ('org:write', 'org:admin'),
123141
'POST': ('org:write', 'org:admin'),
124142
'DELETE': ('org:admin'),
125143
}
126144

145+
@property
146+
def scope_map(self):
147+
return self.published_scope_map
148+
127149
def has_object_permission(self, request, view, sentry_app):
128150
if not hasattr(request, 'user') or not request.user:
129151
return False

tests/sentry/api/bases/test_sentryapps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ def test_request_user_is_not_app_owner_fails(self):
3636
with self.assertRaises(Http404):
3737
self.permission.has_object_permission(self.request, None, self.sentry_app)
3838

39+
def test_has_permission(self):
40+
from sentry.models import ApiToken
41+
token = ApiToken.objects.create(user=self.user, scope_list=['event:read', 'org:read'])
42+
self.request = self.make_request(user=None, auth=token, method='GET')
43+
assert self.permission.has_permission(self.request, None)
44+
3945

4046
class SentryAppBaseEndpointTest(TestCase):
4147
def setUp(self):

0 commit comments

Comments
 (0)