Selaa lähdekoodia

新增在线用户管理

RuoYi 5 vuotta sitten
vanhempi
commit
86c7a763bc

+ 15 - 0
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUser.java

@@ -39,6 +39,11 @@ public class LoginUser implements Serializable
39 39
     private Long expireTime;
40 40
 
41 41
     /**
42
+     * 登录IP地址
43
+     */
44
+    private String ipaddr;
45
+
46
+    /**
42 47
      * 权限列表
43 48
      */
44 49
     private Set<String> permissions;
@@ -103,6 +108,16 @@ public class LoginUser implements Serializable
103 108
         this.expireTime = expireTime;
104 109
     }
105 110
 
111
+    public String getIpaddr()
112
+    {
113
+        return ipaddr;
114
+    }
115
+
116
+    public void setIpaddr(String ipaddr)
117
+    {
118
+        this.ipaddr = ipaddr;
119
+    }
120
+
106 121
     public Set<String> getPermissions()
107 122
     {
108 123
         return permissions;

+ 23 - 14
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ip/IpUtils.java

@@ -14,34 +14,43 @@ public class IpUtils
14 14
 {
15 15
     public static String getIpAddr(HttpServletRequest request)
16 16
     {
17
-        if (request == null)
17
+        String ip = null;
18
+
19
+        // X-Forwarded-For:Squid 服务代理
20
+        String ipAddresses = request.getHeader("X-Forwarded-For");
21
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses))
18 22
         {
19
-            return "unknown";
23
+            // Proxy-Client-IP:apache 服务代理
24
+            ipAddresses = request.getHeader("Proxy-Client-IP");
20 25
         }
21
-        String ip = request.getHeader("x-forwarded-for");
22
-        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
26
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses))
23 27
         {
24
-            ip = request.getHeader("Proxy-Client-IP");
28
+            // WL-Proxy-Client-IP:weblogic 服务代理
29
+            ipAddresses = request.getHeader("WL-Proxy-Client-IP");
25 30
         }
26
-        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
31
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses))
27 32
         {
28
-            ip = request.getHeader("X-Forwarded-For");
33
+            // HTTP_CLIENT_IP:有些代理服务器
34
+            ipAddresses = request.getHeader("HTTP_CLIENT_IP");
29 35
         }
30
-        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
36
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses))
31 37
         {
32
-            ip = request.getHeader("WL-Proxy-Client-IP");
38
+            // X-Real-IP:nginx服务代理
39
+            ipAddresses = request.getHeader("X-Real-IP");
33 40
         }
34
-        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
41
+
42
+        // 有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP
43
+        if (ipAddresses != null && ipAddresses.length() != 0)
35 44
         {
36
-            ip = request.getHeader("X-Real-IP");
45
+            ip = ipAddresses.split(",")[0];
37 46
         }
38 47
 
39
-        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
48
+        // 还是不能获取到,最后再通过request.getRemoteAddr();获取
49
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses))
40 50
         {
41 51
             ip = request.getRemoteAddr();
42 52
         }
43
-
44
-        return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
53
+        return ip.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;
45 54
     }
46 55
 
47 56
     public static boolean internalIp(String ip)

+ 2 - 0
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java

@@ -11,6 +11,7 @@ import com.ruoyi.common.core.constant.CacheConstants;
11 11
 import com.ruoyi.common.core.constant.Constants;
12 12
 import com.ruoyi.common.core.utils.IdUtils;
13 13
 import com.ruoyi.common.core.utils.ServletUtils;
14
+import com.ruoyi.common.core.utils.ip.IpUtils;
14 15
 import com.ruoyi.common.redis.service.RedisService;
15 16
 import com.ruoyi.system.api.model.LoginUser;
16 17
 
@@ -41,6 +42,7 @@ public class TokenService
41 42
         loginUser.setToken(token);
42 43
         loginUser.setUserid(loginUser.getSysUser().getUserId());
43 44
         loginUser.setUsername(loginUser.getSysUser().getUserName());
45
+        loginUser.setIpaddr(IpUtils.getIpAddr(ServletUtils.getRequest()));
44 46
         refreshToken(loginUser);
