diff --git a/src/sentry/api/endpoints/user_permissions_config.py b/src/sentry/api/endpoints/user_permissions_config.py new file mode 100644 index 00000000000000..ceb1427162b509 --- /dev/null +++ b/src/sentry/api/endpoints/user_permissions_config.py @@ -0,0 +1,11 @@ +from django.conf import settings + +from sentry.api.bases.user import UserEndpoint + + +class UserPermissionsConfigEndpoint(UserEndpoint): + def get(self, request, user): + """ + List all available permissions that can be applied to a user. + """ + return self.respond([p for p in settings.SENTRY_USER_PERMISSIONS]) diff --git a/src/sentry/api/urls.py b/src/sentry/api/urls.py index f292f4c92baa9b..3d66e72eb17b8e 100644 --- a/src/sentry/api/urls.py +++ b/src/sentry/api/urls.py @@ -427,6 +427,7 @@ from .endpoints.user_password import UserPasswordEndpoint from .endpoints.user_permission_details import UserPermissionDetailsEndpoint from .endpoints.user_permissions import UserPermissionsEndpoint +from .endpoints.user_permissions_config import UserPermissionsConfigEndpoint from .endpoints.user_social_identities_index import UserSocialIdentitiesIndexEndpoint from .endpoints.user_social_identity_details import UserSocialIdentityDetailsEndpoint from .endpoints.user_subscriptions import UserSubscriptionsEndpoint @@ -694,6 +695,11 @@ UserPermissionsEndpoint.as_view(), name="sentry-api-0-user-permissions", ), + url( + r"^(?P[^\/]+)/permissions/config/$", + UserPermissionsConfigEndpoint.as_view(), + name="sentry-api-0-user-permissions-config", + ), url( r"^(?P[^\/]+)/permissions/(?P[^\/]+)/$", UserPermissionDetailsEndpoint.as_view(), diff --git a/tests/sentry/api/endpoints/test_user_permissions.py b/tests/sentry/api/endpoints/test_user_permissions.py index ca7fe0954ced84..916e494ebaf41b 100644 --- a/tests/sentry/api/endpoints/test_user_permissions.py +++ b/tests/sentry/api/endpoints/test_user_permissions.py @@ -2,7 +2,7 @@ from sentry.testutils import APITestCase -class UserDetailsTest(APITestCase): +class UserPermissionsConfigTest(APITestCase): endpoint = "sentry-api-0-user-permissions" def setUp(self): @@ -11,7 +11,7 @@ def setUp(self): self.login_as(user=self.user) -class UserPermissionsGetTest(UserDetailsTest): +class UserPermissionsGetTest(UserPermissionsConfigTest): def test_lookup_self(self): UserPermission.objects.create(user=self.user, permission="broadcasts.admin") UserPermission.objects.create(user=self.user, permission="users.admin") diff --git a/tests/sentry/api/endpoints/test_user_permissions_config.py b/tests/sentry/api/endpoints/test_user_permissions_config.py new file mode 100644 index 00000000000000..0e36a40a4f1dd1 --- /dev/null +++ b/tests/sentry/api/endpoints/test_user_permissions_config.py @@ -0,0 +1,19 @@ +from sentry.testutils import APITestCase + + +class UserPermissionsConfigTest(APITestCase): + endpoint = "sentry-api-0-user-permissions-config" + + def setUp(self): + super().setUp() + self.user = self.create_user() + self.login_as(user=self.user) + + +class UserPermissionsConfigGetTest(UserPermissionsConfigTest): + def test_lookup_self(self): + resp = self.get_response("me") + assert resp.status_code == 200 + assert len(resp.data) == 2, resp.data + assert "broadcasts.admin" in resp.data + assert "users.admin" in resp.data