Skip to content

Commit 2ac80e8

Browse files
committed
Implement my review comments
1 parent fcc27e5 commit 2ac80e8

File tree

6 files changed

+20
-32
lines changed

6 files changed

+20
-32
lines changed

ansible_base/authentication/utils/claims.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from ansible_base.authentication.models import Authenticator, AuthenticatorMap, AuthenticatorUser
2020
from ansible_base.authentication.utils.authenticator_map import check_role_type, expand_syntax
2121
from ansible_base.lib.abstract_models import AbstractOrganization, AbstractTeam, CommonModel
22+
from ansible_base.lib.utils.apps import is_rbac_installed
2223
from ansible_base.lib.utils.auth import get_organization_model, get_team_model
2324
from ansible_base.lib.utils.string import is_empty
2425

@@ -30,9 +31,6 @@
3031
User = get_user_model()
3132

3233

33-
is_rbac_installed = 'ansible_base.rbac' in settings.INSTALLED_APPS
34-
35-
3634
class TriggerResult(Enum):
3735
ALLOW = auto()
3836
DENY = auto()
@@ -723,7 +721,7 @@ def reconcile_user_claims(cls, user: AbstractUser, authenticator_user: Authentic
723721

724722
claims = getattr(user, 'claims', authenticator_user.claims)
725723

726-
if is_rbac_installed:
724+
if is_rbac_installed():
727725
cls(claims, user, authenticator_user).manage_permissions()
728726
else:
729727
logger.info(_("Skipping user claims with RBAC roles, because RBAC app is not installed"))
@@ -878,7 +876,7 @@ def __init__(self):
878876
self.cache = {}
879877
# NOTE(cutwater): We may probably execute this query once and cache the query results.
880878
self.content_types = {}
881-
if is_rbac_installed:
879+
if is_rbac_installed():
882880
from ansible_base.rbac.models import DABContentType
883881

884882
self.content_types = {content_type.model: content_type for content_type in DABContentType.objects.get_for_models(Organization, Team).values()}
@@ -962,7 +960,7 @@ def cache_existing(self, role_assignments: Iterable[models.Model]) -> None:
962960
- Role definitions are also cached separately in self.role_definitions
963961
"""
964962
local_resource_prefixes = ["shared"]
965-
if is_rbac_installed:
963+
if is_rbac_installed():
966964
from ansible_base.rbac.remote import get_local_resource_prefix
967965

968966
local_resource_prefixes.append(get_local_resource_prefix())

ansible_base/lib/utils/apps.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
def is_rbac_installed() -> bool:
2+
from django.conf import settings
3+
4+
return bool('ansible_base.rbac' in settings.INSTALLED_APPS)

ansible_base/resource_registry/models/service_identifier.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,5 @@ def save(self, *args, **kwargs):
2323
def service_id():
2424
global _service_id
2525
if not _service_id:
26-
service_obj = ServiceID.objects.first()
27-
if service_obj:
28-
_service_id = str(service_obj.pk)
29-
else:
30-
# Create a ServiceID if none exists
31-
service_obj = ServiceID.objects.create()
32-
_service_id = str(service_obj.pk)
26+
_service_id = str(ServiceID.objects.first().pk)
3327
return _service_id

ansible_base/resource_registry/rest_client.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@
88
from django.apps import apps
99
from django.conf import settings
1010

11+
from ansible_base.lib.utils.apps import is_rbac_installed
1112
from ansible_base.resource_registry.resource_server import get_resource_server_config, get_service_token
1213

1314

1415
def _check_rbac_installed():
1516
"""Check if ansible_base.rbac is installed and raise RuntimeError if not."""
16-
if 'ansible_base.rbac' not in settings.INSTALLED_APPS:
17+
if is_rbac_installed():
1718
raise RuntimeError("This operation requires ansible_base.rbac to be installed")
1819

1920

@@ -174,24 +175,20 @@ def get_resource_type_manifest(self, name, filters: Optional[dict] = None):
174175

175176
# RBAC related methods
176177
def list_role_types(self, filters: Optional[dict] = None):
177-
_check_rbac_installed()
178178
return self._make_request("get", "role-types/", params=filters)
179179

180180
def list_role_permissions(self, filters: Optional[dict] = None):
181-
_check_rbac_installed()
182181
return self._make_request("get", "role-permissions/", params=filters)
183182

184183
def list_user_assignments(self, user_ansible_id: Optional[str] = None, filters: Optional[dict] = None):
185184
"""List user role assignments."""
186-
_check_rbac_installed()
187185
params = (filters or {}).copy()
188186
if user_ansible_id is not None:
189187
params['user_ansible_id'] = user_ansible_id
190188
return self._make_request("get", "role-user-assignments/", params=params)
191189

192190
def list_team_assignments(self, team_ansible_id: Optional[str] = None, filters: Optional[dict] = None):
193191
"""List team role assignments."""
194-
_check_rbac_installed()
195192
params = (filters or {}).copy()
196193
if team_ansible_id is not None:
197194
params['team_ansible_id'] = team_ansible_id

ansible_base/resource_registry/shared_types.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
from django.conf import settings
21
from rest_framework import serializers
32
from rest_framework.exceptions import ValidationError
43

4+
from ansible_base.lib.utils.apps import is_rbac_installed
55
from ansible_base.resource_registry.utils.resource_type_serializers import AnsibleResourceForeignKeyField, SharedResourceTypeSerializer
66
from ansible_base.resource_registry.utils.sso_provider import get_sso_provider_server
77

@@ -84,8 +84,6 @@ class LenientPermissionSlugListField(serializers.ListField):
8484
child = serializers.CharField()
8585

8686
def to_internal_value(self, data):
87-
if 'ansible_base.rbac' not in settings.INSTALLED_APPS:
88-
raise RuntimeError("LenientPermissionSlugListField requires ansible_base.rbac to be installed")
8987
from ansible_base.rbac.models import DABPermission
9088

9189
data = super().to_internal_value(data)
@@ -105,7 +103,7 @@ class RoleDefinitionType(SharedResourceTypeSerializer):
105103
permissions = LenientPermissionSlugListField()
106104

107105
def __init__(self, *args, **kwargs):
108-
if 'ansible_base.rbac' not in settings.INSTALLED_APPS:
106+
if not is_rbac_installed():
109107
raise RuntimeError("RoleDefinitionType requires ansible_base.rbac to be installed")
110108

111109
super().__init__(*args, **kwargs)

ansible_base/resource_registry/tasks/sync.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,14 @@
1818
from django.db.utils import Error, IntegrityError
1919
from requests import HTTPError
2020

21+
from ansible_base.lib.utils.apps import is_rbac_installed
2122
from ansible_base.resource_registry.models import Resource, ResourceType
2223
from ansible_base.resource_registry.models.service_identifier import service_id
2324
from ansible_base.resource_registry.registry import get_registry
2425
from ansible_base.resource_registry.rest_client import ResourceAPIClient, get_resource_server_client
2526

2627
logger = logging.getLogger('ansible_base.resources_api.tasks.sync')
2728

28-
_is_rbac_installed = 'ansible_base.rbac' in settings.INSTALLED_APPS
29-
3029

3130
class ManifestNotFound(HTTPError):
3231
"""Raise when server returns 404 for a manifest"""
@@ -141,7 +140,7 @@ def fetch_manifest(
141140

142141

143142
def get_ansible_id_or_pk(assignment) -> str:
144-
if not _is_rbac_installed:
143+
if not is_rbac_installed():
145144
raise RuntimeError("get_ansible_id_or_pk requires ansible_base.rbac to be installed")
146145
# For object-scoped assignments, try to get the object's ansible_id
147146
if assignment.content_type.model in ('organization', 'team'):
@@ -157,7 +156,7 @@ def get_ansible_id_or_pk(assignment) -> str:
157156

158157

159158
def get_content_object(role_definition, assignment_tuple: AssignmentTuple) -> Any:
160-
if not _is_rbac_installed:
159+
if not is_rbac_installed():
161160
raise RuntimeError("get_content_object requires ansible_base.rbac to be installed")
162161
content_object = None
163162
if role_definition.content_type.model in ('organization', 'team'):
@@ -172,8 +171,6 @@ def get_content_object(role_definition, assignment_tuple: AssignmentTuple) -> An
172171

173172
def get_remote_assignments(api_client: ResourceAPIClient) -> set[AssignmentTuple]:
174173
"""Fetch remote assignments from the resource server and convert to tuples."""
175-
if not _is_rbac_installed:
176-
raise RuntimeError("get_remote_assignments requires ansible_base.rbac to be installed")
177174
assignments = set()
178175

179176
# Fetch user assignments with pagination
@@ -245,7 +242,7 @@ def get_remote_assignments(api_client: ResourceAPIClient) -> set[AssignmentTuple
245242

246243
def get_local_assignments() -> set[AssignmentTuple]:
247244
"""Get local assignments and convert to tuples."""
248-
if not _is_rbac_installed:
245+
if not is_rbac_installed():
249246
raise RuntimeError("get_local_assignments requires ansible_base.rbac to be installed")
250247
from ansible_base.rbac.models.role import RoleTeamAssignment, RoleUserAssignment
251248

@@ -305,7 +302,7 @@ def get_local_assignments() -> set[AssignmentTuple]:
305302

306303
def delete_local_assignment(assignment_tuple: AssignmentTuple) -> bool:
307304
"""Delete a local assignment based on the tuple."""
308-
if not _is_rbac_installed:
305+
if not is_rbac_installed():
309306
raise RuntimeError("delete_local_assignment requires ansible_base.rbac to be installed")
310307
from ansible_base.rbac.models.role import RoleDefinition
311308

@@ -335,7 +332,7 @@ def delete_local_assignment(assignment_tuple: AssignmentTuple) -> bool:
335332

336333
def create_local_assignment(assignment_tuple: AssignmentTuple) -> bool:
337334
"""Create a local assignment based on the tuple."""
338-
if not _is_rbac_installed:
335+
if not is_rbac_installed():
339336
raise RuntimeError("create_local_assignment requires ansible_base.rbac to be installed")
340337
from ansible_base.rbac.models.role import RoleDefinition
341338

@@ -713,7 +710,7 @@ def _sync_assignments(self):
713710
if not self.sync_assignments:
714711
return
715712

716-
if not _is_rbac_installed:
713+
if not is_rbac_installed():
717714
self.write(">>> Skipping role assignments sync (rbac not installed)")
718715
return
719716

0 commit comments

Comments
 (0)