45 47
 
46 48
         // 保存或更新用户token

+ 92 - 0
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java

@@ -0,0 +1,92 @@
1
+package com.ruoyi.system.controller;
2
+
3
+import java.util.ArrayList;
4
+import java.util.Collection;
5
+import java.util.Collections;
6
+import java.util.List;
7
+import org.springframework.beans.factory.annotation.Autowired;
8
+import org.springframework.web.bind.annotation.DeleteMapping;
9
+import org.springframework.web.bind.annotation.GetMapping;
10
+import org.springframework.web.bind.annotation.PathVariable;
11
+import org.springframework.web.bind.annotation.RequestMapping;
12
+import org.springframework.web.bind.annotation.RestController;
13
+import com.ruoyi.common.core.constant.CacheConstants;
14
+import com.ruoyi.common.core.utils.StringUtils;
15
+import com.ruoyi.common.core.web.controller.BaseController;
16
+import com.ruoyi.common.core.web.domain.AjaxResult;
17
+import com.ruoyi.common.core.web.page.TableDataInfo;
18
+import com.ruoyi.common.log.annotation.Log;
19
+import com.ruoyi.common.log.enums.BusinessType;
20
+import com.ruoyi.common.redis.service.RedisService;
21
+import com.ruoyi.common.security.annotation.PreAuthorize;
22
+import com.ruoyi.system.api.model.LoginUser;
23
+import com.ruoyi.system.domain.SysUserOnline;
24
+import com.ruoyi.system.service.ISysUserOnlineService;
25
+
26
+/**
27
+ * 在线用户监控
28
+ * 
29
+ * @author ruoyi
30
+ */
31
+@RestController
32
+@RequestMapping("/online")
33
+public class SysUserOnlineController extends BaseController
34
+{
35
+    @Autowired
36
+    private ISysUserOnlineService userOnlineService;
37
+
38
+    @Autowired
39
+    private RedisService redisService;
40
+
41
+    @PreAuthorize(hasPermi = "monitor:online:list")
42
+    @GetMapping("/list")
43
+    public TableDataInfo list(String ipaddr, String userName)
44
+    {
45
+        Collection<String> keys = redisService.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
46
+        List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
47
+        for (String key : keys)
48
+        {
49
+            LoginUser user = redisService.getCacheObject(key);
50
+            if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName))
51
+            {
52
+                if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername()))
53
+                {
54
+                    userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
55
+                }
56
+            }
57
+            else if (StringUtils.isNotEmpty(ipaddr))
58
+            {
59
+                if (StringUtils.equals(ipaddr, user.getIpaddr()))
60
+                {
61
+                    userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
62
+                }
63
+            }
64
+            else if (StringUtils.isNotEmpty(userName))
65
+            {
66
+                if (StringUtils.equals(userName, user.getUsername()))
67
+                {
68
+                    userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
69
+                }
70
+            }
71
+            else
72
+            {
73
+                userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
74
+            }
75
+        }
76
+        Collections.reverse(userOnlineList);
77
+        userOnlineList.removeAll(Collections.singleton(null));
78
+        return getDataTable(userOnlineList);
79
+    }
80
+
81
+    /**
82
+     * 强退用户
83
+     */
84
+    @PreAuthorize(hasPermi = "monitor:online:forceLogout")
85
+    @Log(title = "在线用户", businessType = BusinessType.FORCE)
86
+    @DeleteMapping("/{tokenId}")
87
+    public AjaxResult forceLogout(@PathVariable String tokenId)
88
+    {
89
+        redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);
90
+        return AjaxResult.success();
91
+    }
92
+}

+ 0 - 13
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java

@@ -10,9 +10,6 @@ public class SysUserOnline
10 10
     /** 会话编号 */
11 11
     private String tokenId;
12 12
 
13
-    /** 部门名称 */
14
-    private String deptName;
15
-
16 13
     /** 用户名称 */
17 14
     private String userName;
18 15
 
@@ -41,16 +38,6 @@ public class SysUserOnline
41 38
         this.tokenId = tokenId;
42 39
     }
43 40
 
