diff --git a/src/components/ListTable/formatters/ArrayFormatter.vue b/src/components/ListTable/formatters/ArrayFormatter.vue new file mode 100644 index 000000000..53e59472f --- /dev/null +++ b/src/components/ListTable/formatters/ArrayFormatter.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/components/ListTable/formatters/index.js b/src/components/ListTable/formatters/index.js index cdd835644..8fb474e54 100644 --- a/src/components/ListTable/formatters/index.js +++ b/src/components/ListTable/formatters/index.js @@ -1,4 +1,5 @@ import DetailFormatter from './DetailFormatter' +import ArrayFormatter from './ArrayFormatter' import DisplayFormatter from './DisplayFormatter' import BooleanFormatter from './ChoicesFormatter' import ActionsFormatter from './ActionsFormatter' @@ -19,7 +20,8 @@ export default { SystemUserFormatter, ShowKeyFormatter, DialogDetailFormatter, - LoadingActionsFormatter + LoadingActionsFormatter, + ArrayFormatter } export { @@ -32,5 +34,6 @@ export { SystemUserFormatter, ShowKeyFormatter, DialogDetailFormatter, - LoadingActionsFormatter + LoadingActionsFormatter, + ArrayFormatter } diff --git a/src/i18n/langs/cn.json b/src/i18n/langs/cn.json index 65b5039ef..c3b8e1a73 100644 --- a/src/i18n/langs/cn.json +++ b/src/i18n/langs/cn.json @@ -1,5 +1,27 @@ { "": "", + "acl": { + "name": "名称", + "username": "用户名", + "ip_group": "IP 组", + "action": "动作", + "priority": "优先级", + "date_created": "创建时间", + "created_by": "创建者", + "asset": "资产信息", + "users":"用户信息", + "system_user": "系统用户", + "username_group":"用户名", + "hostname_group":"资产名", + "asset_ip_group": "资产IP", + "system_users_name_group": "系统用户名称", + "system_users_protocol_group": "系统用户协议", + "system_users_username_group": "系统用户名", + "apply_login_asset": "申请登录资产", + "apply_login_system_user": "申请登录系统用户", + "apply_login_user": "申请登录用户", + "RuleDetail": "规则详情" + }, "applications": { "": "", "RemoteApp": "远程应用", @@ -529,7 +551,15 @@ "KubernetesAppPermissionDetail": "Kubernetes授权详情", "KubernetesAppPermissionUpdate": "更新Kubernetes授权规则", "KubernetesAppUpdate": "更新Kubernetes", - + "Acl": "访问控制", + "UserAclList": "用户登录", + "UserAclCreate": "创建用户登录规则", + "UserAclUpdate": "更新用户登录规则", + "UserAclDetail": "用户登录规则详情", + "AssetAclList": "登录资产", + "AssetAclCreate": "创建资产登录规则", + "AssetAclUpdate": "更新资产登录规则", + "AssetAclDetail": "资产登录规则详情", "DomainCreate": "创建网域", "DomainDetail": "网域详情", "DomainList": "网域列表", diff --git a/src/i18n/langs/en.json b/src/i18n/langs/en.json index 926f86efd..8413a1416 100644 --- a/src/i18n/langs/en.json +++ b/src/i18n/langs/en.json @@ -1,5 +1,26 @@ { "": "", + "acl": { + "name": "Name", + "username": "Username", + "ip_group": "IP group", + "action": "Action", + "priority": "Priority", + "date_created": "Date created", + "created_by": "Created by", + "asset": "Asset", + "system_user": "System user", + "username_group":"Username group", + "hostname_group":"Hostname group", + "asset_ip_group": "Asset ip group", + "system_users_name_group": "Systemusers name group", + "system_users_protocol_group": "Systemusers protocol group", + "system_users_username_group": "systemusers username group", + "apply_login_asset": "Apply login asset", + "apply_login_system_user": "Apply login system user", + "apply_login_user": "Apply login user", + "RuleDetail": "Rule detail" + }, "applications": { "": "", "RemoteApp": "Remote app", @@ -527,6 +548,15 @@ "KubernetesAppPermissionDetail": "Kubernetes permissions detail", "KubernetesAppPermissionUpdate": "Kubernetes permissions update", "KubernetesAppUpdate": "Kubernetes app update", + "Acl": "Access control", + "UserAclList": "User acl list", + "UserAclCreate": "User acl create", + "UserAclUpdate": "User acl update", + "UserAclDetail": "User acl detail", + "AssetAclList": "Asset acl list", + "AssetAclCreate": "Asset acl create", + "AssetAclUpdate": "Asset acl update", + "AssetAclDetail": "Asset acl detail", "DomainCreate": "Domain create", "DomainDetail": "Domain detail", "DomainList": "Domains", diff --git a/src/router/acl.js b/src/router/acl.js new file mode 100644 index 000000000..fc7f816b8 --- /dev/null +++ b/src/router/acl.js @@ -0,0 +1,42 @@ +import i18n from '@/i18n/i18n' +import empty from '@/layout/empty' +export default [ + { + path: 'asset-acl', + component: empty, + redirect: '', + meta: { + title: i18n.t('route.AssetAclList'), + licenseRequired: true + }, + children: [ + { + path: '', + name: 'AssetAclList', + component: () => import('@/views/acl/AssetAcl/AssetAclList'), + meta: { title: i18n.t('route.AssetAclList'), activeMenu: '/acl/asset-acl' } + }, + { + path: 'create', + name: 'AssetAclCreate', + component: () => import('@/views/acl/AssetAcl/AssetAclCreateUpdate'), + meta: { title: i18n.t('route.AssetAclCreate'), activeMenu: '/acl/assetAcl' }, + hidden: true + }, + { + path: ':id', + name: 'AssetAclDetail', + component: () => import('@/views/acl/AssetAcl/AssetAclDetail'), + meta: { title: i18n.t('route.AssetAclDetail'), activeMenu: '/acl/asset-acl' }, + hidden: true + }, + { + path: ':id/update', + name: 'AssetAclUpdate', + component: () => import('@/views/acl/AssetAcl/AssetAclCreateUpdate'), + meta: { title: i18n.t('route.AssetAclUpdate'), activeMenu: '/acl/asset-acl' }, + hidden: true + } + ] + } +] diff --git a/src/router/index.js b/src/router/index.js index 694ccbe94..d95d091a4 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -36,6 +36,7 @@ import OpsRoutes from './ops' import TicketsRoutes from './tickets' import AuditsRoutes from './audits' import commonRoutes from './common' +import aclRoutes from './acl' /** * constantRoutes @@ -117,6 +118,17 @@ export const allRoleRoutes = [ meta: { title: i18n.t('route.Perms'), icon: 'edit' }, children: PermsRoute }, + { + path: '/acl/', + component: Layout, + redirect: '/perms/access-control-list/', + name: 'Acl', + meta: { + licenseRequired: true, + title: i18n.t('route.Acl'), + icon: 'fort-awesome' }, + children: aclRoutes + }, { path: '/terminal/', component: Layout, diff --git a/src/router/tickets.js b/src/router/tickets.js index b0753fd89..9f29bbe79 100644 --- a/src/router/tickets.js +++ b/src/router/tickets.js @@ -28,6 +28,13 @@ export default [ meta: { title: i18n.t('route.TicketDetail'), activeMenu: '/tickets/tickets' }, hidden: true }, + { + path: 'tickets/login-asset-confirm/:id', + name: 'loginAssetTicketDetail', + component: () => import('@/views/tickets/LoginAssetConfirm/Detail/index'), + meta: { title: i18n.t('route.TicketDetail'), activeMenu: '/tickets/tickets' }, + hidden: true + }, { path: 'tickets/request-application-perm/create', name: 'RequestApplicationPermTicketCreateUpdate', diff --git a/src/router/userPage.js b/src/router/userPage.js index 6ed4e3b0e..0d5e1137f 100644 --- a/src/router/userPage.js +++ b/src/router/userPage.js @@ -103,6 +103,13 @@ export default [ meta: { title: i18n.t('route.TicketDetail'), activeMenu: '/tickets', permissions: [rolec.PERM_USE] }, hidden: true }, + { + path: 'tickets/login-asset-confirm/:id', + name: 'loginAssetTicketDetail', + component: () => import('@/views/tickets/LoginAssetConfirm/Detail/index'), + meta: { title: i18n.t('route.TicketDetail'), activeMenu: '/tickets', permissions: [rolec.PERM_USE] }, + hidden: true + }, { path: 'tickets/request-application-perm/create', name: 'RequestApplicationPermTicketCreateUpdate', diff --git a/src/router/users.js b/src/router/users.js index 6ea0aa177..1d087c004 100644 --- a/src/router/users.js +++ b/src/router/users.js @@ -1,4 +1,5 @@ import i18n from '@/i18n/i18n' +import empty from '@/layout/empty' export default [ { path: 'users', @@ -53,5 +54,42 @@ export default [ name: 'UserGroupDetail', hidden: true, meta: { title: i18n.t('route.UserGroupDetail'), activeMenu: '/users/groups' } + }, + { + path: 'user-acl', + component: empty, + redirect: '', + meta: { title: i18n.t('route.UserAclList') }, + hidden: true, + children: [ + { + path: '', + name: 'UserAclList', + component: () => import('@/views/acl/UserAcl/UserAclList'), + meta: { title: i18n.t('route.UserAclList'), activeMenu: '/users/users' }, + hidden: true + }, + { + path: 'create', + name: 'UserAclCreate', + component: () => import('@/views/acl/UserAcl/UserAclCreateUpdate'), + meta: { title: i18n.t('route.UserAclCreate'), activeMenu: '/users/users' }, + hidden: true + }, + { + path: ':id', + name: 'UserAclDetail', + component: () => import('@/views/acl/UserAcl/UserAclDetail'), + meta: { title: i18n.t('route.UserAclDetail'), activeMenu: '/users/users' }, + hidden: true + }, + { + path: ':id/update', + name: 'UserAclUpdate', + component: () => import('@/views/acl/UserAcl/UserAclCreateUpdate'), + meta: { title: i18n.t('route.UserAclUpdate') }, + hidden: true + } + ] } ] diff --git a/src/views/acl/AssetAcl/AssetAclCreateUpdate.vue b/src/views/acl/AssetAcl/AssetAclCreateUpdate.vue new file mode 100644 index 000000000..aaeb1474f --- /dev/null +++ b/src/views/acl/AssetAcl/AssetAclCreateUpdate.vue @@ -0,0 +1,114 @@ + + + + + + diff --git a/src/views/acl/AssetAcl/AssetAclDetail/detail.vue b/src/views/acl/AssetAcl/AssetAclDetail/detail.vue new file mode 100644 index 000000000..76b2a3b43 --- /dev/null +++ b/src/views/acl/AssetAcl/AssetAclDetail/detail.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/src/views/acl/AssetAcl/AssetAclDetail/index.vue b/src/views/acl/AssetAcl/AssetAclDetail/index.vue new file mode 100644 index 000000000..c7e0fff23 --- /dev/null +++ b/src/views/acl/AssetAcl/AssetAclDetail/index.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/views/acl/AssetAcl/AssetAclList.vue b/src/views/acl/AssetAcl/AssetAclList.vue new file mode 100644 index 000000000..cc1cddb44 --- /dev/null +++ b/src/views/acl/AssetAcl/AssetAclList.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/src/views/acl/UserAcl/UserAclCreateUpdate.vue b/src/views/acl/UserAcl/UserAclCreateUpdate.vue new file mode 100644 index 000000000..849599fc8 --- /dev/null +++ b/src/views/acl/UserAcl/UserAclCreateUpdate.vue @@ -0,0 +1,91 @@ + + + + + + diff --git a/src/views/acl/UserAcl/UserAclDetail/Detail.vue b/src/views/acl/UserAcl/UserAclDetail/Detail.vue new file mode 100644 index 000000000..ac4909f41 --- /dev/null +++ b/src/views/acl/UserAcl/UserAclDetail/Detail.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/src/views/acl/UserAcl/UserAclDetail/index.vue b/src/views/acl/UserAcl/UserAclDetail/index.vue new file mode 100644 index 000000000..fe037e7a5 --- /dev/null +++ b/src/views/acl/UserAcl/UserAclDetail/index.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/views/acl/UserAcl/UserAclList.vue b/src/views/acl/UserAcl/UserAclList.vue new file mode 100644 index 000000000..0041b47ed --- /dev/null +++ b/src/views/acl/UserAcl/UserAclList.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/src/views/tickets/LoginAssetConfirm/Detail/TicketDetail.vue b/src/views/tickets/LoginAssetConfirm/Detail/TicketDetail.vue new file mode 100644 index 000000000..f31814278 --- /dev/null +++ b/src/views/tickets/LoginAssetConfirm/Detail/TicketDetail.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/views/tickets/LoginAssetConfirm/Detail/index.vue b/src/views/tickets/LoginAssetConfirm/Detail/index.vue new file mode 100644 index 000000000..22557987c --- /dev/null +++ b/src/views/tickets/LoginAssetConfirm/Detail/index.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/src/views/tickets/TicketListTable.vue b/src/views/tickets/TicketListTable.vue index a3ca60605..dcbd3d356 100644 --- a/src/views/tickets/TicketListTable.vue +++ b/src/views/tickets/TicketListTable.vue @@ -36,6 +36,8 @@ export default { return 'AssetsTicketDetail' } else if (row.type === 'apply_application') { return 'AppsTicketDetail' + } else if (row.type === 'login_asset_confirm') { + return 'loginAssetTicketDetail' } else { return 'TicketDetail' } diff --git a/src/views/users/User/UserDetail/index.vue b/src/views/users/User/UserDetail/index.vue index 297d5e0eb..7a495f44c 100644 --- a/src/views/users/User/UserDetail/index.vue +++ b/src/views/users/User/UserDetail/index.vue @@ -15,6 +15,7 @@ import UserApplicationPermissionRules from './UserApplicationsPermissionRules' import UserGrantedDatabases from './UserGrantedDatabases' import UserGrantedK8Ss from './UserGrantedK8Ss' import UserK8SPermissionRules from './UserK8SPermissionRules' +import UserAclList from '@/views/acl/UserAcl/UserAclList' import UserDatabasePermissionRules from './UserDatabasePermissionRules' import UserInfo from './UserInfo' @@ -29,7 +30,8 @@ export default { UserGrantedDatabases, UserDatabasePermissionRules, UserK8SPermissionRules, - UserGrantedK8Ss + UserGrantedK8Ss, + UserAclList }, data() { const vm = this @@ -61,23 +63,11 @@ export default { { title: this.$t('users.tabs.ApplicationPermissionRules'), name: 'UserApplicationPermissionRules' + }, + { + title: '用户登录规则', + name: 'UserAclList' } - // { - // title: this.$t('users.tabs.grantedDatabases'), - // name: 'UserGrantedDatabases' - // }, - // { - // title: this.$t('users.tabs.databasePermissionRules'), - // name: 'UserDatabasePermissionRules' - // }, - // { - // title: this.$t('users.tabs.grantedK8Ss'), - // name: 'UserGrantedK8Ss' - // }, - // { - // title: this.$t('users.tabs.k8sPermissionRules'), - // name: 'UserK8SPermissionRules' - // } ] } }