Skip to content

Commit

Permalink
fix(bklogin): open api - get user from bk-user
Browse files Browse the repository at this point in the history
  • Loading branch information
nannan00 committed Nov 9, 2023
1 parent ae9eaff commit abc5747
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 12 deletions.
19 changes: 8 additions & 11 deletions src/bk-login/bklogin/authentication/api_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@
specific language governing permissions and limitations under the License.
"""
from django.conf import settings
from django.utils.translation import gettext_lazy as _
from django.views.generic import View

from bklogin.bkuser.models import TenantUser
from bklogin.common.error_codes import error_codes
from bklogin.common.response import APISuccessResponse
from bklogin.component import bk_user as bk_user_api

from .manager import BkTokenManager

Expand All @@ -38,17 +37,15 @@ def get(self, request, *args, **kwargs):
if not ok:
raise error_codes.VALIDATION_ERROR.f(msg)

user = TenantUser.objects.filter(id=username).first()
if not user:
raise error_codes.OBJECT_NOT_FOUND.f(_("用户({})查询不到").format(username))
user = bk_user_api.get_tenant_user(username)

return APISuccessResponse(
{
"bk_username": username,
"tenant_id": user.tenant_id,
"full_name": user.data_source_user.full_name,
"source_username": user.data_source_user.username,
"language": user.language,
"time_zone": user.time_zone,
"bk_username": user["id"],
"tenant_id": user["tenant_id"],
"full_name": user["full_name"],
"source_username": user["username"],
"language": user["language"],
"time_zone": user["time_zone"],
}
)
7 changes: 6 additions & 1 deletion src/bk-login/bklogin/component/bk_user.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ def list_tenant(tenant_ids: List[str] | None = None) -> List[Dict]:

def get_tenant(tenant_id: str) -> Dict:
"""通过租户 ID 获取租户信息"""
return _call_bk_user_api(http_get, f"/api/v1/login/tenants/{tenant_id}")
return _call_bk_user_api(http_get, f"/api/v1/login/tenants/{tenant_id}/")


def list_idp(tenant_id: str) -> List[Dict]:
Expand All @@ -84,3 +84,8 @@ def list_matched_tencent_user(tenant_id: str, idp_id: str, idp_users: List[Dict[
f"/api/v1/login/tenants/{tenant_id}/idps/{idp_id}/matched-tenant-users/",
json={"idp_users": idp_users},
)


def get_tenant_user(tenant_user_id: str) -> Dict[str, Any]:
"""通过租户用户ID获取租户用户信息"""
return _call_bk_user_api(http_get, f"/api/v1/login/tenant-users/{tenant_user_id}/")
10 changes: 10 additions & 0 deletions src/bk-user/bkuser/apis/login/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,3 +87,13 @@ class TenantUserMatchOutputSLZ(serializers.Serializer):
id = serializers.CharField(help_text="租户用户 ID")
username = serializers.CharField(help_text="租户用户名")
full_name = serializers.CharField(help_text="租户用户姓名")


class TenantUserRetrieveOutputSLZ(serializers.Serializer):
id = serializers.CharField(help_text="用户 ID")
username = serializers.ReadOnlyField(help_text="用户名", source="data_source_user.username")
full_name = serializers.ReadOnlyField(help_text="用户姓名", source="data_source_user.full_name")
language = serializers.CharField(help_text="语言")
time_zone = serializers.CharField(help_text="时区")

tenant_id = serializers.CharField(help_text="用户所在租户 ID")
1 change: 1 addition & 0 deletions src/bk-user/bkuser/apis/login/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,5 @@
views.TenantUserMatchApi.as_view(),
name="login.matched_tenant_user.match",
),
path("tenant-users/<str:id>/", views.TenantUserRetrieveApi.as_view(), name="login.tenant_user.retrieve"),
]
10 changes: 10 additions & 0 deletions src/bk-user/bkuser/apis/login/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
TenantRetrieveOutputSLZ,
TenantUserMatchInputSLZ,
TenantUserMatchOutputSLZ,
TenantUserRetrieveOutputSLZ,
)


Expand Down Expand Up @@ -184,3 +185,12 @@ def post(self, request, *args, **kwargs):
many=True,
)
)


class TenantUserRetrieveApi(generics.RetrieveAPIView):
authentication_classes = [BkUserAppAuthentication]
permission_classes = [IsAuthenticated]

serializer_class = TenantUserRetrieveOutputSLZ
queryset = Tenant.objects.all()
lookup_field = "id"

0 comments on commit abc5747

Please sign in to comment.