44
-    public String getDeptName()
45
-    {
46
-        return deptName;
47
-    }
48
-
49
-    public void setDeptName(String deptName)
50
-    {
51
-        this.deptName = deptName;
52
-    }
53
-
54 41
     public String getUserName()
55 42
     {
56 43
         return userName;

+ 48 - 0
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java

@@ -0,0 +1,48 @@
1
+package com.ruoyi.system.service;
2
+
3
+import com.ruoyi.system.api.model.LoginUser;
4
+import com.ruoyi.system.domain.SysUserOnline;
5
+
6
+/**
7
+ * 在线用户 服务层
8
+ * 
9
+ * @author ruoyi
10
+ */
11
+public interface ISysUserOnlineService
12
+{
13
+    /**
14
+     * 通过登录地址查询信息
15
+     * 
16
+     * @param ipaddr 登录地址
17
+     * @param user 用户信息
18
+     * @return 在线用户信息
19
+     */
20
+    public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user);
21
+
22
+    /**
23
+     * 通过用户名称查询信息
24
+     * 
25
+     * @param userName 用户名称
26
+     * @param user 用户信息
27
+     * @return 在线用户信息
28
+     */
29
+    public SysUserOnline selectOnlineByUserName(String userName, LoginUser user);
30
+
31
+    /**
32
+     * 通过登录地址/用户名称查询信息
33
+     * 
34
+     * @param ipaddr 登录地址
35
+     * @param userName 用户名称
36
+     * @param user 用户信息
37
+     * @return 在线用户信息
38
+     */
39
+    public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user);
40
+
41
+    /**
42
+     * 设置在线用户信息
43
+     * 
44
+     * @param user 用户信息
45
+     * @return 在线用户
46
+     */
47
+    public SysUserOnline loginUserToUserOnline(LoginUser user);
48
+}

+ 89 - 0
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java

@@ -0,0 +1,89 @@
1
+package com.ruoyi.system.service.impl;
2
+
3
+import org.springframework.stereotype.Service;
4
+import com.ruoyi.common.core.utils.StringUtils;
5
+import com.ruoyi.system.api.model.LoginUser;
6
+import com.ruoyi.system.domain.SysUserOnline;
7
+import com.ruoyi.system.service.ISysUserOnlineService;
8
+
9
+/**
10
+ * 在线用户 服务层处理
11
+ * 
12
+ * @author ruoyi
13
+ */
14
+@Service
15
+public class SysUserOnlineServiceImpl implements ISysUserOnlineService
16
+{
17
+    /**
18
+     * 通过登录地址查询信息
19
+     * 
20
+     * @param ipaddr 登录地址
21
+     * @param user 用户信息
22
+     * @return 在线用户信息
23
+     */
24
+    @Override
25
+    public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user)
26
+    {
27
+        if (StringUtils.equals(ipaddr, user.getIpaddr()))
28
+        {
29
+            return loginUserToUserOnline(user);
30
+        }
31
+        return null;
32
+    }
33
+
34
+    /**
35
+     * 通过用户名称查询信息
36
+     * 
37
+     * @param userName 用户名称
38
+     * @param user 用户信息
39
+     * @return 在线用户信息
40
+     */
41
+    @Override
42
+    public SysUserOnline selectOnlineByUserName(String userName, LoginUser user)
43
+    {
44
+        if (StringUtils.equals(userName, user.getUsername()))
45
+        {
46
+            return loginUserToUserOnline(user);
47
+        }
48
+        return null;
49
+    }
50
+
51
+    /**
52
+     * 通过登录地址/用户名称查询信息
53
+     * 
54
+     * @param ipaddr 登录地址
55
+     * @param userName 用户名称
56
+     * @param user 用户信息
57
+     * @return 在线用户信息
58
+     */
59
+    @Override
60
+    public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user)
61
+    {
62
+        if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername()))
63
+        {
64
+            return loginUserToUserOnline(user);
65
+        }
66
+        return null;
67
+    }
68
+
69
+    /**
70
+     * 设置在线用户信息
71
+     * 
72
+     * @param user 用户信息
73
+     * @return 在线用户
74
+     */
75
+    @Override
76
+    public SysUserOnline loginUserToUserOnline(LoginUser user)
77
+    {
78
+        if (StringUtils.isNull(user))
79
+        {
80
+            return null;
81
+        }
82
+        SysUserOnline sysUserOnline = new SysUserOnline();
83
+        sysUserOnline.setTokenId(user.getToken());
84
+        sysUserOnline.setUserName(user.getUsername());
85
+        sysUserOnline.setIpaddr(user.getIpaddr());
86
+        sysUserOnline.setLoginTime(user.getLoginTime());
87
+        return sysUserOnline;
88
+    }
89
+}

