Make sure permissions are respected.

see #844
This commit is contained in:
Antoine Nguyen
2016-03-09 16:13:18 +01:00
parent 1126b5bca9
commit aff8b17bc4
2 changed files with 18 additions and 1 deletions
+3 -1
View File
@@ -180,7 +180,9 @@ class AliasSerializer(serializers.ModelSerializer):
local_part, domain = email_utils.split_mailbox(value)
self.domain = admin_models.Domain.objects.filter(name=domain).first()
if self.domain is None:
raise serializers.ValidationError("Domain not found.")
raise serializers.ValidationError(_("Domain not found."))
if not self.context["request"].user.can_access(self.domain):
raise serializers.ValidationError(_("Permission denied."))
return value
def create(self, validated_data):
+15
View File
@@ -334,6 +334,21 @@ class AliasAPITestCase(ModoAPITestCase):
response = self.client.post(url, data, format="json")
self.assertEqual(response.status_code, 201)
def test_create_alias_as_domadmin(self):
"""As DomainAdmin, try to create a new alias."""
self.client.credentials(
HTTP_AUTHORIZATION='Token ' + self.da_token.key)
url = reverse("external_api:alias-list")
response = self.client.post(url, self.ALIAS_DATA, format="json")
self.assertEqual(response.status_code, 201)
data = copy.deepcopy(self.ALIAS_DATA)
data["address"] = "alias_fromapi@test2.com"
response = self.client.post(url, data, format="json")
self.assertEqual(response.status_code, 400)
errors = json.loads(response.content)
self.assertIn("address", errors)
def test_update_alias(self):
"""Try to update an alias."""
alias = models.Alias.objects.get(address="alias@test.com")