From 6b46f5b48eb1f1e11d6950ffb6f24bb1ec90732e Mon Sep 17 00:00:00 2001 From: Bai Date: Mon, 24 May 2021 19:11:47 +0800 Subject: [PATCH 1/5] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0ApplicationUserLi?= =?UTF-8?q?st=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/applications/api/application.py | 37 ++++++++++++++++++++-- apps/applications/urls/api_urls.py | 1 + apps/perms/utils/application/permission.py | 4 +++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/apps/applications/api/application.py b/apps/applications/api/application.py index cb51ff023..b4255b426 100644 --- a/apps/applications/api/application.py +++ b/apps/applications/api/application.py @@ -2,18 +2,49 @@ # from orgs.mixins.api import OrgBulkModelViewSet +from rest_framework import generics -from ..hands import IsOrgAdminOrAppUser +from ..hands import IsOrgAdminOrAppUser, IsOrgAdmin from .. import models, serializers +from ..models import Application +from assets.models import SystemUser +from assets.serializers import SystemUserListSerializer +from perms.models import ApplicationPermission +from ..const import ApplicationCategoryChoices -__all__ = ['ApplicationViewSet'] +__all__ = ['ApplicationViewSet', 'ApplicationUserListApi'] class ApplicationViewSet(OrgBulkModelViewSet): - model = models.Application + model = Application filterset_fields = ('name', 'type', 'category') search_fields = filterset_fields permission_classes = (IsOrgAdminOrAppUser,) serializer_class = serializers.ApplicationSerializer + +class ApplicationUserListApi(generics.ListAPIView): + permission_classes = (IsOrgAdmin, ) + serializer_class = SystemUserListSerializer + + def get_application(self): + application = None + app_id = self.request.query_params.get('application_id') + if app_id: + application = Application.objects.get(id=app_id) + return application + + def get_queryset(self): + queryset = SystemUser.objects.none() + application = self.get_application() + if not application: + return queryset + if application.category == ApplicationCategoryChoices.remote_app: + return queryset + system_user_ids = ApplicationPermission.objects.filter(applications=application)\ + .values_list('system_users', flat=True) + if not system_user_ids: + return queryset + queryset = SystemUser.objects.filter(id__in=system_user_ids) + return queryset diff --git a/apps/applications/urls/api_urls.py b/apps/applications/urls/api_urls.py index ab463a401..9ca50d32c 100644 --- a/apps/applications/urls/api_urls.py +++ b/apps/applications/urls/api_urls.py @@ -14,6 +14,7 @@ router.register(r'applications', api.ApplicationViewSet, 'application') urlpatterns = [ path('remote-apps//connection-info/', api.RemoteAppConnectionInfoApi.as_view(), name='remote-app-connection-info'), + path('application-users/', api.ApplicationUserListApi.as_view(), name='application-user') ] diff --git a/apps/perms/utils/application/permission.py b/apps/perms/utils/application/permission.py index c4ebb5bdb..939a8e53c 100644 --- a/apps/perms/utils/application/permission.py +++ b/apps/perms/utils/application/permission.py @@ -72,3 +72,7 @@ def get_application_system_user_ids(user, application): def has_application_system_permission(user, application, system_user): system_user_ids = get_application_system_user_ids(user, application) return system_user.id in system_user_ids + + +def get_application_system_users_ids(application): + return system_users_id From 4eef25982dd74158438b61da69d8ded67b500dd9 Mon Sep 17 00:00:00 2001 From: Bai Date: Thu, 27 May 2021 18:42:43 +0800 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=20ApplicationUse?= =?UTF-8?q?rList=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/applications/api/application.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/applications/api/application.py b/apps/applications/api/application.py index b4255b426..93caa97d1 100644 --- a/apps/applications/api/application.py +++ b/apps/applications/api/application.py @@ -26,6 +26,8 @@ class ApplicationViewSet(OrgBulkModelViewSet): class ApplicationUserListApi(generics.ListAPIView): permission_classes = (IsOrgAdmin, ) + filterset_fields = ('name', 'username') + search_fields = filterset_fields serializer_class = SystemUserListSerializer def get_application(self): @@ -40,8 +42,8 @@ class ApplicationUserListApi(generics.ListAPIView): application = self.get_application() if not application: return queryset - if application.category == ApplicationCategoryChoices.remote_app: - return queryset + # if application.category == ApplicationCategoryChoices.remote_app: + # return queryset system_user_ids = ApplicationPermission.objects.filter(applications=application)\ .values_list('system_users', flat=True) if not system_user_ids: From bdab93260f05cf7a02cd7ca51dc9204041edcfc4 Mon Sep 17 00:00:00 2001 From: Bai Date: Wed, 2 Jun 2021 17:00:31 +0800 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20=E8=B5=84=E4=BA=A7=E7=94=A8?= =?UTF-8?q?=E6=88=B7API=E8=BF=94=E5=9B=9E=20BackendDisplay=20=E5=92=8C=20N?= =?UTF-8?q?ame=20=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/backends/base.py | 4 +- apps/assets/backends/db.py | 15 +++- apps/assets/models/asset_user.py | 1 + apps/assets/serializers/asset_user.py | 5 +- apps/locale/zh/LC_MESSAGES/django.mo | Bin 75313 -> 75515 bytes apps/locale/zh/LC_MESSAGES/django.po | 94 ++++++++++++++------------ 6 files changed, 72 insertions(+), 47 deletions(-) diff --git a/apps/assets/backends/base.py b/apps/assets/backends/base.py index 3b27a57af..17115afaa 100644 --- a/apps/assets/backends/base.py +++ b/apps/assets/backends/base.py @@ -31,11 +31,11 @@ class BaseBackend: def qs_to_values(qs): values = qs.values( 'hostname', 'ip', "asset_id", - 'username', 'password', 'private_key', 'public_key', + 'name', 'username', 'password', 'private_key', 'public_key', 'score', 'version', "asset_username", "union_id", 'date_created', 'date_updated', - 'org_id', 'backend', + 'org_id', 'backend', 'backend_display' ) return values diff --git a/apps/assets/backends/db.py b/apps/assets/backends/db.py index 386f0ee29..aa3e1ef78 100644 --- a/apps/assets/backends/db.py +++ b/apps/assets/backends/db.py @@ -106,6 +106,7 @@ class DBBackend(BaseBackend): class SystemUserBackend(DBBackend): model = SystemUser.assets.through backend = 'system_user' + backend_display = _('System user') prefer = backend base_score = 0 union_id_length = 2 @@ -138,6 +139,7 @@ class SystemUserBackend(DBBackend): kwargs = dict( hostname=F("asset__hostname"), ip=F("asset__ip"), + name=F("systemuser__name"), username=F("systemuser__username"), password=F("systemuser__password"), private_key=F("systemuser__private_key"), @@ -152,7 +154,8 @@ class SystemUserBackend(DBBackend): union_id=Concat(F("systemuser_id"), Value("_"), F("asset_id"), output_field=CharField()), org_id=F("asset__org_id"), - backend=Value(self.backend, CharField()) + backend=Value(self.backend, CharField()), + backend_display=Value(self.backend_display, CharField()), ) return kwargs @@ -174,12 +177,17 @@ class SystemUserBackend(DBBackend): class DynamicSystemUserBackend(SystemUserBackend): backend = 'system_user_dynamic' + backend_display = _('System user(Dynamic)') prefer = 'system_user' union_id_length = 3 def get_annotate(self): kwargs = super().get_annotate() kwargs.update(dict( + name=Concat( + F("systemuser__users__name"), Value('('), F("systemuser__name"), Value(')'), + output_field=CharField() + ), username=F("systemuser__users__username"), asset_username=Concat( F("asset__id"), Value("_"), @@ -221,6 +229,7 @@ class DynamicSystemUserBackend(SystemUserBackend): class AdminUserBackend(DBBackend): model = Asset backend = 'admin_user' + backend_display = _('Admin user') prefer = backend base_score = 200 @@ -246,6 +255,7 @@ class AdminUserBackend(DBBackend): def all(self): qs = self.model.objects.all().annotate( asset_id=F("id"), + name=F("admin_user__name"), username=F("admin_user__username"), password=F("admin_user__password"), private_key=F("admin_user__private_key"), @@ -256,6 +266,7 @@ class AdminUserBackend(DBBackend): asset_username=Concat(F("id"), Value("_"), F("admin_user__username"), output_field=CharField()), union_id=Concat(F("admin_user_id"), Value("_"), F("id"), output_field=CharField()), backend=Value(self.backend, CharField()), + backend_display=Value(self.backend_display, CharField()), ) qs = self.qs_to_values(qs) return qs @@ -264,6 +275,7 @@ class AdminUserBackend(DBBackend): class AuthbookBackend(DBBackend): model = AuthBook backend = 'db' + backend_display = _('Database') prefer = backend base_score = 400 @@ -313,6 +325,7 @@ class AuthbookBackend(DBBackend): asset_username=Concat(F("asset__id"), Value("_"), F("username"), output_field=CharField()), union_id=Concat(F("id"), Value("_"), F("asset_id"), output_field=CharField()), backend=Value(self.backend, CharField()), + backend_display=Value(self.backend_display, CharField()), ) qs = self.qs_to_values(qs) return qs diff --git a/apps/assets/models/asset_user.py b/apps/assets/models/asset_user.py index 118d4549b..ac9112427 100644 --- a/apps/assets/models/asset_user.py +++ b/apps/assets/models/asset_user.py @@ -7,6 +7,7 @@ class AssetUser(AuthBook): hostname = "" ip = "" backend = "" + backend_display = "" union_id = "" asset_username = "" diff --git a/apps/assets/serializers/asset_user.py b/apps/assets/serializers/asset_user.py index 19cb2adc7..90145399f 100644 --- a/apps/assets/serializers/asset_user.py +++ b/apps/assets/serializers/asset_user.py @@ -47,16 +47,17 @@ class AssetUserReadSerializer(AssetUserWriteSerializer): ip = serializers.CharField(read_only=True, label=_("IP")) asset = serializers.CharField(source='asset_id', label=_('Asset')) backend = serializers.CharField(read_only=True, label=_("Backend")) + backend_display = serializers.CharField(read_only=True, label=_("Backend (Display)")) class Meta(AssetUserWriteSerializer.Meta): read_only_fields = ( 'date_created', 'date_updated', 'created_by', 'version', ) - fields_mini = ['id', 'username'] + fields_mini = ['id', 'name', 'username'] fields_write_only = ['password', 'private_key', "public_key"] fields_small = fields_mini + fields_write_only + [ - 'backend', 'version', + 'backend', 'backend_display', 'version', 'date_created', "date_updated", 'comment' ] diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 53adc123954e272a9f8001bda791d4b7afcd7cc8..562853c5ed03958ff5cc4444f0131527efcd9509 100644 GIT binary patch delta 22171 zcmZ|X2bfRSy2tT7ql`9;84Lz9`lzG#=)pkIH z9notdgxv4%zh3vrz4y8Mxyxt0?<#xkwTl_&oV)pG!q>+V`mTf~oau4=lfd&bVVWq< zYn;gQQdA`1h;8V3xdS~f4x129ZR~jy@g9DL13vb=3;~|^92?OuWmCoyw{Pxw<7n^M z!t;jW8@z}^T6*3w+M9mjdAmH%=S8>Xqzt@)C+YCAt>>l1!|gmTF< ztQ|e?3ckWnJRj?Msqj7~!@n^F2E{qkm|0O5P!Pkg45s1yUL7hy*w#99MorMq9Eln* z6%*rfOo{7I<91vA0BWa>U^t#b&GQ(O;u}=|piZ6_f~nA#hDsC_t-QEd5p_kiP!l%8 zJQ#<%;_28OS6F+x&Ys8PdO8{kSIz* z4@F&6haRXCj7Cj3A9W=gP$$}N?Z2Q-aNqKYySWR=fa;$Qbt@{M=4p)TAB!n)xQ~jS z_Q|LfFGt;@ZK#FpLA{ozF(p1iE$l67;c2-K>Q@+bf@-Mw8e=N#YVlyyf~H%%(qi8p zDtb*$VR}4k9Ufsu;zXai6GWlfi=$3Z$MWq^_jUj#K_3R=7}Tx%0(0OJOooTB0G>u} zHT&PgZACH+p&=aglt-f`im~?hP!rWeP23&ztPI4|I12fUc(YLB=b(0KF>0%KT6_?* z6JNsOI=|PG`wu0s40b|Y`Eu0G>_eUCAg00-SO~A8P88D1U0FD4!P!tdR0wq|t6^%a zgPNxmYTiy5tn+uLqK9NKYQmZ3Jk$hBF*B}3?Z9DF|A&@O+}quv9H@ntw)i8|iQ-Tv z?uMGbKWe-WecJL_RJ6iX<}UN7c?H90e~h7+u#daKaMV37fI2}5v!Yqk{0P;rCF&XI zXmQUz?7tENtzk53Ayct5E=4WyGHT@yQ6HEWsGZ5u*G-%Y)h`A$zM{qTQ9IHW_1X== zv^X2J;0=A*e@(QLgzoJ=^CZR)|AyMCkbZ80Xw++18Pi}r)VL0)x1cX-p@UG*!U)vE zHx+fB1*i*Nff~2jXAR$BHWG)e;Xdk0{zjcJWq)@IGNT3-HY=g7ydG+c+n`R=8Fj0A zq2?KF`Pr!X7NN%ZHd@0zOi$uR)a!K(wekn3316WG1`cp>YSb2HK=sRx`hph1qF5ib z6QfZds)?xnt1$y^b^5$xRCG_`QCsr{+hCH!uIcnmq<{pe9 zK7<-~2X#SDP!I7NOoyol>h0kEM^n)i6hI9qV{sMK2|h%fuqA2-x}g?27&GD+iY+ZYZ4VPJ=>vyO;E2>8_a{TsI8lZdIpxD zUcc3-r}$gcQ+@)|<2Cd@w5a(4hdPs^-m)~P`AQC@gI<&BBqFdW=EA-hiSw~A?m^v> zN2nc(80N;spcYUWHDLqPt!ZoaM9n`8wV)Z6pNCrTTAwxSL0#EF)QXQ<{uj$%#?0hz zViX1rcX4)9|4OKPT+`ylsQFr&yHPLm{6+J>-@jqA@ z!$$CPJ~qM?xE^=oMj(V0VqZaf5YC#_%JLU75Q_%@JqyLM98ZZU* z(9A^*SdDthH>2L)pHK_Dj=JYhF%XlFc2|}X^-yO-&65N5%oIWGWOYob_rE%dbZN`)%<~)E4eRUFl(r!n3Gb@+az9@IH6#sZjSk6DGofn2Pgz#jK$! zYNAG{D`{(XKwV)RYU1IjiN>QAIv=y)TJt!*NBji!5XX#hJ6snN6Su`I*a>}WsEnne zEh#qEZFPOr3Y%Ko%HmjzA>R$_;sPv$4^g)ya-7?d5}1UzGHM5Ep%&T{wWG19w_?;d z_Fo-mlaPzeH5f#^74zV3)WBPq3;>d_W7vu zts2k%=cBUO8ZKjY;yaiCQ%rDM6@uF07_&YmC+>sV(qX789D~}4FHk35j~e$4>VmGK zzBBQt9Z2At=sKiB4JeH%um);CL)5KkVYWrBJPx&ho~XBH2nORc)DU_SJRB}-Xn&bu+L=7m7+R_hECv0kQThs}*q`_WYqMc!8QYV2Zndw5SD@!<<+b z{kI6U;9-~wC!iKO57X-X-(U^jV-yW%P*?Niba~_1AA1 z)GhnaY=nBdFS9 z7CaucpqZ%tb5Qed#v=FwYG?mK|L^~S(_JDQb>&g02@0SF6v6!19t-0%)a&>?YHP2d z-kSTUg@nv-6Td*6AoEQ3 zg)D%2OA4WXV$?iUEMF6K;`$hhpI{p7iK+4Pne4wN{L(tEMqSx<)DHZNCGi|;;*c-g z3BxgrI1=>?6t%blY9S3!Tig=0z>XGoH~XU&Hq1vwS3C)|velRlzeSz!7u1B8Q0?)k ziT}o6Of<_aBnw&b+7{Du;R) zYoq=ejzwMBaMTILnR8M7*I^F)2K5YFGviSg@Bq00pZ5n9?LfjW-93s##YIpj`~Wpk z9Hz%fm;qN}0sIb&;Um;N&N0V*PfDV0VH4C=w?r+tGim|7Fj(*ZAS$|t<4_OX7pNUr zgc`5~HDDK}!vm;i!PS4XBkLK`r16>crPkJ8~Cwq8FGE6E1RFABky+>!D865!J6BYN4Z17dRO; zpKl%&H7rAI?Rw0GTT!pi1=K>WqWb-g+RCS>*X}K9>x(XS`7)>lRYSe5tx>n=Gt7hI zu>@{IF2v{Er=kh|M6L8K>fQw}aSMn-#W_*^N}>8yu(%HDN*bb0*uvtzs0$c^+KCaC zpN`tmxfrVVe>D}Y_#4!f{)#%$HS-SYiXWlgir1(Gge-LvMWWgZpz@_rZ&3}@yiHN# z`k?;K7-#JZFd66fHmQQUQ7irdb&q~RZTUIW!me3-&)T1(#sw^Mw=M;0r$SLzm=iU= zDCWj;7=`W3QRvf_t)P+#_o7yO$@~-baE2~-_plHaC$5CqupjD*=b#q68nxBiF&cls ztoR7EfYdA8_o6iBCGNO_{ck~K8VUIrS!?hdTi9`$ z!*SG=UPXP$9$-pLu+>c*it3lwEQ`A0+Nfuw5o$-aVrtxtI^i+YEjo{h@tI%l|0^oG zR{>wSEzg8{_{w5lY=%)d8g*qWF&XYfO>_ixWv5Ulx`tZ71M>xHfp4%i25oZ}7KaHr zzvrW(0VB-`s1wXU?ZiUV)4U$@Vc2$eq6(;;sfD`IrlqfS`X;*O|$+ygb?IMn#Lm;^UqIPNe{U~%Gj)We*4r+a3~ zp`MA#JGuW_QC$)huqkSyIo5G0YKvE+ws;e2r}m+);78O#&tPY~f_j~6e(e_49rch7 zNA(|rTF?wEgh#$+|I<-vke&uiLR;)O@~hD!P|NP+MFD!>|GB;p&K*urF#W2cjOfVb(q! zbtOws^K8TNIx#-NMBlkD>5Kh(*_r=<`w$(#^Z}%zzvuM|`pkMI>EzWWoeF7X#fJ&!lbn|j%dHs4x@6hFIsX4FHN&n#uWk9r8}TinF#VD>VHqWVolUHJ@) z*Pu_Y&t@t*!EV$;_oKzvQ0)&<6TCG4F%zG0S1eWaYu8oIUOTtU+uHR zLGz;d#5x3>a}#Dq-I~&<1=dF`yp7o%wNrzveFSQO(=Fa&@qWxf{u*kbzQpIi-%)Y z;t8lL-GF+Sc3XVYd}6*uEhza#*FV&ZL@g-4#kEl9`xw*flhlSv0ulqQgAXH!Cs@47 z+=dy+@5g+28TC_e(o60WoF7Aoo1qrc1^v&KITW>!iPpYOdAPeDJ{4WrcGSH*g_`g# z>I$BqCVY!pP?9TdqAaL|7d9)Jb!B zr_5{S6EondYfp_8>6aC?&^D;?{ZXH0AL@K-EdSM2pX<1rga({KU2!~WtDc)dzqvRg zYJvi&iA$pTl{f2Q3F3CBot$fag}Q)asPkO5_?eH2CQ5M4nGAJ;)To6-SU%d~7)(aK zoaL)yF5)`Y-p3q{I^ks00vB3-i@DeI9kt4N)Ix4s`~bC(SC&tB-7P4&nI6?YC+bS` zqx!#Z`MMT2LS0BJ%XhW7x6|hhqoQyBB&?3xQ4_yKtvt~UH*tE@6=g$BSj6HA)?OD| zkZ*!|n0KJ&Ic@FdQR8o*#y|77`>5S?CkVnUgsCkqgc?u=b%ixi_pU8!;sL0MhME)2 zIp#{#1$<>5vit?qeDR8Pe(#o>DA>%1Izeu;AnG+Lj#^L^%QrwRpebg>j^MvHgZ`iYLvFj3W=E~81ZrSi)PP22Tg!inT1Y?3e{Rk&7h`tXH(+TzZTS@O zZr%)LR6Os$PLP{~EM`{1%EWano{HMa1y~3-TYTN(7pNV|b;q5c7-~n#q88f1@?BB$ z^fo`g!~W}v=aA3>wpz!179XLYJu%g-+`H!3y)$t ze1406_qw?o1b6=`JR{*C!rQN+gxsL!NlbEnm?fWAG7#Z)cjXa^F2ZB zOz=I|&lf{Q6PLC`HS6cu&6hC1;bOolHk_8z$_2}Vtn+2XROakb3)sPRou3+sTo6+UYpYfeG+nD3Nv8`Oo=1V z7ei$l6}cbl<5Sd@zW>DeG3vyfQ77z)OK<|}1Tjxt`}<~Xvw_(ZE77kt*21Nj4<9{c z|3j%nJab!85Ot!m7FRawqV8F9i+iK4co?excypThCFUi+2=z(-36tPmOpVV_KLI6r z&i-qHjL+QyvYG|WvZ$xKhQ(b`3;qoC8cnqPM%2Ug4JN=}Q9E@Jqwodl{ZIG8{Zd*0 z^$e8uQPG6ePy?D+Lod|IhoY`@A*RLEsQ!CV57}w+p5+t%;rfT0Sy305548hDP$w>n zn#WgzN-8SNtf8~n-#U!4_Su$SWp2Z0#_hNG9%{iaQ40?L)15FY>V$dClBj-FUF`GP zQqf92wGJc9DHuY2zPZ8jdr|$5qVDlk)CDAa>0aB6sGZ4)C9phB#y*%96aD4Bgb`Rs z?|(^4#9~o8jI?+sYQP!Pm+r3RLtnYLAnL@8un=}Y^`C|M)UHQe`C-&8IBQj@qfE*1px;_m=(FfMXu?7(@e4D_KW?H3^zWEi3U%+_N6pg=^@VF=@g#F5>Xytyjo;?8%6{u`0<|?~ zE&k1nM-6yr@oUr-1$qH~Ls1LOhFU;z)I8-d9agh^3)DRAOkWQw8aMg)QKyZ^-v3Kjp{c7_0WEadN|jk|NZ}kidLRDftw%ZtZks0qiSPB`71WBJ9Xw_&a252AMJDEc(uk~Q2wo%pWBf1)OS zYxyLJTzgtGn;C=J;&P}ftdAPk9yNb=)VzJMERI0k;=PFi+`s=_B%$~Ex^>Ku*iDoR z^&u*any4LWqRyxj_P6{bb0+G<^HBX(pmu1h#ivp8Tt)xGoY?0&{$(8!2e|=Zs4XgD zRz{t$K5F7v%lE-x;!&6!r<)7SwdM{?M*9KOyvI=sz2dXV9rG#bDg7I@(vT$1aMX#j zpjMs_^{|!4SZr+ZKGekL%^RqB9-yAF=csw!pw8nws2?tup~kPV_5L)7@!W^(>h4)u#b|NEbliaHcAD`O_&`j`g0qZTsKoQ0ZT zjrkSogx{hTc+fm;UN!HVf0>Dc?fnmj8zW-NxqLfy*a zQ1AaV)XG;`yc45{kE0g&2=%jI>M*xMl~F(OG{b^86sO@v)Ge*-OXDgHQCk{o@i5e_ zn1R}v1*j9Rwf5cSam!z`_zCJ^PMFs9&w?6X&@5}#FntZF=w7!$oiGl&V=p|2H?R(_ zPUr6ROUz81Hax%^jYY8r?n2#y1pJ43+R^v0Hg?93aVP5ApPK)%u+H}ZvI9QvBPx2z zJEDF!8)QyGt$Yz`tJYh*4>iFt)GaxK+PS+HC&=iwJOk?6Umo==v_ReaQK$=D?3ed{ zEtStmY(q_4D8fCpB~cw~pnim^Z*d%|UoX@x`3&_Ij5AlF9^UU!3yVjM*MA7$<{iubX zK>xr0U8SPG44$F}Ce9MzwZ;snD;S76(F}6|YJyefPV-090?whHfm;@bMY?&SQ0=8r zR&#B zvblveKz%2g`l#fjG9L8-*^Eo^XUvHGvb(2t8tOx`0kw5MqZW1p^=bVB^I~KUm#>LM ziCdta`l*&*k9uqNp~m^nQqciB|jZLt|S9fdG4{Z3Hs`Di?D4eyy}$?5o=4mz?C ze?i+!%csSsR!@K(DcP;B8^OuQWui1B5swXM-^m;stix}_x()v8e~%72R?*?IP4pIj zp`5e$G;N*emy>uY^(*xM%Gw5y-%MHIpM_n+qm-7ke?$H(_0iPz;2kG^ibIjZ=gqcB z{w6V+OjXz5MNwbKi6+rLlDdw!l!@dL*%%&r|Iva!r!($r^87vHedyBO2&LJhsT@t-^XF<6>RdB)Uz{)pB20UlyF;E2HHCk>-f@gs+T6W*Wx9_MQonp zyIP6Utq34Q+y@=3(;PDCvn;U`hHfLLFb= z7Rry-mp9qFPx+FzkFC#qYx7N^p$w%xWgW>*xZ4`LP}i}`yi5KN6YQh3B{!2&pAtuY zKmAhMzH5d@bTNluDFetWE8OX@7>r81s~JkNQW} z{u6D!RU|4Vqiu}7HAN3=&9igoS z=C?lksjsI~57(Fd=V)jHPycIz!*tX!m4Ts@H?*xFH`U$nx$m(UaXq~7uknMa z-=J?+JWrbr{WPRw0{!`I%!>=;{Ojn@*#bG4N z|DW6W^D=EcEcb+V9qXC&lB;^Z+1UEDEhMj_IZj4?#`XWV=akb=R=$EHGSip@`9ald zMLkBX9P^o=Kc%h^DP;~P)GsJ`C}oLjQFK&w z`2YOF=27sR`X-8d^SJ*XSmO*PD$3xcbc&_^?igtk=ElL6>_Gca#?7T{r~W?q^3(_0 zxRN&JpgD@RCiJOk6z5gFm zf1(6Of7FlN!8WK0^_-Mylvv6l+S^e+q3GbBa=fo`ye;%2JV0(9mZCJG-$mLhQO;3n zkvl_s1&R*ecB{NLkJ6zxgQD#ODX}m`zv0fIPfr|9DM(Jgt`{fQl`+qVXQGamIFeF^ zdJRelZSyDz>>M-5-6H-}?|*GNp0tL9=4+d1C>>8y??>l6xP~~4K7rQ$8F?MeDY?ld zqf{W*jaa|ktfhY4=FCpKn)aWG$Kf2}NZtQYRQ`SZLGaiT`oI zGL-Q*iM#0i%RtB9afc0#py3nZwRF-^ zi8w3j*Dije_SzE{pl?^=?$qBM7pdQ{_yqkDT0<kK=6lz_85Q4AlDGafi5h2H zNB&92e}pl32le~5z>3trV@xvQkEnl7{WF{62qQ+3YfZ^R`;X**rKBUSLfn-4a{4@> z{I2_7n94L28u|AJ?<%D!aThwi!Y1T@AyN>wSol0URK2O6w%xWhYi>b+djE!y30_sy3Gnp|1C{4*{ zB)(+r56ER9)-jL1e^UGhF0y)g>#MxZ@0GHKfehC1lDH3@%1~-j&XbG68nn-`K0%nm z-~0dmk%YcuXb1nXjQWq%Mw58M+%560o5$xRpb|^6lyw%5h_BG8Ds6+Q55mxQvsu4; zID80y~q>rxhJL1DQ1Yc5yQQxAU|KA-EB;PV%F9US^L_HtA z!1P$n@@h*%-`5z3H?REL)#=3`feot5T9cRxmE6`5dNAasUw5K|7Q+59V360 za+k~$>_D!w^_fq-5~a5-EDAT$CkvJ*uVW`=A#o<+*0_`QP2|=ShoSFFD#K}LLGdU9 zAu%O_Qku>yXkUOjmQgxW4m+dat4JIQ27h4x=om%%aRAmxywW{_lARM;BIIsS|CYLrRK&eq z)$30F6Ur$Y7eM{L4_$vw8WK@@&~S)2A(I@#$~cjHejBJk4=9I-pHps8-%2S#eG+5y z;bMx8hqjP!$Ols|N4^j~B+g4IN1wFl3!tF{mGv|xrxdjbs*wAePHl-#QU8H99W$tJ zpv0{qUhL-LGC<0Zw!?UE^w{3_vB~-!O ze{TDxYImro=0844NQd(F*WD+LOOX~V$6iWYFo zy9rZaKH}`CE3Spzv6ZzSMIImTBId;_m9A-I66;*nh3~G>H^= z9mDXk#cwewaf+_4Jqv2(MNrScJD3ccq88R3)&2$Q0!E{rh1r&0kGkMJsQ%}=vj3T= z+##WdB5^m@As^}ll~5BlM%{uAsDb^heFEwPOD(?xbs;BE{jZ~L#Z%Ngk)OH#QJ9Rl zoKHnhdkxfzTcYk!H`Ge|pkB+d7=g=C3yVW7{0OSwZPW?gpyrF@{%F2jsJJ9*LA5My zZL!~nie8g3m>wruhvk@&csmB35o^C|?IEALd}h?WjlobXjp6tX>eki4X#5b9ppS)c zEOM)T??)=yirttTkD;FOE2xQXqS_y$CQ8`DO`HeytQ1FWc}3)7#H))M-vG5!%~9h& zw|EfdB%Y2X_5S}zr8tRuSPpaabXVRIwKM%tCmMv2I0}p6EYyh(qOR;1YQYy!TYd|5 zE8n2ThxBsuB}es3gX#4C=cJ;E%A2vMfi*D;)<<1=chti)-STTtx8@M)R$aFE1#01u zz1@jZqvp?w8lMZ3V@32+P^m*jer)zMzrs}HXJSfRg}SossC#`9b!8XL8|HoU1*%_g zAGbr{s5rgF+552n+PZ=yw1CoB7HgtbI2^U|>6jPiqIPC4YNEraey366Z&>^cwIgAD z-Rl;OX^1PK7TgFmPpiJ{zwT)V60$EA!I7w~ibK8MM==6#VQPGe>YwZj_w;8*Ei?z} z-sVF+bfr-zdKYz}wNc}mTK-d?N)8g;tzjzaN*1F|xDj;=_E`H_^Cs%bpQ3gmw4Xas z3e>I2fSRYEV&}q+zzBhEi@-) z#KIQW#K1#^+L2bM`MRKXus3R+fvAOyM_tf27@_xnIhDK^hXwF57R00j-Ac=#Caj2o zdx&L-8)F8Xhj1=1zk1oq2_ssT1fC9_FpScPetay!0U**r={_IY>pbZ z6t#8Vp{`&(YKym+`%wK(U^Bdc+R5UB-IrJuj3sVm@uI=(|2rghkkG)ls4tUHwk02G zd$e_BP$zs3_4?ICJ;m)&PkA3qkE1Z~(4yvBVXi~HWm{46{egN*?)p?RQSpX&UT(;Y z*{~|cU^~<;nSt7}pHTx(qZV)rHQ{sAtqB|IOpof92eqJbmXAd(xW47v`BZdeT~I6T zX$=D`KOD1=AB$1A!s1_0{cob~@qLS5qvi`4=1v@riqoL_XGYz!Tv!7A7%JJRbU;ls z8g)f8P*?md#^M%ig0FBHHXQDGKj8~h|G2N*t=W&7=XcbzbPKhBN2r~6f!e8rBLegL zUJ5GO%3P=crBDw|71V&bsHeOs>izA3I^k&4J)eyUaUJT)HliNpU8s2up`Mv@sGYov zT0qi~dYHNY83PsWJ8D2QX2xQcuZxd4x-|USQiD#i6;?t;G_!vVl zY_$7BCpoSnE`q+c=YF(0-;4IGC_a0P1XHlRM~_Fx!Z!X$VLwU9@s z1-wN)Ry*)WpkC zSMU>RLDw)BKE}W;n(P*w2P4TBLoGBG^=;WGkmvq)rV>S>KkAC+q873OBXB)xSJbV! zV)0Wm*;IFB*-;CQK`p2}s{cEv@lCN9c17*%Ld&l}Uy1EhbmjX|6P(0icn%9<(rND7 zung*T?2LLAMxoxCsi-ZELyg~$+KFFL^PWKUzl3G*HpXC%>D+&9ZKLV#eQtrelD-xX z!92usQ771g`h+}*dP~k=U}Drfw=I7kb>e535);jEJCPn!5EnwtS9u2aUmfd`(3O3J zx`HpUG!8~h9EUpLc1(r)P|v`5i~m9`ztO0MvxTQ0)^?6D`JYT#Z`D7S!u?#QY0$6Timf7(L5b64kFdMqw+|!|nT2icpz| z+L|5aanu%FLp_WSQD4Imv)z^DMV+9iSq0U<0Y+n6)H5*3oPfH3X{ZaBhwOmwt)ilP zw9h5HbEp$OLQNDo$GtWsPz(3~3*o0&0%xGcA3{D*ygyL4@GWYqgTHnQPJvoL2Gjy_ zU{cQS6{Vtwt^#TYs-y08Gt_{OF)emNJtIR<{pVZza*NlZZrN7UPVB>Ccp5ct=v?l-GYgzg>1tZ+>Pq@FKWkv=DW|2 zjHrdwKy7_J%z~}v+xtI|gibgdwG(4eTR9yy(L&UT;!yW?8|vZv88z-V)V)5BdKPY= z=6Q~~;-CfYmPDfR*-#70w}AVvL@^SYpn`R%iCSqxi`$^KzKi91p(YrLy4Pb-SN^rd zD^UyEV(zm10n9-DEM~z6K9zT=L@snseIwL@K1VH}KkCGzQ9Cjjb)vbL5m%wMejld6 zr>F&mf8+XPK`pc(>HwLEA*h9nKy{pi+RE9e*KR553eThR zS5OQ32h(HXMeY_wVLsv*EQKvl7cvzY?|bv9=!%x2?%f8|0`^<{E9yj-Q2qY0_+QkO zyhNQaXt9ekqsB+0b|RnU%c6F)3hF#{F{9r9wp4VbgHR_LWllt0*$mWMu?V$*IMhV@ zto@|rFQeX~d#Ii8mbj1TOsISj)Rk8;Yhy6y_nK1Cz4-{W)tyia>S^&nYafAutwY_i z`KT*df?7}E zK|MTGR=A1!VR_;u*bgt`C)jMIYu|xIiEm?W%(%*3SQU&WZjEaHY8CrmfXXHkAK+C? zhecMq6V|}`#DnpBJdSGj*SPn17Ha3#VPZUtx)rBTJ9rKCHT?+n3?=@~j!t@v6zc^0rtebSOrV3 zb+^XDY9}tCKBAwX7976bJrfyG3(t>Q za4A%Kc}$M)VYuG^=2Y~_^(pH08ibm7JgVbTa}(-{_oJSTA4i<;!@&3dYAQP6Ce#&NMcv~&s9O-c*-elJLy7aE77%0B z#FE5qP+L0-^~}Vf?)f&L1yEb#>TS9TjU&nr~_gj?K#BCsg&yO%VmnM7cv<}X-@{2A1}PqWqi zhl$KsjJOGA$1%u*@2$q1*zzamP%J|HE$W1)F*V-8T=*KxVoraX+v=8BjznL~i0d#7 z9!3qkhK2E|#kse;g_p<73HVzN0}I&Uc48=M$3~&%n}WKPYfwA99aEuygo+-9tEip0 zkJ`$|sE6&PwTJI?SCSbuQ4y@96XXBT-{n3*yYJRZ%?YqQR@}n{(!Lm@67uKzUUr)J z;(q?hQrFuD_$!Bw?G7>sZ{SWkEd7OTC2s#K|7b{@{BYpS^pYNR3)zKQ@JZA?KZkm# z{zNVOE@}tgnrV)?@0bFp_F5RKrM9G^_rC+`-cG?RxEFKdHPjY{9e1A((Ww5_Q2jo~ zQaBM=ySESdDDftqa61+In|t^gqF(dPWtr}^GS*VBbTXVg+6ZH@tw)muZ#k_02 zK=n&}(p`B3Dvm}y3k6W~m&EiKi@p*qtV2iCfS%@;<`7iBQRZ|^NxTR(@kY#xJ5XDG z6FYZIa*F*|VvBXSigk!@VR0;d+MT!yrXuc#I^lTK70k5uA1uGk z;{E1H^NM*FBN+DrBQfj@`>!j>aKc7m|x1b)TV-{aEpPJ!k z-Ou`*sCg@!jm<8;br@=i`KT+~fLh^U)Ye}#Z=-I}6Kj8sT44A&y8u*N0i&@6>cm5= zeWtn0^y93%#x^`t%bV4W|w_e>0*h&s0pT^ zCZ22g#pWg~MgAaaE8m*wueb|{L7lLQ#Z6K3d}@A%n!gWfA-+#V9mZQ?8tSLgH>mt- z%#G_&1J0W_P&@VrbtOSpU3*$Hr&-jjh??(xi|eBn;{P}+CcNo>uctx9)h%w0+M%%+g0oROvJkb4on2ddvR)V%X8US)1X&Fk;5%0BZjYQRa%gI7>H5PHYu3z_9G@VcR%fu>j=r{Fxi zjz8d#f834~z3Z%rn!hcw0N?9wiM}r34YznKYAa`=0^;uUq?F^IufI zmuBey+_RMi)xRXFy)s7X{jaSGeuO$OJ>6?8aRO5kUqZb`4=kVRU-xiDVG#N9sGX{eQP>>Q zVt-7EQ&1-|sg)IIGfQ7g}h8c-BFI~cVyW3Uu1#z}Y{(_p7( z?vv2RqQrA8K8(eQZ&{rAx%zYe%TUoLT^-a%XkUw`qE5UOHPIo|30|W5rFh{MTnKdw z%9&Lx{~l_m8lx_#wdH%F`uoc3{U2!^=9p{Dou~!;W?r-WL(~>0dg*o|+N_8=Q4@}kbISF;*d8nOTf`Rw{C>8C%Rn&^ZUb(;hQla8JW{g=L)xVnA4GR&^K)p?SP~&c) z7WxpiuoSP|0;0_VukHOWMnWsCjJl__F*gpkj;l};tV8wNiy80)X2LtDol5-1wWl+q z%^1{`S2C+vzV;jTUlTVcA-kd`@~y)pa~|s6uS89>6AR#eiyxZLF+F+jty@S2GdF5n zan#O~v-n-#Dz#8o*1+P{sD*Se`=S;&(%R>sCi(``;wsDkjGE`5c^WnD8fw1Bs2xk> zC2$v-or+c*gX;J`>XWY}Y9e0Hz&#vq@oLmWKU#bcHQ{O0JP%M;nk0c6pTf*)7C`kc z<6_@yL`4JISci^gAJmo)vv@Y@#NV2mPz&9M>UR@U;cL{xnId6=z-wC;bs?Qm!>@MnrPt7-$PZXRW@HRxE+Vi2Vw5Y}Jm^Dxfs$+2r z4E+0lTWjcQerb+0r=hm^8`KrXp%(ND>Vzjz6JNmccoTJxb0%`_l~J#CbyUAWsCmXF zO5g`RiRN3!gVx~~>Vy|9|ImDnI!6PLM^B&1|DY1w=_GW`hS7ip_w7R zt1Kg-6UJG`!`9(EhLgXI`d)u(1|@cJq?rlz<&+0CaWT|FW6j!T6VyZcF>0Z`eX9&W zZOt&$$|s>7w#C>Hf3i3_)JO`NRK9Yx_=38#dbnyXRY73(cNjKRbwF{Qr$&r#78+(AwF zGSI*kCv_*zgvysd-P0V%qiq~#}LUgBBk>w{(&6?q-C)gj?-U^Yxg zTmiL!Mwk)Xpg!>iq9&Sv*)R^Z6K7EUZS8fj=&rpkB|(sD8_^93I6o7?#|9;KZ7(P!C~$Y>F#z7Jw+;`?;MA@m9crRHsHeA_aB$%Np!;Z@IIEsvgzDb_QKl4i?A8qLw(lQ;6Lu^gu_t_9*e1QKI%`g z_2ypG!q1@kU3anXJ)xorg8088*48IMZE=*vWl>vQ7xmfQ8}$rKLw(8ogu2qR=2h%Z zdY@JAr=qP3%js5{0rkmL5c6YW%MZcg#M4j{ z9I*U#)LZieH7;4STVP4l!eWs(*{g{<;m5h$1&u&mkUxfs?$tDN8R`nRpcb|t)$t5! z!Yim-aufBC-9hzxi&{uzZuiS57joXfk&gk_6Y~E^iRc@WUugo4A9?<~1yov7+ER1{ zMd`Sl4%M+0MPDqZC_0*wU&jP|oO>Ny${R`U7s_n<>R3)=-yx0_!)2+}D&djQy0pHEe$E zrjC`0b^bqTOvs>x)Subllr%=zfZgUD+9y%ETA!+xC*>U{H_jF`&CG^(t^T3;jXHDi z&rbTk?C|^*Gz_x|)u3Y~r96`dk-v+DtUZ|gyTp&wiDM#T`BxY3I;92m@0H|ut;M*i zH-h{>l&O@>J z>6wQXzTVh**Oc9QEF%BD&7#yG+UvN}S`Yo%%F-x_>6hQeueLttaIlSUL46cuwzOQO zAa36<62Fp2L)mK$zmwCkk_lH(&QZD%m!$k)ea?{M$41~7j$e__L0Q1qsxIwyqh5zx z8QgEVXXb9)6vX4xn!)Sn6h^s4M?MI=IO_W`mU7evWGA;8Mpqr>kuI6l9MTxZKIBl$nZ>dU$@ zc^ykleYVCQBdOe>-+4+o%2mcUz>mrMHyO}{3ZJuHIU7vq9i>xUTta?{N@(-_8w&$vHpK1(b0$!5~%U9MJ^NNxbDA>VoWg6CSGnT-;1)Hw!bL# z$WJ3~s0NNgHnEHN?xfFhf>x+Q-#+W9&ksZ_mijR2$+0wLAoEq{>oahaCuq)uk(9S& ze7r`d|9?~({_lY-DR(>_4$MR;6P_u4iV^>LStzx^qNA$bA?;0MAi6*qEHub5P%f_b4?ObB}U|G4A00Um>x^Ci@@RJys86 zU|%{OqI^W@NPfGuX>e}pKiG*rBOXb-SPdNfV}zHUxE=Kt)@KHDOd%J4{7rp>zGyzN zWEEOY(5b%lNJRZh+6FMeyOeqHBhB0RA$=av)}MZ#VKU+&ijxV6Re6aAAD z^u#O3zwreA$jco6{Xd6>Eey^^X+zmTyunUb(kAUm{FnMM!7r5bZ*{XgfzK8~@F4n8DW>RF&iqO8ilo++oT*ijF@p&Q$|{h^v}|@)P4L zQo<J981&Nt04^tTzBfdDPz=uV>b0zJWl&2%5ds?$o+u#iT}s=4~S<{ek2!vEF>SU&;LYpI!T~o zCglR<2)PI3USs?bW0kIWjC>|0+)STLHdf6Ws5hs?QS#E~d-~`IrT)ZKz4qk3Azngh zsNa8+NKB?&rX(Xdg~2~k<`U;4e$NKhC3k{c{1Hssw-%45tuPHch&zz~*z$$RXQkee zwjk;SD0wNl$(7SYoZnkO&_In!aJ*oG-Q?QfHR4x+EIUI^$Cs28l$VS-NiHG%=HOuB zgp?k{IwC2>iH~6#`~nlvFNF52#B)*S4;*6%Ueb7r(uAU;KWeVcly(f*O3_h;{2|J1 zN#U|1` zmncJ3;V40wPM?2i|CZ90ayih#4-xW@Deo}1j-|8>!1}~naV_y`tgY|=rPk>WJK-AQ zn{SKMe0(T9#Y7Le>n?j`l%rm>FYe=85c$V^r^4yKd\n" "Language-Team: JumpServer team\n" @@ -121,7 +121,7 @@ msgstr "系统用户" #: applications/serializers/attrs/application_category/remote_app.py:33 #: assets/models/asset.py:355 assets/models/authbook.py:26 #: assets/models/gathered_user.py:14 assets/serializers/admin_user.py:34 -#: assets/serializers/asset_user.py:48 assets/serializers/asset_user.py:89 +#: assets/serializers/asset_user.py:48 assets/serializers/asset_user.py:90 #: assets/serializers/system_user.py:201 audits/models.py:38 #: perms/models/asset_permission.py:99 templates/index.html:82 #: terminal/backends/command/models.py:19 @@ -184,7 +184,7 @@ msgstr "格式为逗号分隔的字符串, * 表示匹配所有. " #: users/templates/users/_select_user_modal.html:14 #: xpack/plugins/change_auth_plan/models.py:47 #: xpack/plugins/change_auth_plan/models.py:278 -#: xpack/plugins/cloud/serializers.py:51 +#: xpack/plugins/cloud/serializers.py:65 msgid "Username" msgstr "用户名" @@ -233,6 +233,7 @@ msgstr "所有复核人都不属于组织 `{}`" #: applications/const.py:9 #: applications/serializers/attrs/application_category/db.py:14 #: applications/serializers/attrs/application_type/mysql_workbench.py:26 +#: assets/backends/db.py:278 msgid "Database" msgstr "数据库" @@ -285,7 +286,7 @@ msgid "Cluster" msgstr "集群" #: applications/serializers/attrs/application_category/db.py:11 -#: ops/models/adhoc.py:146 xpack/plugins/cloud/serializers.py:49 +#: ops/models/adhoc.py:146 xpack/plugins/cloud/serializers.py:63 msgid "Host" msgstr "主机" @@ -295,7 +296,7 @@ msgstr "主机" #: applications/serializers/attrs/application_type/oracle.py:11 #: applications/serializers/attrs/application_type/pgsql.py:11 #: assets/models/asset.py:188 assets/models/domain.py:53 -#: xpack/plugins/cloud/serializers.py:50 +#: xpack/plugins/cloud/serializers.py:64 msgid "Port" msgstr "端口" @@ -315,7 +316,7 @@ msgstr "目标URL" #: applications/serializers/attrs/application_type/custom.py:25 #: applications/serializers/attrs/application_type/mysql_workbench.py:34 #: applications/serializers/attrs/application_type/vmware_client.py:30 -#: assets/models/base.py:252 assets/serializers/asset_user.py:76 +#: assets/models/base.py:252 assets/serializers/asset_user.py:77 #: audits/signals_handler.py:58 authentication/forms.py:22 #: authentication/templates/authentication/login.html:164 #: settings/serializers/settings.py:93 users/forms/profile.py:21 @@ -325,7 +326,7 @@ msgstr "目标URL" #: xpack/plugins/change_auth_plan/models.py:68 #: xpack/plugins/change_auth_plan/models.py:190 #: xpack/plugins/change_auth_plan/models.py:285 -#: xpack/plugins/cloud/serializers.py:53 +#: xpack/plugins/cloud/serializers.py:67 msgid "Password" msgstr "密码" @@ -357,11 +358,35 @@ msgstr "不能删除根节点 ({})" msgid "Deletion failed and the node contains assets" msgstr "删除失败,节点包含资产" -#: assets/backends/db.py:244 +#: assets/backends/db.py:109 assets/models/user.py:228 audits/models.py:39 +#: perms/models/application_permission.py:31 +#: perms/models/asset_permission.py:101 templates/_nav.html:45 +#: terminal/backends/command/models.py:20 +#: terminal/backends/command/serializers.py:14 terminal/models/session.py:42 +#: users/templates/users/_granted_assets.html:27 +#: users/templates/users/user_asset_permission.html:42 +#: users/templates/users/user_asset_permission.html:76 +#: users/templates/users/user_asset_permission.html:159 +#: users/templates/users/user_database_app_permission.html:40 +#: users/templates/users/user_database_app_permission.html:67 +msgid "System user" +msgstr "系统用户" + +#: assets/backends/db.py:180 +msgid "System user(Dynamic)" +msgstr "系统用户(动态)" + +#: assets/backends/db.py:232 assets/models/asset.py:196 +#: assets/models/cluster.py:19 assets/models/user.py:66 templates/_nav.html:44 +#: xpack/plugins/cloud/models.py:92 xpack/plugins/cloud/serializers.py:160 +msgid "Admin user" +msgstr "管理用户" + +#: assets/backends/db.py:253 msgid "Could not remove asset admin user" msgstr "不能移除资产的管理用户账号" -#: assets/backends/db.py:305 +#: assets/backends/db.py:317 msgid "Latest version could not be delete" msgstr "最新版本的不能被删除" @@ -405,12 +430,6 @@ msgstr "节点" msgid "Is active" msgstr "激活" -#: assets/models/asset.py:196 assets/models/cluster.py:19 -#: assets/models/user.py:66 templates/_nav.html:44 -#: xpack/plugins/cloud/models.py:92 xpack/plugins/cloud/serializers.py:146 -msgid "Admin user" -msgstr "管理用户" - #: assets/models/asset.py:199 msgid "Public IP" msgstr "公网IP" @@ -678,7 +697,7 @@ msgstr "ssh私钥" #: users/templates/users/user_asset_permission.html:41 #: users/templates/users/user_asset_permission.html:73 #: users/templates/users/user_asset_permission.html:158 -#: xpack/plugins/cloud/models.py:89 xpack/plugins/cloud/serializers.py:147 +#: xpack/plugins/cloud/models.py:89 xpack/plugins/cloud/serializers.py:161 msgid "Node" msgstr "节点" @@ -740,20 +759,6 @@ msgstr "家目录" msgid "System groups" msgstr "用户组" -#: assets/models/user.py:228 audits/models.py:39 -#: perms/models/application_permission.py:31 -#: perms/models/asset_permission.py:101 templates/_nav.html:45 -#: terminal/backends/command/models.py:20 -#: terminal/backends/command/serializers.py:14 terminal/models/session.py:42 -#: users/templates/users/_granted_assets.html:27 -#: users/templates/users/user_asset_permission.html:42 -#: users/templates/users/user_asset_permission.html:76 -#: users/templates/users/user_asset_permission.html:159 -#: users/templates/users/user_database_app_permission.html:40 -#: users/templates/users/user_database_app_permission.html:67 -msgid "System user" -msgstr "系统用户" - #: assets/models/utils.py:35 #, python-format msgid "%(value)s is not an even number" @@ -813,12 +818,16 @@ msgstr "ID" msgid "Backend" msgstr "后端" -#: assets/serializers/asset_user.py:80 users/forms/profile.py:160 +#: assets/serializers/asset_user.py:50 +msgid "Backend (Display)" +msgstr "后端 (显示名称)" + +#: assets/serializers/asset_user.py:81 users/forms/profile.py:160 #: users/models/user.py:580 users/templates/users/user_password_update.html:48 msgid "Public key" msgstr "SSH公钥" -#: assets/serializers/asset_user.py:84 users/models/user.py:577 +#: assets/serializers/asset_user.py:85 users/models/user.py:577 msgid "Private key" msgstr "ssh私钥" @@ -4003,7 +4012,7 @@ msgid "Security token validation" msgstr "安全令牌验证" #: users/templates/users/_base_otp.html:14 xpack/plugins/cloud/models.py:78 -#: xpack/plugins/cloud/serializers.py:145 +#: xpack/plugins/cloud/serializers.py:159 msgid "Account" msgstr "账户" @@ -4744,7 +4753,7 @@ msgstr "云服务商" msgid "Cloud account" msgstr "云账号" -#: xpack/plugins/cloud/models.py:81 xpack/plugins/cloud/serializers.py:126 +#: xpack/plugins/cloud/models.py:81 xpack/plugins/cloud/serializers.py:140 msgid "Regions" msgstr "地域" @@ -4752,7 +4761,7 @@ msgstr "地域" msgid "Hostname strategy" msgstr "主机名策略" -#: xpack/plugins/cloud/models.py:95 xpack/plugins/cloud/serializers.py:149 +#: xpack/plugins/cloud/models.py:95 xpack/plugins/cloud/serializers.py:163 msgid "Always update" msgstr "总是更新" @@ -4944,20 +4953,24 @@ msgstr "" msgid "Subscription ID" msgstr "" -#: xpack/plugins/cloud/serializers.py:124 +#: xpack/plugins/cloud/serializers.py:49 +msgid "This field is required" +msgstr "这个字段是必填项" + +#: xpack/plugins/cloud/serializers.py:138 msgid "History count" msgstr "执行次数" -#: xpack/plugins/cloud/serializers.py:125 +#: xpack/plugins/cloud/serializers.py:139 msgid "Instance count" msgstr "实例个数" -#: xpack/plugins/cloud/serializers.py:148 +#: xpack/plugins/cloud/serializers.py:162 #: xpack/plugins/gathered_user/serializers.py:20 msgid "Periodic display" msgstr "定时执行" -#: xpack/plugins/cloud/utils.py:64 +#: xpack/plugins/cloud/utils.py:65 msgid "Account unavailable" msgstr "账户无效" @@ -5045,9 +5058,6 @@ msgstr "旗舰版" msgid "Community edition" msgstr "社区版" -#~ msgid "This field is required" -#~ msgstr "这个字段是必填项" - #~ msgid "{} is required" #~ msgstr "{} 字段是必填项" From 1e99be17753ed0941e3c5d56ae998de7c154fc08 Mon Sep 17 00:00:00 2001 From: Bai Date: Thu, 3 Jun 2021 13:59:44 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=BA=94=E7=94=A8=E7=94=A8=E6=88=B7API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/applications/api/application.py | 2 -- apps/perms/utils/application/permission.py | 4 ---- 2 files changed, 6 deletions(-) diff --git a/apps/applications/api/application.py b/apps/applications/api/application.py index 93caa97d1..84426b6b2 100644 --- a/apps/applications/api/application.py +++ b/apps/applications/api/application.py @@ -42,8 +42,6 @@ class ApplicationUserListApi(generics.ListAPIView): application = self.get_application() if not application: return queryset - # if application.category == ApplicationCategoryChoices.remote_app: - # return queryset system_user_ids = ApplicationPermission.objects.filter(applications=application)\ .values_list('system_users', flat=True) if not system_user_ids: diff --git a/apps/perms/utils/application/permission.py b/apps/perms/utils/application/permission.py index 939a8e53c..c4ebb5bdb 100644 --- a/apps/perms/utils/application/permission.py +++ b/apps/perms/utils/application/permission.py @@ -72,7 +72,3 @@ def get_application_system_user_ids(user, application): def has_application_system_permission(user, application, system_user): system_user_ids = get_application_system_user_ids(user, application) return system_user.id in system_user_ids - - -def get_application_system_users_ids(application): - return system_users_id From 5daca6592bd25c1bb40ea22ca191f687a28b8b37 Mon Sep 17 00:00:00 2001 From: Bai Date: Fri, 4 Jun 2021 11:14:53 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E6=96=87?= =?UTF-8?q?=E6=A1=88=20=E5=90=8E=E7=AB=AF=20->=20=E6=9D=A5=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/serializers/asset_user.py | 2 +- apps/locale/zh/LC_MESSAGES/django.mo | Bin 75515 -> 75494 bytes apps/locale/zh/LC_MESSAGES/django.po | 35 +++----------------------- apps/users/models/user.py | 2 +- 4 files changed, 6 insertions(+), 33 deletions(-) diff --git a/apps/assets/serializers/asset_user.py b/apps/assets/serializers/asset_user.py index 90145399f..6552281c6 100644 --- a/apps/assets/serializers/asset_user.py +++ b/apps/assets/serializers/asset_user.py @@ -47,7 +47,7 @@ class AssetUserReadSerializer(AssetUserWriteSerializer): ip = serializers.CharField(read_only=True, label=_("IP")) asset = serializers.CharField(source='asset_id', label=_('Asset')) backend = serializers.CharField(read_only=True, label=_("Backend")) - backend_display = serializers.CharField(read_only=True, label=_("Backend (Display)")) + backend_display = serializers.CharField(read_only=True, label=_("Source")) class Meta(AssetUserWriteSerializer.Meta): read_only_fields = ( diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 562853c5ed03958ff5cc4444f0131527efcd9509..d5940b932d0d1b4e0a655e25c4605507d71bae46 100644 GIT binary patch delta 20409 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 HF3JA^D3R?_ delta 20438 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 diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 46b53a6ae..af2cbcc87 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: JumpServer 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-02 16:58+0800\n" +"POT-Creation-Date: 2021-06-04 11:11+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -819,8 +819,8 @@ msgid "Backend" msgstr "后端" #: assets/serializers/asset_user.py:50 -msgid "Backend (Display)" -msgstr "后端 (显示名称)" +msgid "Source" +msgstr "来源" #: assets/serializers/asset_user.py:81 users/forms/profile.py:160 #: users/models/user.py:580 users/templates/users/user_password_update.html:48 @@ -3899,7 +3899,7 @@ msgid "Wechat" msgstr "微信" #: users/models/user.py:596 -msgid "Source" +msgid "User source" msgstr "用户来源" #: users/models/user.py:600 @@ -5057,30 +5057,3 @@ msgstr "旗舰版" #: xpack/plugins/license/models.py:77 msgid "Community edition" msgstr "社区版" - -#~ msgid "{} is required" -#~ msgstr "{} 字段是必填项" - -#~ msgid "AppSecret is required" -#~ msgstr "AppSecret 是必须的" - -#~ msgid "Corporation ID(corpid)" -#~ msgstr "企业 ID(CorpId)" - -#~ msgid "Agent ID(agentid)" -#~ msgstr "应用 ID(AgentId)" - -#~ msgid "Secret(secret)" -#~ msgstr "秘钥(secret)" - -#~ msgid "AgentId" -#~ msgstr "应用 ID(AgentId)" - -#~ msgid "AppKey" -#~ msgstr "应用 Key(AppKey)" - -#~ msgid "AppSecret" -#~ msgstr "应用密文(AppSecret)" - -#~ msgid "No" -#~ msgstr "无" diff --git a/apps/users/models/user.py b/apps/users/models/user.py index 6f5b52f14..69d0318eb 100644 --- a/apps/users/models/user.py +++ b/apps/users/models/user.py @@ -593,7 +593,7 @@ class User(AuthMixin, TokenMixin, RoleMixin, MFAMixin, AbstractUser): source = models.CharField( max_length=30, default=Source.local, choices=Source.choices, - verbose_name=_('Source') + verbose_name=_('User source') ) date_password_last_updated = models.DateTimeField( auto_now_add=True, blank=True, null=True,