mirror of https://github.com/jumpserver/jumpserver
stash
parent
d176ccde4b
commit
43d3791ddc
|
@ -2,6 +2,7 @@
|
|||
from django.shortcuts import get_object_or_404
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.viewsets import GenericViewSet
|
||||
|
||||
from common.utils import get_logger, get_object_or_none
|
||||
from common.permissions import IsValidUser
|
||||
|
@ -20,7 +21,8 @@ logger = get_logger(__file__)
|
|||
__all__ = [
|
||||
'SystemUserViewSet', 'SystemUserAuthInfoApi', 'SystemUserAssetAuthInfoApi',
|
||||
'SystemUserCommandFilterRuleListApi', 'SystemUserTaskApi', 'SystemUserAssetsListView',
|
||||
'SystemUserTempAuthInfoApi', 'SystemUserAppAuthInfoApi', 'SystemUserAssetAccountApi'
|
||||
'SystemUserTempAuthInfoApi', 'SystemUserAppAuthInfoApi', 'SystemUserAssetAccountApi',
|
||||
'SystemUserAssetAccountSecretApi',
|
||||
]
|
||||
|
||||
|
||||
|
@ -76,24 +78,61 @@ class SystemUserViewSet(SuggestionMixin, OrgBulkModelViewSet):
|
|||
return Response(serializer.data)
|
||||
|
||||
|
||||
class SystemUserAssetAccountApi(generics.RetrieveUpdateDestroyAPIView):
|
||||
class SystemUserAccountViewSet(GenericViewSet):
|
||||
model = Account
|
||||
serializer_classes = {
|
||||
'default': serializers.AccountSerializer,
|
||||
'account_secret': serializers.AccountSecretSerializer,
|
||||
}
|
||||
|
||||
def get_object(self):
|
||||
system_user_id = self.kwargs.get('pk')
|
||||
asset_id = self.kwargs.get('asset_id')
|
||||
user_id = self.kwargs.get("user_id")
|
||||
system_user = SystemUser.objects.get(id=system_user_id)
|
||||
account = system_user.get_account(user_id, asset_id)
|
||||
return account
|
||||
|
||||
@action(methods=['get'], detail=False, url_path='account')
|
||||
def account(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
@action(methods=['get'], detail=False, url_path='account-secret')
|
||||
def account_secret(self):
|
||||
pass
|
||||
|
||||
@action(methods=['put'], detail=False, url_path='manual-account')
|
||||
def manual_account(self, request, *args, **kwargs):
|
||||
pass
|
||||
|
||||
|
||||
class SystemUserAssetAccountApi(generics.RetrieveAPIView):
|
||||
model = Account
|
||||
serializer_class = serializers.AccountSerializer
|
||||
|
||||
def get_object(self):
|
||||
system_user_id = self.kwargs.get('pk')
|
||||
asset_id = self.kwargs.get('asset_id')
|
||||
user_id = self.kwargs.get("user_id")
|
||||
system_user = super().get_object()
|
||||
system_user = SystemUser.objects.get(id=system_user_id)
|
||||
account = system_user.get_account(user_id, asset_id)
|
||||
return account
|
||||
|
||||
|
||||
class SystemUserAssetAccountSecretApi(SystemUserAssetAccountApi):
|
||||
model = Account
|
||||
serializer_class = serializers.AccountSecretSerializer
|
||||
rbac_perms = {
|
||||
'retrieve': 'assets.view_accountsecret'
|
||||
}
|
||||
|
||||
|
||||
class SystemUserAuthInfoApi(generics.RetrieveUpdateDestroyAPIView):
|
||||
"""
|
||||
Get system user auth info
|
||||
"""
|
||||
model = SystemUser
|
||||
serializer_class = serializers.SystemUserWithAuthInfoSerializer
|
||||
serializer_class = serializers.AccountSerializer
|
||||
rbac_perms = {
|
||||
'retrieve': 'assets.view_systemusersecret',
|
||||
'list': 'assets.view_systemusersecret',
|
||||
|
@ -101,6 +140,14 @@ class SystemUserAuthInfoApi(generics.RetrieveUpdateDestroyAPIView):
|
|||
'destroy': 'assets.change_systemuser',
|
||||
}
|
||||
|
||||
def get_object(self):
|
||||
system_user_id = self.kwargs.get('pk')
|
||||
asset_id = self.kwargs.get('asset_id')
|
||||
user_id = self.kwargs.get("user_id")
|
||||
system_user = SystemUser.objects.get(id=system_user_id)
|
||||
account = system_user.get_account(user_id, asset_id)
|
||||
return account
|
||||
|
||||
def destroy(self, request, *args, **kwargs):
|
||||
instance = self.get_object()
|
||||
instance.clear_auth()
|
||||
|
|
|
@ -75,7 +75,7 @@ class Migration(migrations.Migration):
|
|||
],
|
||||
options={
|
||||
'verbose_name': 'Account',
|
||||
'permissions': [('view_assetaccountsecret', 'Can view asset account secret'), ('change_assetaccountsecret', 'Can change asset account secret'), ('view_assethistoryaccount', 'Can view asset history account'), ('view_assethistoryaccountsecret', 'Can view asset history account secret')],
|
||||
'permissions': [('view_accountsecret', 'Can view asset account secret'), ('change_accountsecret', 'Can change asset account secret'), ('view_historyaccount', 'Can view asset history account'), ('view_historyaccountsecret', 'Can view asset history account secret')],
|
||||
'unique_together': {('username', 'asset')},
|
||||
},
|
||||
bases=(models.Model, assets.models.base.AuthMixin, assets.models.user.ProtocolMixin),
|
||||
|
|
|
@ -27,10 +27,10 @@ class Account(BaseUser, AbsConnectivity, ProtocolMixin):
|
|||
verbose_name = _('Account')
|
||||
unique_together = [('username', 'asset')]
|
||||
permissions = [
|
||||
('view_assetaccountsecret', _('Can view asset account secret')),
|
||||
('change_assetaccountsecret', _('Can change asset account secret')),
|
||||
('view_assethistoryaccount', _('Can view asset history account')),
|
||||
('view_assethistoryaccountsecret', _('Can view asset history account secret')),
|
||||
('view_accountsecret', _('Can view asset account secret')),
|
||||
('change_accountsecret', _('Can change asset account secret')),
|
||||
('view_historyaccount', _('Can view asset history account')),
|
||||
('view_historyaccountsecret', _('Can view asset history account secret')),
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
|
|
|
@ -223,7 +223,7 @@ class SystemUser(ProtocolMixin, BaseUser):
|
|||
return get_object_or_404(Account, asset_id=asset_id, username=username)
|
||||
|
||||
def get_account(self, user_id, asset_id):
|
||||
if self.login_mode == self.LOGIN_AUTO:
|
||||
if self.login_mode == self.LOGIN_MANUAL:
|
||||
return self.get_manual_account(user_id, asset_id)
|
||||
else:
|
||||
return self.get_auto_account(user_id, asset_id)
|
||||
|
|
|
@ -298,10 +298,10 @@ class SystemUserAssetRelationSerializer(RelationMixin, serializers.ModelSerializ
|
|||
asset_display = serializers.ReadOnlyField(label=_('Asset hostname'))
|
||||
|
||||
class Meta:
|
||||
model = SystemUser
|
||||
model = SystemUser.assets.through
|
||||
fields = [
|
||||
"id", "asset", "asset_display", 'systemuser', 'systemuser_display',
|
||||
"connectivity", 'date_verified', 'org_id'
|
||||
"id", "asset", "asset_display",
|
||||
"systemuser", "systemuser_display",
|
||||
]
|
||||
use_model_bulk_create = True
|
||||
model_bulk_create_kwargs = {
|
||||
|
|
|
@ -45,12 +45,10 @@ urlpatterns = [
|
|||
path('assets/<uuid:pk>/perm-user-groups/', api.AssetPermUserGroupListApi.as_view(), name='asset-perm-user-group-list'),
|
||||
path('assets/<uuid:pk>/perm-user-groups/<uuid:perm_user_group_id>/permissions/', api.AssetPermUserGroupPermissionsListApi.as_view(), name='asset-perm-user-group-permission-list'),
|
||||
|
||||
path('system-users/<uuid:pk>/auth-info/', api.SystemUserAuthInfoApi.as_view(), name='system-user-auth-info'),
|
||||
path('system-users/<uuid:pk>/assets/', api.SystemUserAssetsListView.as_view(), name='system-user-assets'),
|
||||
path('system-users/<uuid:pk>/assets/<uuid:asset_id>/auth-info/', api.SystemUserAssetAuthInfoApi.as_view(), name='system-user-asset-auth-info'),
|
||||
path('system-users/<uuid:pk>/applications/<uuid:app_id>/auth-info/', api.SystemUserAppAuthInfoApi.as_view(), name='system-user-app-auth-info'),
|
||||
path('system-users/<uuid:pk>/assets/<uuid:asset_id>/users/<uuid:user_id>/account/', api.SystemUserAssetAccountApi.as_view(), name='system-user-asset-account'),
|
||||
path('system-users/<uuid:pk>/temp-auth/', api.SystemUserTempAuthInfoApi.as_view(), name='system-user-asset-temp-info'),
|
||||
path('system-users/<uuid:pk>/assets/<uuid:asset_id>/users/<uuid:user_id>/account-secret/', api.SystemUserAssetAccountSecretApi.as_view(), name='system-user-asset-account-secret'),
|
||||
path('system-users/<uuid:pk>/tasks/', api.SystemUserTaskApi.as_view(), name='system-user-task-create'),
|
||||
path('system-users/<uuid:pk>/cmd-filter-rules/', api.SystemUserCommandFilterRuleListApi.as_view(), name='system-user-cmd-filter-rule-list'),
|
||||
path('cmd-filter-rules/', api.SystemUserCommandFilterRuleListApi.as_view(), name='cmd-filter-rules'),
|
||||
|
|
Loading…
Reference in New Issue