mirror of
https://github.com/jumpserver/lina.git
synced 2025-09-16 15:19:25 +00:00
feat: 用户在线session 控制
This commit is contained in:
@@ -925,6 +925,7 @@
|
||||
"CurrentConnections": "Current connections",
|
||||
"TodayFailedConnections": "Connections failed today",
|
||||
"OnlineSessions": "Online sessions",
|
||||
"OnlineUserDevices": "Online user devices",
|
||||
"RealTimeData": "Real-time data",
|
||||
"UserAssetActivity": "User/Asset activity",
|
||||
"UserData": "User data",
|
||||
@@ -1271,6 +1272,7 @@
|
||||
"CommandStorageUpdate": "Command storage update",
|
||||
"Commands": "Commands",
|
||||
"FileTransfer": "File transfer",
|
||||
"OnlineSession": "Online session",
|
||||
"CreateCommandStorage": "Create command storage",
|
||||
"CreateReplayStorage": "Create replay storage",
|
||||
"Dashboard": "Dashboard",
|
||||
@@ -1451,6 +1453,10 @@
|
||||
"NoPermission": "No permission"
|
||||
},
|
||||
"terminal": {
|
||||
"OnlineSessionHelpMsg": "The current session cannot be offline because it is an online session of the current user. Currently, only users who have logged in through web mode are recorded.",
|
||||
"Offline": "Offline",
|
||||
"OfflineSuccessMsg": "Offline success",
|
||||
"BulkOffline": "Bulk offline",
|
||||
"Marketplace": "Marketplace",
|
||||
"Author": "Author",
|
||||
"Uploading": "File uploading",
|
||||
|
@@ -1277,6 +1277,8 @@
|
||||
"CommandStorageUpdate": "コマンドストアの更新",
|
||||
"Commands": "コマンド記録",
|
||||
"FileTransfer": "ファイル転送",
|
||||
"OnlineSession": "オンラインセッション",
|
||||
"OnlineUserDevices": "オンラインデバイス",
|
||||
"CreateCommandStorage": "コマンドストアの作成",
|
||||
"CreateReplayStorage": "録画ストレージの作成",
|
||||
"Dashboard": "ダッシュボード",
|
||||
@@ -1446,6 +1448,10 @@
|
||||
"NoPermission": "権限なし"
|
||||
},
|
||||
"terminal": {
|
||||
"Offline": "オフライン",
|
||||
"OnlineSessionHelpMsg": "セッションが現在のユーザーのオンラインセッションであるため、現在のセッションをオフラインできません。現在はWebログイン済みのユーザーのみが記録されています。",
|
||||
"OfflineSuccessMsg": "オフラインに成功しました",
|
||||
"BulkOffline": "オフライン",
|
||||
"Marketplace": "マーケットプレイス",
|
||||
"Author": "作者",
|
||||
"Uploading": "ファイルのアップロード",
|
||||
|
@@ -1290,6 +1290,8 @@
|
||||
"CommandStorageUpdate": "更新命令存储",
|
||||
"Commands": "命令记录",
|
||||
"FileTransfer": "文件传输",
|
||||
"OnlineSession": "在线用户",
|
||||
"OnlineUserDevices": "在线用户设备",
|
||||
"CreateCommandStorage": "创建命令存储",
|
||||
"CreateReplayStorage": "创建录像存储",
|
||||
"Dashboard": "仪表盘",
|
||||
@@ -1421,6 +1423,10 @@
|
||||
"NoPermission": "暂无权限"
|
||||
},
|
||||
"terminal": {
|
||||
"OnlineSessionHelpMsg": "无法下线当前会话,因为该会话是当前用户的在线会话。当前只记录以 Web 方式登录的用户。",
|
||||
"Offline": "下线",
|
||||
"OfflineSuccessMsg": "下线成功",
|
||||
"BulkOffline": "批量下线",
|
||||
"Marketplace": "应用市场",
|
||||
"Author": "作者",
|
||||
"BasePort": "监听端口",
|
||||
|
@@ -31,6 +31,16 @@ export default {
|
||||
permissions: []
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/audit/online-user-session',
|
||||
component: () => import('@/views/sessions/OnlineSession/OnlineSessionList'),
|
||||
name: 'OnlineSession',
|
||||
meta: {
|
||||
icon: 'users',
|
||||
title: i18n.t('route.OnlineSession'),
|
||||
permissions: ['users.view_usersession']
|
||||
}
|
||||
},
|
||||
{
|
||||
path: '/audit/sessions',
|
||||
component: empty,
|
||||
|
124
src/views/sessions/OnlineSession/OnlineSessionList.vue
Normal file
124
src/views/sessions/OnlineSession/OnlineSessionList.vue
Normal file
@@ -0,0 +1,124 @@
|
||||
<template>
|
||||
<GenericListPage
|
||||
ref="GenericListPage"
|
||||
:title="this.$t('route.OnlineUserDevices')"
|
||||
:header-actions="headerActions"
|
||||
:table-config="tableConfig"
|
||||
:help-message="helpMsg"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import GenericListPage from '@/layout/components/GenericListPage'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
GenericListPage
|
||||
},
|
||||
data() {
|
||||
const vm = this
|
||||
return {
|
||||
helpMsg: this.$t('terminal.OnlineSessionHelpMsg'),
|
||||
tableConfig: {
|
||||
permissions: {
|
||||
app: 'users',
|
||||
resource: 'usersession'
|
||||
},
|
||||
url: '/api/v1/users/user-sessions/',
|
||||
columnsExclude: ['backend', 'user', 'is_current_user_session', 'type'],
|
||||
columnsShow: {
|
||||
min: ['user_display', 'actions'],
|
||||
default: [
|
||||
'user_display', 'ip', 'city',
|
||||
'user_agent', 'date_created', 'actions'
|
||||
]
|
||||
},
|
||||
columns: [
|
||||
'user_display', 'backend_display', 'ip', 'city',
|
||||
'user_agent', 'date_created', 'date_expired', 'actions'
|
||||
],
|
||||
columnsMeta: {
|
||||
user_display: {
|
||||
label: this.$t('audits.User'),
|
||||
formatter: function(row) {
|
||||
const to = {
|
||||
name: 'UserDetail',
|
||||
params: { id: row.user.id }
|
||||
}
|
||||
if (vm.$hasPerm('users.view_user')) {
|
||||
return <router-link to={to}>{row.user.name}</router-link>
|
||||
} else {
|
||||
return <span>{row.user.name}</span>
|
||||
}
|
||||
}
|
||||
},
|
||||
actions: {
|
||||
formatterArgs: {
|
||||
hasDelete: false,
|
||||
hasUpdate: false,
|
||||
hasClone: false,
|
||||
extraActions: [
|
||||
{
|
||||
name: 'OfflineSession',
|
||||
title: this.$t('terminal.Offline'),
|
||||
can: ({ row }) => {
|
||||
return vm.$hasPerm('users.offline_usersession') && !row.is_current_user_session
|
||||
},
|
||||
type: 'danger',
|
||||
callback: ({ row }) => {
|
||||
this.$axios.post(
|
||||
'/api/v1/users/user-sessions/offline/',
|
||||
{ ids: [row.id] }
|
||||
).then(() => {
|
||||
vm.$message.success(this.$tc('terminal.OfflineSuccessMsg'))
|
||||
vm.$refs.GenericListPage.$refs.ListTable.$refs.ListTable.reloadTable()
|
||||
})
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
headerActions: {
|
||||
hasExport: false,
|
||||
hasImport: false,
|
||||
hasCreate: false,
|
||||
hasBulkDelete: false,
|
||||
hasLeftActions: true,
|
||||
hasRightActions: true,
|
||||
extraMoreActions: [
|
||||
{
|
||||
name: 'OfflineSelected',
|
||||
title: this.$t('terminal.BulkOffline'),
|
||||
type: 'danger',
|
||||
fa: 'clean',
|
||||
can: ({ selectedRows }) => {
|
||||
return selectedRows.length > 0 && vm.$hasPerm('users.offline_usersession')
|
||||
},
|
||||
callback: function({ selectedRows }) {
|
||||
vm.$axios.post(
|
||||
'/api/v1/users/user-sessions/offline/',
|
||||
{
|
||||
ids: selectedRows.map(v => {
|
||||
return v.id
|
||||
})
|
||||
}
|
||||
).then(res => {
|
||||
vm.$message.success(vm.$tc('terminal.OfflineSuccessMsg'))
|
||||
vm.$refs.GenericListPage.$refs.ListTable.$refs.ListTable.reloadTable()
|
||||
})
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.cell a {
|
||||
color: var(--color-info);
|
||||
}
|
||||
</style>
|
Reference in New Issue
Block a user