diff --git a/apps/acls/api/connect_method.py b/apps/acls/api/connect_method.py index ce65dcc34..9a8d8a9dc 100644 --- a/apps/acls/api/connect_method.py +++ b/apps/acls/api/connect_method.py @@ -1,6 +1,7 @@ from django_filters import rest_framework as drf_filters from common.api import JMSBulkModelViewSet +from orgs.utils import tmp_to_root_org from .common import ACLUserFilterMixin from .. import serializers from ..models import ConnectMethodACL @@ -21,3 +22,8 @@ class ConnectMethodACLViewSet(JMSBulkModelViewSet): filterset_class = ConnectMethodFilter search_fields = ('name',) serializer_class = serializers.ConnectMethodACLSerializer + + def filter_queryset(self, queryset): + with tmp_to_root_org(): + return super().filter_queryset(queryset) + diff --git a/apps/acls/api/login_acl.py b/apps/acls/api/login_acl.py index fc7693bd6..5dbd80e9f 100644 --- a/apps/acls/api/login_acl.py +++ b/apps/acls/api/login_acl.py @@ -1,4 +1,6 @@ from common.api import JMSBulkModelViewSet + +from orgs.utils import tmp_to_root_org from .common import ACLUserFilterMixin from .. import serializers from ..models import LoginACL @@ -17,3 +19,8 @@ class LoginACLViewSet(JMSBulkModelViewSet): filterset_class = LoginACLFilter search_fields = ('name',) serializer_class = serializers.LoginACLSerializer + + def filter_queryset(self, queryset): + with tmp_to_root_org(): + return super().filter_queryset(queryset) + diff --git a/apps/acls/models/base.py b/apps/acls/models/base.py index c92bf09e2..24857280f 100644 --- a/apps/acls/models/base.py +++ b/apps/acls/models/base.py @@ -12,6 +12,8 @@ __all__ = [ 'BaseACL', 'UserBaseACL', 'UserAssetAccountBaseACL', ] +from orgs.utils import tmp_to_root_org + class ActionChoices(models.TextChoices): reject = 'reject', _('Reject') @@ -88,7 +90,8 @@ class UserBaseACL(BaseACL): @classmethod def get_user_acls(cls, user): queryset = cls.objects.all() - q = cls.users.get_filter_q(user) + with tmp_to_root_org(): + q = cls.users.get_filter_q(user) queryset = queryset.filter(q) return queryset.filter(is_active=True).distinct() @@ -99,8 +102,6 @@ class UserAssetAccountBaseACL(OrgModelMixin, UserBaseACL): accounts = models.JSONField(default=list, verbose_name=_("Accounts")) objects = OrgManager.from_queryset(BaseACLQuerySet)() - objects = OrgManager.from_queryset(BaseACLQuerySet)() - class Meta(UserBaseACL.Meta): unique_together = [('name', 'org_id')] abstract = True diff --git a/apps/authentication/mixins.py b/apps/authentication/mixins.py index d3d84f560..647aac773 100644 --- a/apps/authentication/mixins.py +++ b/apps/authentication/mixins.py @@ -369,6 +369,7 @@ class AuthACLMixin: logger.debug('Login confirm acl id: {}'.format(acl_id)) if not acl_id: return + acl = LoginACL.get_user_acls(user).filter(id=acl_id).first() if not acl: return diff --git a/apps/common/db/fields.py b/apps/common/db/fields.py index 536f15cb3..a84a9de6f 100644 --- a/apps/common/db/fields.py +++ b/apps/common/db/fields.py @@ -392,7 +392,8 @@ class RelatedManager: return self.filter_queryset_by_model(value, to_model) def get_attr_q(self): - q = self._get_filter_attrs_q(self.value, apps.get_model(self.field.to)) + to_model = apps.get_model(self.field.to) + q = self._get_filter_attrs_q(self.value, to_model) return q def all(self):