控制台只展示有权限的菜单,登录和提示优化

This commit is contained in:
暮光:城中城
2020-12-26 10:33:24 +08:00
parent 2e37d4db44
commit b8a1c8554e
24 changed files with 101 additions and 26 deletions

View File

@@ -5,4 +5,8 @@ public class DocAuthConst {
public static final String WIKI = "WIKI_";
public static final String DB_DATASOURCE_MANAGE = "DB_DATASOURCE_MANAGE";
public static final String ES_DATASOURCE_MANAGE = "ES_DATASOURCE_MANAGE";
public static final String USER_MANAGE = "USER_MANAGE";
public static final String AUTH_MANAGE = "AUTH_MANAGE";
public static final String AUTH_ASSIGN = "AUTH_ASSIGN";
}

View File

@@ -35,7 +35,7 @@ import java.util.stream.Stream;
* @since 2019年8月18日
*/
@RestController
@AuthMan("DB_DATASOURCE_MANAGE")
@AuthMan(DocAuthConst.DB_DATASOURCE_MANAGE)
@RequestMapping("/zyplayer-doc-db/auth")
public class DbDataSourceAuthController {
private static Logger logger = LoggerFactory.getLogger(DbDataSourceAuthController.class);

View File

@@ -6,6 +6,7 @@ import com.zyplayer.doc.core.json.ResponseJson;
import com.zyplayer.doc.data.config.security.DocUserDetails;
import com.zyplayer.doc.data.config.security.DocUserUtil;
import com.zyplayer.doc.data.repository.manage.entity.DbDatasource;
import com.zyplayer.doc.data.repository.support.consts.DocAuthConst;
import com.zyplayer.doc.data.service.manage.DbDatasourceService;
import com.zyplayer.doc.db.framework.configuration.DatasourceUtil;
import com.zyplayer.doc.db.framework.db.bean.DatabaseFactoryBean;
@@ -27,7 +28,7 @@ import java.util.*;
* @since 2019年6月29日
*/
@RestController
@AuthMan("DB_DATASOURCE_MANAGE")
@AuthMan(DocAuthConst.DB_DATASOURCE_MANAGE)
@RequestMapping("/zyplayer-doc-db/datasource")
public class DbDatasourceController {

View File

@@ -7,6 +7,7 @@ import com.zyplayer.doc.core.json.ResponseJson;
import com.zyplayer.doc.data.config.security.DocUserDetails;
import com.zyplayer.doc.data.config.security.DocUserUtil;
import com.zyplayer.doc.data.repository.manage.entity.EsDatasource;
import com.zyplayer.doc.data.repository.support.consts.DocAuthConst;
import com.zyplayer.doc.data.service.manage.EsDatasourceService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
@@ -39,7 +40,7 @@ public class EsDatasourceController {
return DocResponseJson.ok(datasourceList);
}
@AuthMan("ES_DATASOURCE_MANAGE")
@AuthMan(DocAuthConst.ES_DATASOURCE_MANAGE)
@PostMapping(value = "/update")
public ResponseJson update(EsDatasource esDatasource) {
if (StringUtils.isBlank(esDatasource.getName())) {

View File

@@ -6,6 +6,7 @@ import com.zyplayer.doc.core.annotation.AuthMan;
import com.zyplayer.doc.data.config.security.DocUserDetails;
import com.zyplayer.doc.data.config.security.DocUserUtil;
import com.zyplayer.doc.data.repository.manage.entity.AuthInfo;
import com.zyplayer.doc.data.repository.support.consts.DocAuthConst;
import com.zyplayer.doc.data.service.manage.AuthInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@@ -17,7 +18,7 @@ import java.util.List;
@RestController
@RequestMapping("/auth/info")
@AuthMan("AUTH_MANAGE")
@AuthMan(DocAuthConst.AUTH_MANAGE)
public class AuthInfoController {
@Autowired

View File

@@ -8,6 +8,7 @@ import com.zyplayer.doc.data.config.security.DocUserDetails;
import com.zyplayer.doc.data.config.security.DocUserUtil;
import com.zyplayer.doc.data.repository.manage.entity.AuthInfo;
import com.zyplayer.doc.data.repository.manage.entity.UserAuth;
import com.zyplayer.doc.data.repository.support.consts.DocAuthConst;
import com.zyplayer.doc.data.service.manage.AuthInfoService;
import com.zyplayer.doc.data.service.manage.UserAuthService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -21,7 +22,7 @@ import java.util.stream.Collectors;
@RestController
@RequestMapping("/user/auth")
@AuthMan("AUTH_ASSIGN")
@AuthMan(DocAuthConst.AUTH_ASSIGN)
public class UserAuthController {
@Autowired

View File

@@ -1,27 +1,27 @@
package com.zyplayer.doc.manage.web.manage;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.zyplayer.doc.core.annotation.AuthMan;
import com.zyplayer.doc.core.json.DocResponseJson;
import com.zyplayer.doc.core.json.ResponseJson;
import com.zyplayer.doc.core.annotation.AuthMan;
import com.zyplayer.doc.data.config.security.DocUserDetails;
import com.zyplayer.doc.data.config.security.DocUserUtil;
import com.zyplayer.doc.data.repository.manage.entity.AuthInfo;
import com.zyplayer.doc.data.repository.manage.entity.UserAuth;
import com.zyplayer.doc.data.repository.manage.entity.UserInfo;
import com.zyplayer.doc.data.repository.manage.entity.WikiPage;
import com.zyplayer.doc.data.repository.support.consts.DocAuthConst;
import com.zyplayer.doc.data.service.manage.AuthInfoService;
import com.zyplayer.doc.data.service.manage.UserAuthService;
import com.zyplayer.doc.data.service.manage.UserInfoService;
import com.zyplayer.doc.manage.web.manage.param.UserListParam;
import com.zyplayer.doc.manage.web.manage.vo.AuthInfoVo;
import com.zyplayer.doc.manage.web.manage.vo.UserInfoAuthVo;
import com.zyplayer.doc.manage.web.manage.vo.UserAuthVo;
import org.apache.commons.lang.StringUtils;
import org.dozer.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -50,10 +50,25 @@ public class UserInfoController {
public ResponseJson<Object> selfInfo() {
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
UserInfo userInfo = userInfoService.getById(currentUser.getUserId());
userInfo.setPassword(null);
return DocResponseJson.ok(userInfo);
}
@AuthMan("USER_MANAGE")
@AuthMan
@PostMapping("/selfInfoWithAuth")
public ResponseJson<UserInfoAuthVo> selfInfoWithAuth() {
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
UserInfo userInfo = userInfoService.getById(currentUser.getUserId());
userInfo.setPassword(null);
UserAuthVo sysAuthInfoVo = new UserAuthVo();
sysAuthInfoVo.setUserManage(DocUserUtil.haveAuth(DocAuthConst.USER_MANAGE));
UserInfoAuthVo selfInfoVo = new UserInfoAuthVo();
selfInfoVo.setUserInfo(userInfo);
selfInfoVo.setUserAuth(sysAuthInfoVo);
return DocResponseJson.ok(selfInfoVo);
}
@AuthMan(DocAuthConst.USER_MANAGE)
@PostMapping("/list")
public ResponseJson<Object> list(UserListParam param) {
QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<>();
@@ -74,7 +89,7 @@ public class UserInfoController {
return DocResponseJson.ok(pageInfo);
}
@AuthMan("USER_MANAGE")
@AuthMan(DocAuthConst.USER_MANAGE)
@PostMapping("/update")
public ResponseJson<Object> update(UserInfo userInfo) {
if (StringUtils.isBlank(userInfo.getUserNo())) {
@@ -112,7 +127,7 @@ public class UserInfoController {
return DocResponseJson.ok();
}
@AuthMan("USER_MANAGE")
@AuthMan(DocAuthConst.USER_MANAGE)
@PostMapping("/resetPassword")
public ResponseJson<Object> resetPassword(UserInfo userInfo) {
String password = RandomUtil.randomNumbers(6);
@@ -127,7 +142,7 @@ public class UserInfoController {
return DocResponseJson.ok(password);
}
@AuthMan("USER_MANAGE")
@AuthMan(DocAuthConst.USER_MANAGE)
@PostMapping("/delete")
public ResponseJson<Object> delete(Long id) {
UserInfo userInfo = new UserInfo();
@@ -138,7 +153,7 @@ public class UserInfoController {
return DocResponseJson.ok();
}
@AuthMan("AUTH_ASSIGN")
@AuthMan(DocAuthConst.AUTH_ASSIGN)
@PostMapping("/auth/list")
public ResponseJson<Object> authList(String userIds) {
// 所有权限
@@ -161,7 +176,7 @@ public class UserInfoController {
return DocResponseJson.ok(authInfoVoList);
}
@AuthMan("AUTH_ASSIGN")
@AuthMan(DocAuthConst.AUTH_ASSIGN)
@PostMapping("/auth/update")
public ResponseJson<Object> updateAuth(String userIds, String authIds) {
List<Long> userIdsList = Arrays.stream(userIds.split(",")).map(Long::valueOf).collect(Collectors.toList());

View File

@@ -0,0 +1,13 @@
package com.zyplayer.doc.manage.web.manage.vo;
public class UserAuthVo {
private boolean userManage;
public boolean isUserManage() {
return userManage;
}
public void setUserManage(boolean userManage) {
this.userManage = userManage;
}
}

View File

@@ -0,0 +1,24 @@
package com.zyplayer.doc.manage.web.manage.vo;
import com.zyplayer.doc.data.repository.manage.entity.UserInfo;
public class UserInfoAuthVo {
private UserInfo userInfo;
private UserAuthVo userAuth;
public UserInfo getUserInfo() {
return userInfo;
}
public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
}
public UserAuthVo getUserAuth() {
return userAuth;
}
public void setUserAuth(UserAuthVo userAuth) {
this.userAuth = userAuth;
}
}

View File

@@ -1 +1 @@
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=favicon-console.png><title>文档管理系统</title><link href=css/chunk-0741282a.cbb897f6.css rel=prefetch><link href=css/chunk-30126bdc.ee6e60f7.css rel=prefetch><link href=css/chunk-32cc5643.5a5b2ca1.css rel=prefetch><link href=css/chunk-35c34f90.938e4b31.css rel=prefetch><link href=css/chunk-4582ecc6.ee6e60f7.css rel=prefetch><link href=css/chunk-7349f4ef.be15d6a0.css rel=prefetch><link href=js/chunk-0741282a.f0d80dd8.js rel=prefetch><link href=js/chunk-2d207ece.471a6eef.js rel=prefetch><link href=js/chunk-30126bdc.f925d913.js rel=prefetch><link href=js/chunk-32cc5643.45f9254f.js rel=prefetch><link href=js/chunk-35c34f90.28d7123e.js rel=prefetch><link href=js/chunk-4582ecc6.3c077877.js rel=prefetch><link href=js/chunk-7349f4ef.85b3b38a.js rel=prefetch><link href=css/app.740554a0.css rel=preload as=style><link href=css/chunk-vendors.7be40bfc.css rel=preload as=style><link href=js/app.61518edd.js rel=preload as=script><link href=js/chunk-vendors.735c0b72.js rel=preload as=script><link href=css/chunk-vendors.7be40bfc.css rel=stylesheet><link href=css/app.740554a0.css rel=stylesheet></head><body><noscript><strong>We're sorry but zyplayer-console-ui doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=js/chunk-vendors.735c0b72.js></script><script src=js/app.61518edd.js></script></body></html>
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=favicon-console.png><title>文档管理系统</title><link href=css/chunk-0741282a.cbb897f6.css rel=prefetch><link href=css/chunk-30126bdc.ee6e60f7.css rel=prefetch><link href=css/chunk-32cc5643.5a5b2ca1.css rel=prefetch><link href=css/chunk-35c34f90.938e4b31.css rel=prefetch><link href=css/chunk-4582ecc6.ee6e60f7.css rel=prefetch><link href=css/chunk-7349f4ef.be15d6a0.css rel=prefetch><link href=js/chunk-0741282a.225ac580.js rel=prefetch><link href=js/chunk-2d207ece.471a6eef.js rel=prefetch><link href=js/chunk-30126bdc.0c65330c.js rel=prefetch><link href=js/chunk-32cc5643.522aafd7.js rel=prefetch><link href=js/chunk-35c34f90.bb1dbae1.js rel=prefetch><link href=js/chunk-4582ecc6.34ccd545.js rel=prefetch><link href=js/chunk-7349f4ef.84d79223.js rel=prefetch><link href=css/app.740554a0.css rel=preload as=style><link href=css/chunk-vendors.7be40bfc.css rel=preload as=style><link href=js/app.0e559f7f.js rel=preload as=script><link href=js/chunk-vendors.f3be2a33.js rel=preload as=script><link href=css/chunk-vendors.7be40bfc.css rel=stylesheet><link href=css/app.740554a0.css rel=stylesheet></head><body><noscript><strong>We're sorry but zyplayer-console-ui doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=js/chunk-vendors.f3be2a33.js></script><script src=js/app.0e559f7f.js></script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-0741282a"],{"40c0":function(e,t,n){},9231:function(e,t,n){"use strict";var a=n("40c0"),r=n.n(a);r.a},ac2a:function(e,t,n){"use strict";n.r(t);var a=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:"login-background linear-gradient-"+e.bgImgRandom},[n("div",{staticClass:"login-box"},[n("el-form",{ref:"loginParam",staticClass:"demo-ruleForm login-container",attrs:{model:e.loginParam,rules:e.loginRules,"label-position":"left","label-width":"0px"}},[n("h3",{staticClass:"title"},[e._v("文档管理-系统登录")]),n("el-form-item",{attrs:{prop:"username"}},[n("el-input",{attrs:{type:"text","auto-complete":"off",placeholder:"账号"},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.loginSubmit(t)}},model:{value:e.loginParam.username,callback:function(t){e.$set(e.loginParam,"username",t)},expression:"loginParam.username"}})],1),n("el-form-item",{attrs:{prop:"password"}},[n("el-input",{attrs:{type:"password","auto-complete":"off",placeholder:"密码"},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.loginSubmit(t)}},model:{value:e.loginParam.password,callback:function(t){e.$set(e.loginParam,"password",t)},expression:"loginParam.password"}})],1),n("el-form-item",{staticStyle:{width:"100%"}},[n("el-button",{staticStyle:{width:"100%"},attrs:{type:"primary",loading:e.loginLoading},nativeOn:{click:function(t){return t.preventDefault(),e.loginSubmit(t)}}},[e._v("登录")])],1)],1)],1),e._m(0)])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"power-by"},[e._v("Powered By "),n("a",{attrs:{target:"_blank",href:"https://gitee.com/zyplayer/zyplayer-doc"}},[e._v("zyplayer-doc")])])}],o=n("3099"),i={data:function(){return{loginLoading:!1,redirect:"",loginParam:{username:"",password:""},loginRules:{username:[{required:!0,message:"请输入账号",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]},bgImgRandom:Math.ceil(5*Math.random())}},mounted:function(){this.redirect=this.$route.query.redirect},methods:{loginSubmit:function(){var e=this;this.$refs.loginParam.validate((function(t){t&&(e.loginLoading=!0,o["a"].userLogin(e.loginParam).then((function(){e.loginLoading=!1,e.redirect?location.href=decodeURIComponent(e.redirect):e.$router.back()})).catch((function(t){console.log("登录失败",t),e.loginLoading=!1})))}))}}},l=i,s=(n("9231"),n("2877")),u=Object(s["a"])(l,a,r,!1,null,null,null);t["default"]=u.exports}}]);
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-0741282a"],{"40c0":function(e,t,n){},9231:function(e,t,n){"use strict";var a=n("40c0"),r=n.n(a);r.a},ac2a:function(e,t,n){"use strict";n.r(t);var a=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{class:"login-background linear-gradient-"+e.bgImgRandom},[n("div",{staticClass:"login-box"},[n("el-form",{ref:"loginParam",staticClass:"demo-ruleForm login-container",attrs:{model:e.loginParam,rules:e.loginRules,"label-position":"left","label-width":"0px"}},[n("h3",{staticClass:"title"},[e._v("文档管理-系统登录")]),n("el-form-item",{attrs:{prop:"username"}},[n("el-input",{attrs:{type:"text","auto-complete":"off",placeholder:"账号"},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.loginSubmit(t)}},model:{value:e.loginParam.username,callback:function(t){e.$set(e.loginParam,"username",t)},expression:"loginParam.username"}})],1),n("el-form-item",{attrs:{prop:"password"}},[n("el-input",{attrs:{type:"password","auto-complete":"off",placeholder:"密码"},nativeOn:{keyup:function(t){return!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter")?null:e.loginSubmit(t)}},model:{value:e.loginParam.password,callback:function(t){e.$set(e.loginParam,"password",t)},expression:"loginParam.password"}})],1),n("el-form-item",{staticStyle:{width:"100%"}},[n("el-button",{staticStyle:{width:"100%"},attrs:{type:"primary",loading:e.loginLoading},nativeOn:{click:function(t){return t.preventDefault(),e.loginSubmit(t)}}},[e._v("登录")])],1)],1)],1),e._m(0)])},r=[function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"power-by"},[e._v("Powered By "),n("a",{attrs:{target:"_blank",href:"https://gitee.com/zyplayer/zyplayer-doc"}},[e._v("zyplayer-doc")])])}],o=n("3099"),i={data:function(){return{loginLoading:!1,redirect:"",loginParam:{username:"",password:""},loginRules:{username:[{required:!0,message:"请输入账号",trigger:"blur"}],password:[{required:!0,message:"请输入密码",trigger:"blur"}]},bgImgRandom:Math.ceil(5*Math.random())}},mounted:function(){this.redirect=this.$route.query.redirect},methods:{loginSubmit:function(){var e=this;this.$refs.loginParam.validate((function(t){t&&(e.loginLoading=!0,o["a"].userLogin(e.loginParam).then((function(){e.$emit("loginSuccess"),e.loginLoading=!1,e.redirect?location.href=decodeURIComponent(e.redirect):e.$router.back()})).catch((function(t){console.log("登录失败",t),e.loginLoading=!1})))}))}}},l=i,s=(n("9231"),n("2877")),u=Object(s["a"])(l,a,r,!1,null,null,null);t["default"]=u.exports}}]);