+ 18 - 0
ruoyi-ui/src/api/monitor/online.js

@@ -0,0 +1,18 @@
1
+import request from '@/utils/request'
2
+
3
+// 查询在线用户列表
4
+export function list(query) {
5
+  return request({
6
+    url: '/system/online/list',
7
+    method: 'get',
8
+    params: query
9
+  })
10
+}
11
+
12
+// 强退用户
13
+export function forceLogout(tokenId) {
14
+  return request({
15
+    url: '/system/online/' + tokenId,
16
+    method: 'delete'
17
+  })
18
+}

+ 124 - 0
ruoyi-ui/src/views/monitor/online/index.vue

@@ -0,0 +1,124 @@
1
+<template>
2
+  <div class="app-container">
3
+    <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="68px">
4
+      <el-form-item label="登录地址" prop="ipaddr">
5
+        <el-input
6
+          v-model="queryParams.ipaddr"
7
+          placeholder="请输入登录地址"
8
+          clearable
9
+          size="small"
10
+          @keyup.enter.native="handleQuery"
11
+        />
12
+      </el-form-item>
13
+      <el-form-item label="用户名称" prop="userName">
14
+        <el-input
15
+          v-model="queryParams.userName"
16
+          placeholder="请输入用户名称"
17
+          clearable
18
+          size="small"
19
+          @keyup.enter.native="handleQuery"
20
+        />
21
+      </el-form-item>
22
+      <el-form-item>
23
+        <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
24
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
25
+      </el-form-item>
26
+
27
+    </el-form>
28
+    <el-table
29
+      v-loading="loading"
30
+      :data="list.slice((pageNum-1)*pageSize,pageNum*pageSize)"
31
+      style="width: 100%;"
32
+    >
33
+      <el-table-column label="序号" type="index" align="center">
34
+        <template slot-scope="scope">
35
+          <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span>
36
+        </template>
37
+      </el-table-column>
38
+      <el-table-column label="会话编号" align="center" prop="tokenId" :show-overflow-tooltip="true" />
39
+      <el-table-column label="登录名称" align="center" prop="userName" :show-overflow-tooltip="true" />
40
+      <el-table-column label="主机" align="center" prop="ipaddr" :show-overflow-tooltip="true" />
41
+      <el-table-column label="登录时间" align="center" prop="loginTime" width="180">
42
+        <template slot-scope="scope">
43
+          <span>{{ parseTime(scope.row.loginTime) }}</span>
44
+        </template>
45
+      </el-table-column>
46
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
47
+        <template slot-scope="scope">
48
+          <el-button
49
+            size="mini"
50
+            type="text"
51
+            icon="el-icon-delete"
52
+            @click="handleForceLogout(scope.row)"
53
+            v-hasPermi="['monitor:online:forceLogout']"
54
+          >强退</el-button>
55
+        </template>
56
+      </el-table-column>
57
+    </el-table>
58
+
59
+    <pagination v-show="total>0" :total="total" :page.sync="pageNum" :limit.sync="pageSize" />
60
+  </div>
61
+</template>
62
+
63
+<script>
64
+import { list, forceLogout } from "@/api/monitor/online";
65
+
66
+export default {
67
+  name: "Online",
68
+  data() {
69
+    return {
70
+      // 遮罩层
71
+      loading: true,
72
+      // 总条数
73
+      total: 0,
74
+      // 表格数据
75
+      list: [],
76
+      pageNum: 1,
77
+      pageSize: 10,
78
+      // 查询参数
79
+      queryParams: {
80
+        ipaddr: undefined,
81
+        userName: undefined
82
+      }
83
+    };
84
+  },
85
+  created() {
86
+    this.getList();
87
+  },
88
+  methods: {
89
+    /** 查询登录日志列表 */
90
+    getList() {
91
+      this.loading = true;
92
+      list(this.queryParams).then(response => {
93
+        this.list = response.rows;
94
+        this.total = response.total;
95
+        this.loading = false;
96
+      });
97
+    },
98
+    /** 搜索按钮操作 */
99
+    handleQuery() {
100
+      this.pageNum = 1;
101
+      this.getList();
102
+    },
103
+    /** 重置按钮操作 */
104
+    resetQuery() {
105
+      this.resetForm("queryForm");
106
+      this.handleQuery();
107
+    },
108
+    /** 强退按钮操作 */
109
+    handleForceLogout(row) {
110
+      this.$confirm('是否确认强退名称为"' + row.userName + '"的数据项?', "警告", {
111
+          confirmButtonText: "确定",
112
+          cancelButtonText: "取消",
113
+          type: "warning"
114
+        }).then(function() {
115
+          return forceLogout(row.tokenId);
116
+        }).then(() => {
117
+          this.getList();
118
+          this.msgSuccess("强退成功");
119
+        }).catch(function() {});
120
+    }
121
+  }
122
+};
123
+</script>
124
+

