Skip to content

Commit

Permalink
Allow resource registry to provide service name
Browse files Browse the repository at this point in the history
  • Loading branch information
AlanCoding committed Feb 6, 2024
1 parent 4e9bf75 commit d0ac79d
Showing 1 changed file with 16 additions and 5 deletions.
21 changes: 16 additions & 5 deletions ansible_base/rbac/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from ansible_base.lib.serializers.common import CommonModelSerializer
from ansible_base.rbac.models import ObjectRole, RoleDefinition, TeamAssignment, UserAssignment
from ansible_base.rbac.permission_registry import permission_registry # careful for circular imports
from ansible_base.resource_registry.registry import get_registry


class ChoiceLikeMixin(serializers.ChoiceField):
Expand Down Expand Up @@ -42,13 +43,23 @@ def to_internal_value(self, data):
self.fail('incorrect_type', data_type=type(data).__name__)


def get_service_name():
if 'ansible_base.resource_registry' in settings.INSTALLED_APPS:
registry = get_registry()
return registry.api_config.service_type
else:
# NOTE: this is a stopgap measure until resource registry integrations are complete
# later on, this will probably hardcode "local" here
return settings.ANSIBLE_BASE_SERVICE_PREFIX


class ContentTypeField(ChoiceLikeMixin):
psuedo_model = permission_registry.content_type_model
psuedo_field = 'model'

def get_dynamic_choices(self):
return [
(f'{settings.ANSIBLE_BASE_SERVICE_PREFIX}.{cls._meta.model_name}', cls._meta.verbose_name.title())
(f'{get_service_name()}.{cls._meta.model_name}', cls._meta.verbose_name.title())
for cls in permission_registry.all_registered_models
]

Expand All @@ -57,7 +68,7 @@ def get_dynamic_object(self, data):
return permission_registry.content_type_model.objects.get(model=model)

def to_representation(self, value):
return f'{settings.ANSIBLE_BASE_SERVICE_PREFIX}.{value.model}'
return f'{get_service_name()}.{value.model}'


class PermissionField(ChoiceLikeMixin):
Expand All @@ -69,17 +80,17 @@ def get_dynamic_choices(self):
for cls in permission_registry.all_registered_models:
cls_name = cls._meta.model_name
for action in cls._meta.default_permissions:
perms.append(f'{settings.ANSIBLE_BASE_SERVICE_PREFIX}.{action}_{cls_name}')
perms.append(f'{get_service_name()}.{action}_{cls_name}')
for perm_name, description in cls._meta.permissions:
perms.append(f'{settings.ANSIBLE_BASE_SERVICE_PREFIX}.{perm_name}')
perms.append(f'{get_service_name()}.{perm_name}')
return perms

def get_dynamic_object(self, data):
codename = data.rsplit('.')[-1]
return permission_registry.permission_model.objects.get(codename=codename)

def to_representation(self, value):
return f'{settings.ANSIBLE_BASE_SERVICE_PREFIX}.{value.codename}'
return f'{get_service_name()}.{value.codename}'


class ManyRelatedListField(serializers.ListField):
Expand Down

0 comments on commit d0ac79d

Please sign in to comment.