View File

@@ -2,8 +2,9 @@
ENV = 'development'
# base api
# VUE_APP_BASE_API = 'http://local.zyplayer.com:8083/zyplayer-doc-manage'
VUE_APP_BASE_API = 'http://doc.zyplayer.com/zyplayer-doc-manage'
VUE_APP_BASE_API = 'http://local.zyplayer.com:8083/zyplayer-doc-manage'
# VUE_APP_BASE_API = 'http://doc.zyplayer.com/zyplayer-doc-manage'
VUE_CLI_BABEL_TRANSPILE_MODULES = true

View File

@@ -1,14 +1,14 @@
<template>
<div id="app">
<template v-if="fullscreen">
<router-view></router-view>
<router-view @loginSuccess="getSelfUserInfo"></router-view>
</template>
<el-container v-else>
<el-aside>
<div style="padding: 10px;height: 100%;box-sizing: border-box;background: #fafafa;">
<el-menu default-active="1-4-1" :router="true" class="el-menu-vertical" @open="handleOpen" @close="handleClose" :collapse="isCollapse">
<el-menu-item index="/"><i class="el-icon-s-home"></i>控制台</el-menu-item>
<el-submenu index="1">
<el-submenu index="1" v-if="userAuth.userManage">
<template slot="title">
<i class="el-icon-s-platform"></i>
<span slot="title">系统管理</span>
@@ -72,6 +72,9 @@
isCollapse: false,
aboutDialogVisible: false,
userSelfInfo: {},
userAuth: {
userManage: false
},
// 升级信息
upgradeInfo: {},
}
@@ -114,8 +117,10 @@
});
},
getSelfUserInfo() {
consoleApi.getSelfUserInfo().then(json => {
this.userSelfInfo = json.data;
consoleApi.selfInfoWithAuth().then(json => {
let infoVo = json.data || {};
this.userSelfInfo = infoVo.userInfo || {};
this.userAuth = infoVo.userAuth || {};
}).catch(e => {
console.log("获取用户信息失败", e);
});

View File

@@ -13,6 +13,9 @@ export default {
},
getSelfUserInfo: data => {
return request({url: '/user/info/selfInfo', method: 'post', data: Qs.stringify(data)});
},
selfInfoWithAuth: data => {
return request({url: '/user/info/selfInfoWithAuth', method: 'post', data: Qs.stringify(data)});
},
getUserInfoList: data => {
return request({url: '/user/info/list', method: 'post', data: Qs.stringify(data)});

View File

@@ -12,6 +12,7 @@ const noValidate = {
"/zyplayer-doc-db/executor/execute": true,
"/zyplayer-doc-db/datasource/test": true,
};
let lastToastLoginTime = 0;
service.interceptors.request.use(
config => {
@@ -36,7 +37,11 @@ service.interceptors.response.use(
if (!response.config.needValidateResult || response.data.errCode == 200) {
return response.data;
} else if (response.data.errCode == 400) {
vue.$message.error('请先登录');
// 一秒钟只提示一次
if (new Date().getTime() - lastToastLoginTime > 1000) {
vue.$message.error('请先登录');
lastToastLoginTime = new Date().getTime();
}
let redirectUrl = '';
let locationHref = window.location.href;
if (locationHref.indexOf("?") >= 0) {

View File

@@ -49,6 +49,7 @@
if (!valid) return;
this.loginLoading = true;
consoleApi.userLogin(this.loginParam).then(() => {
this.$emit('loginSuccess');
this.loginLoading = false;
if (!!this.redirect) {
location.href = decodeURIComponent(this.redirect);