+ 28 - 19
sql/ry_20200921.sql

@@ -170,13 +170,14 @@ insert into sys_menu values('105',  '字典管理',       '1',   '6',  'dict',
170 170
 insert into sys_menu values('106',  '参数设置',       '1',   '7',  'config',                              'system/config/index',     1, 0, 'C', '0', '0', 'system:config:list',      'edit',          'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '参数设置菜单');
171 171
 insert into sys_menu values('107',  '通知公告',       '1',   '9',  'notice',                              'system/notice/index',     1, 0, 'C', '0', '0', 'system:notice:list',      'message',       'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '通知公告菜单');
172 172
 insert into sys_menu values('108',  '日志管理',       '1',   '10', 'log',                                 'system/log/index',        1, 0, 'M', '0', '0', '',                        'log',           'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '日志管理菜单');
173
-insert into sys_menu values('109',  '定时任务',       '2',   '1',  'job',                                 'monitor/job/index',       1, 0, 'C', '0', '0', 'monitor:job:list',        'job',           'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '定时任务菜单');
174
-insert into sys_menu values('110',  'Sentinel控制台', '2',   '2',  'http://localhost:8718',                '',                       1, 0, 'C', '0', '0', 'monitor:sentinel:list',   'sentinel',      'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '流量控制菜单');
175
-insert into sys_menu values('111',  'Nacos控制台',    '2',   '3',  'http://localhost:8848/nacos',          '',                       1, 0, 'C', '0', '0', 'monitor:nacos:list',      'nacos',         'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '服务治理菜单');
176
-insert into sys_menu values('112',  'Admin控制台',    '2',   '4',  'http://localhost:9100/login',          '',                       1, 0, 'C', '0', '0', 'monitor:server:list',     'server',        'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '服务监控菜单');
177
-insert into sys_menu values('113',  '表单构建',       '3',   '1',  'build',                                'tool/build/index',       1, 0, 'C', '0', '0', 'tool:build:list',         'build',         'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '表单构建菜单');
178
-insert into sys_menu values('114',  '代码生成',       '3',   '2',  'gen',                                  'tool/gen/index',         1, 0, 'C', '0', '0', 'tool:gen:list',           'code',          'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '代码生成菜单');
179
-insert into sys_menu values('115',  '系统接口',       '3',   '3',  'http://localhost:8080/swagger-ui.html', '',                      1, 0, 'C', '0', '0', 'tool:swagger:list',       'swagger',       'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统接口菜单');
173
+insert into sys_menu values('109',  '在线用户',       '2',   '1',  'online',                              'monitor/online/index',    1, 0, 'C', '0', '0', 'monitor:online:list',     'online',        'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '在线用户菜单');
174
+insert into sys_menu values('110',  '定时任务',       '2',   '2',  'job',                                 'monitor/job/index',       1, 0, 'C', '0', '0', 'monitor:job:list',        'job',           'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '定时任务菜单');
175
+insert into sys_menu values('111',  'Sentinel控制台', '2',   '3',  'http://localhost:8718',                '',                       1, 0, 'C', '0', '0', 'monitor:sentinel:list',   'sentinel',      'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '流量控制菜单');
176
+insert into sys_menu values('112',  'Nacos控制台',    '2',   '4',  'http://localhost:8848/nacos',          '',                       1, 0, 'C', '0', '0', 'monitor:nacos:list',      'nacos',         'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '服务治理菜单');
177
+insert into sys_menu values('113',  'Admin控制台',    '2',   '5',  'http://localhost:9100/login',          '',                       1, 0, 'C', '0', '0', 'monitor:server:list',     'server',        'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '服务监控菜单');
178
+insert into sys_menu values('114',  '表单构建',       '3',   '1',  'build',                                'tool/build/index',       1, 0, 'C', '0', '0', 'tool:build:list',         'build',         'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '表单构建菜单');
179
+insert into sys_menu values('115',  '代码生成',       '3',   '2',  'gen',                                  'tool/gen/index',         1, 0, 'C', '0', '0', 'tool:gen:list',           'code',          'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '代码生成菜单');
180
+insert into sys_menu values('116',  '系统接口',       '3',   '3',  'http://localhost:8080/swagger-ui.html', '',                      1, 0, 'C', '0', '0', 'tool:swagger:list',       'swagger',       'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统接口菜单');
180 181
 -- 三级菜单
181 182
 insert into sys_menu values('500',  '操作日志', '108', '1', 'operlog',    'system/operlog/index',     1, 0, 'C', '0', '0', 'system:operlog:list',     'form',          'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '操作日志菜单');
182 183
 insert into sys_menu values('501',  '登录日志', '108', '2', 'logininfor', 'system/logininfor/index',  1, 0, 'C', '0', '0', 'system:logininfor:list',  'logininfor',    'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '登录日志菜单');
@@ -235,20 +236,24 @@ insert into sys_menu values('1047', '日志导出', '500', '4', '#', '', 1, 0, '
235 236
 insert into sys_menu values('1048', '登录查询', '501', '1', '#', '', 1, 0, 'F', '0', '0', 'system:logininfor:query',    '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
236 237
 insert into sys_menu values('1049', '登录删除', '501', '2', '#', '', 1, 0, 'F', '0', '0', 'system:logininfor:remove',   '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
237 238
 insert into sys_menu values('1050', '日志导出', '501', '3', '#', '', 1, 0, 'F', '0', '0', 'system:logininfor:export',   '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
239
+-- 在线用户按钮
240
+insert into sys_menu values('1051', '在线查询', '109', '1', '#', '', 1, 0, 'F', '0', '0', 'monitor:online:query',       '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
241
+insert into sys_menu values('1052', '批量强退', '109', '2', '#', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
242
+insert into sys_menu values('1053', '单条强退', '109', '3', '#', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
238 243
 -- 定时任务按钮
239
-insert into sys_menu values('1051', '任务查询', '109', '1', '#', '', 1, 0, 'F', '0', '0', 'monitor:job:query',          '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
240
-insert into sys_menu values('1052', '任务新增', '109', '2', '#', '', 1, 0, 'F', '0', '0', 'monitor:job:add',            '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
241
-insert into sys_menu values('1053', '任务修改', '109', '3', '#', '', 1, 0, 'F', '0', '0', 'monitor:job:edit',           '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
242
-insert into sys_menu values('1054', '任务删除', '109', '4', '#', '', 1, 0, 'F', '0', '0', 'monitor:job:remove',         '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
243
-insert into sys_menu values('1055', '状态修改', '109', '5', '#', '', 1, 0, 'F', '0', '0', 'monitor:job:changeStatus',   '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
244
-insert into sys_menu values('1056', '任务导出', '109', '7', '#', '', 1, 0, 'F', '0', '0', 'monitor:job:export',         '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
244
+insert into sys_menu values('1054', '任务查询', '110', '1', '#', '', 1, 0, 'F', '0', '0', 'monitor:job:query',          '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
245
+insert into sys_menu values('1055', '任务新增', '110', '2', '#', '', 1, 0, 'F', '0', '0', 'monitor:job:add',            '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
246
+insert into sys_menu values('1056', '任务修改', '110', '3', '#', '', 1, 0, 'F', '0', '0', 'monitor:job:edit',           '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
247
+insert into sys_menu values('1057', '任务删除', '110', '4', '#', '', 1, 0, 'F', '0', '0', 'monitor:job:remove',         '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
248
+insert into sys_menu values('1058', '状态修改', '110', '5', '#', '', 1, 0, 'F', '0', '0', 'monitor:job:changeStatus',   '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
249
+insert into sys_menu values('1059', '任务导出', '110', '7', '#', '', 1, 0, 'F', '0', '0', 'monitor:job:export',         '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
245 250
 -- 代码生成按钮
246
-insert into sys_menu values('1057', '生成查询', '114', '1', '#', '', 1, 0, 'F', '0', '0', 'tool:gen:query',             '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
247
-insert into sys_menu values('1058', '生成修改', '114', '2', '#', '', 1, 0, 'F', '0', '0', 'tool:gen:edit',              '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
248
-insert into sys_menu values('1059', '生成删除', '114', '3', '#', '', 1, 0, 'F', '0', '0', 'tool:gen:remove',            '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
249
-insert into sys_menu values('1060', '导入代码', '114', '2', '#', '', 1, 0, 'F', '0', '0', 'tool:gen:import',            '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
250
-insert into sys_menu values('1061', '预览代码', '114', '4', '#', '', 1, 0, 'F', '0', '0', 'tool:gen:preview',           '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
251
-insert into sys_menu values('1062', '生成代码', '114', '5', '#', '', 1, 0, 'F', '0', '0', 'tool:gen:code',              '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
251
+insert into sys_menu values('1060', '生成查询', '115', '1', '#', '', 1, 0, 'F', '0', '0', 'tool:gen:query',             '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
252
+insert into sys_menu values('1061', '生成修改', '115', '2', '#', '', 1, 0, 'F', '0', '0', 'tool:gen:edit',              '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
253
+insert into sys_menu values('1062', '生成删除', '115', '3', '#', '', 1, 0, 'F', '0', '0', 'tool:gen:remove',            '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
254
+insert into sys_menu values('1063', '导入代码', '115', '2', '#', '', 1, 0, 'F', '0', '0', 'tool:gen:import',            '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
255
+insert into sys_menu values('1064', '预览代码', '115', '4', '#', '', 1, 0, 'F', '0', '0', 'tool:gen:preview',           '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
256
+insert into sys_menu values('1065', '生成代码', '115', '5', '#', '', 1, 0, 'F', '0', '0', 'tool:gen:code',              '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
252 257
 
253 258
 
254 259
 -- ----------------------------
@@ -301,6 +306,7 @@ insert into sys_role_menu values ('2', '112');
301 306
 insert into sys_role_menu values ('2', '113');
302 307
 insert into sys_role_menu values ('2', '114');
303 308
 insert into sys_role_menu values ('2', '115');
309
+insert into sys_role_menu values ('2', '116');
304 310
 insert into sys_role_menu values ('2', '500');
305 311
 insert into sys_role_menu values ('2', '501');
306 312
 insert into sys_role_menu values ('2', '1000');
@@ -366,6 +372,9 @@ insert into sys_role_menu values ('2', '1059');
366 372
 insert into sys_role_menu values ('2', '1060');
367 373
 insert into sys_role_menu values ('2', '1061');
368 374
 insert into sys_role_menu values ('2', '1062');
375
+insert into sys_role_menu values ('2', '1063');
376
+insert into sys_role_menu values ('2', '1064');
377
+insert into sys_role_menu values ('2', '1065');
369 378
 
370 379
 -- ----------------------------
371 380
 -- 8、角色和部门关联表  角色1-N部门

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 2 - 2
sql/ry_config_20200915.sql