Skip to content

Commit 115646e

Browse files
committed
完善前端权限校验功能,按钮没有对应操作权限则隐藏
1 parent 9f000e8 commit 115646e

File tree

37 files changed

+225
-138
lines changed

37 files changed

+225
-138
lines changed

mogu_admin/src/main/java/com/moxi/mogublog/admin/global/SysConf.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public final class SysConf extends BaseSysConf {
3737

3838
public final static String PARENT_LIST = "parentList";
3939
public final static String SON_LIST = "sonList";
40+
public final static String BUTTON_LIST = "buttonList";
4041

4142
public final static String URL = "url";
4243

mogu_admin/src/main/java/com/moxi/mogublog/admin/restapi/LoginRestApi.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,6 @@ public String info(HttpServletRequest request,
170170
List<String> roleUid = new ArrayList<>();
171171
roleUid.add(admin.getRoleUid());
172172
Collection<Role> roleList = roleService.listByIds(roleUid);
173-
174173
map.put(SysConf.ROLES, roleList);
175174
return ResultUtil.result(SysConf.SUCCESS, map);
176175
}
@@ -210,7 +209,10 @@ public String getMenu(HttpServletRequest request) {
210209
}
211210
// 从三级分类中,得到二级分类
212211
if (item.getMenuType() == EMenuType.BUTTON && StringUtils.isNotEmpty(item.getParentUid())) {
212+
// 找出二级菜单
213213
secondMenuUidList.add(item.getParentUid());
214+
// 找出全部按钮
215+
buttonList.add(item);
214216
}
215217
});
216218

@@ -242,6 +244,7 @@ public String getMenu(HttpServletRequest request) {
242244
Collections.sort(list);
243245
map.put(SysConf.PARENT_LIST, list);
244246
map.put(SysConf.SON_LIST, childCategoryMenuList);
247+
map.put(SysConf.BUTTON_LIST, buttonList);
245248
return ResultUtil.result(SysConf.SUCCESS, map);
246249
}
247250

mogu_sms/src/main/java/com/moxi/mogublog/sms/listener/BlogListener.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void updateRedis(Map<String, String> map) {
4040

4141
String comment = map.get(SysConf.COMMAND);
4242

43-
String uid = map.get("blogUid");
43+
String uid = map.get(SysConf.BLOG_UID);
4444

4545
//从Redis清空对应的数据
4646
stringRedisTemplate.opsForValue().set(SysConf.BLOG_LEVEL + SysConf.REDIS_SEGMENTATION + SysConf.ONE, "");
@@ -49,6 +49,7 @@ public void updateRedis(Map<String, String> map) {
4949
stringRedisTemplate.opsForValue().set(SysConf.BLOG_LEVEL + SysConf.REDIS_SEGMENTATION + SysConf.FOUR, "");
5050
stringRedisTemplate.opsForValue().set(SysConf.HOT_BLOG, "");
5151
stringRedisTemplate.opsForValue().set(SysConf.NEW_BLOG, "");
52+
5253
switch (comment) {
5354
case SysConf.DELETE_BATCH: {
5455

vue_mogu_admin/config/prod.env.js

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ module.exports = {
33
NODE_ENV: '"production"',
44

55
//生产环境
6-
ADMIN_API: '"http://101.132.194.128:8601"',
7-
PICTURE_API: '"http://101.132.194.128:8602"',
8-
WEB_API: '"http://101.132.194.128:8603"',
9-
Search_API: '"http://101.132.194.128:8605"',
10-
SPRING_BOOT_ADMIN: '"http://101.132.194.128:8606/wallboard"',
11-
SOLR_API: '"http://101.132.194.128:8080/solr"',
12-
ELASTIC_SEARCH: '"http://101.132.194.128:5601"',
13-
EUREKA_API: '"http://101.132.194.128:8761"',
14-
RABBIT_MQ_ADMIN: '"http://101.132.194.128:15672"',
15-
DRUID_ADMIN: '"http://101.132.194.128:8601/druid/login.html"',
16-
BLOG_WEB_URL: '"http://www.moguit.cn"',
6+
ADMIN_API: '"http://47.115.54.30:8601"',
7+
PICTURE_API: '"http://47.115.54.30:8602"',
8+
WEB_API: '"http://47.115.54.30:8603"',
9+
Search_API: '"http://47.115.54.30:8605"',
10+
SPRING_BOOT_ADMIN: '"http://47.115.54.30:8606/wallboard"',
11+
SOLR_API: '"http://47.115.54.30:8080/solr"',
12+
ELASTIC_SEARCH: '"http://47.115.54.30:5601"',
13+
EUREKA_API: '"http://47.115.54.30:8761"',
14+
RABBIT_MQ_ADMIN: '"http://47.115.54.30:15672"',
15+
DRUID_ADMIN: '"http://47.115.54.30:8601/druid/login.html"',
16+
BLOG_WEB_URL: '"http://demoweb.moguit.cn"',
1717
// 使用七牛云,不需要添加图片前缀
1818
BASE_IMAGE_URL: '""',
1919

@@ -26,14 +26,14 @@ module.exports = {
2626
// BLOG_WEB_URL: '"http://192.168.1.101:9527"',
2727

2828

29-
// BLOG_WEB_URL: '"http://101.132.194.128:9527"',
29+
// BLOG_WEB_URL: '"http://47.115.54.30:9527"',
3030

3131
//生产环境 tomcat方式部署
32-
// ADMIN_API: '"http://101.132.194.128:8080/mogu_admin"',
33-
// PICTURE_API: '"http://101.132.194.128:8080/mogu_picture"',
34-
// WEB_API: '"http://101.132.194.128:8080/mogu_web"',
35-
// SOLR_API: '"http://101.132.194.128:8080/solr"',
36-
// BASE_IMAGE_URL: '"http://101.132.194.128:8600"',
32+
// ADMIN_API: '"http://47.115.54.30:8080/mogu_admin"',
33+
// PICTURE_API: '"http://47.115.54.30:8080/mogu_picture"',
34+
// WEB_API: '"http://47.115.54.30:8080/mogu_web"',
35+
// SOLR_API: '"http://47.115.54.30:8080/solr"',
36+
// BASE_IMAGE_URL: '"http://47.115.54.30:8600"',
3737
// BLOG_WEB_URL: '"http://www.moguit.cn"',
3838

3939

vue_mogu_admin/src/directive/index.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import Vue from 'vue'
2+
import permission from './permission'
3+
4+
const directives = [permission]
5+
directives.forEach(d => Vue.use(d))
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import permission from './permission'
2+
3+
const install = function(Vue) {
4+
Vue.directive('permission', permission)
5+
}
6+
7+
if (window.Vue) {
8+
window['permission'] = permission
9+
Vue.use(install); // eslint-disable-line
10+
}
11+
12+
permission.install = install
13+
export default permission
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import store from '@/store'
2+
3+
export default {
4+
inserted(el, binding, vnode) {
5+
const { value } = binding
6+
7+
if(store.getters.buttonMap.size == undefined) {
8+
// 初始加载的时候,还没有写入到vuex中,因此使用setInterval在下次dom更新时生效
9+
let intervalID = setInterval(() => {
10+
// 得到按钮上的路径
11+
const buttonMap = store.getters.buttonMap
12+
if (value && value.length > 0) {
13+
const path = value
14+
const hasPermission = buttonMap.get(path)
15+
16+
// 没有权限时,是否显示按钮,取决于button管理的上 是否显示 的设置
17+
if (!hasPermission) {
18+
el.parentNode && el.parentNode.removeChild(el)
19+
}
20+
}
21+
// 清空触发器
22+
if(store.getters.buttonMap.size != undefined) {
23+
clearInterval(intervalID);
24+
}
25+
},100);
26+
} else {
27+
// 得到按钮上的路径
28+
29+
const buttonMap = store.getters.buttonMap
30+
if (value && value.length > 0) {
31+
const path = value
32+
const hasPermission = buttonMap.get(path)
33+
if (!hasPermission) {
34+
el.parentNode && el.parentNode.removeChild(el)
35+
}
36+
} else {
37+
throw new Error(`need roles! Like v-permission="'admin'"`)
38+
}
39+
}
40+
}
41+
}

vue_mogu_admin/src/main.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ import store from './store'
1616
import '@/icons' // icon
1717
import '@/permission' // permission control
1818

19+
// 引入自定义指令
20+
import './directive'
21+
1922
// 添加粒子特效
2023
import VueParticles from 'vue-particles'
2124

vue_mogu_admin/src/store/getters.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const getters = {
66
avatar: state => state.user.avatar,
77
name: state => state.user.name,
88
roles: state => state.user.roles,
9-
menu: state => state.user.menu
9+
menu: state => state.user.menu,
10+
buttonMap: state => state.user.buttonMap
1011
}
1112
export default getters

vue_mogu_admin/src/store/modules/user.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ const user = {
77
name: '',
88
avatar: '',
99
roles: [],
10-
menu: {}
10+
menu: {},
11+
buttonMap: {}
1112
},
1213

1314
mutations: {
@@ -25,6 +26,9 @@ const user = {
2526
},
2627
SET_MENU: (state, menu) => {
2728
state.menu = menu
29+
},
30+
SET_BUTTON_MAP: (state, buttonMap) => {
31+
state.buttonMap = buttonMap
2832
}
2933
},
3034

@@ -37,7 +41,6 @@ const user = {
3741
var params = new URLSearchParams()
3842
params.append('username', username)
3943
params.append('password', password)
40-
4144
login(params).then(response => {
4245
const data = response.data
4346
setToken(data.token)
@@ -55,6 +58,13 @@ const user = {
5558
getMenu().then(response => {
5659
const data = response.data
5760
console.log("获取的菜单", data)
61+
// 这里对按钮进行一些处理
62+
let buttonList = data.buttonList
63+
let map = new Map();
64+
for(let a=0; a<buttonList.length; a++) {
65+
map.set(buttonList[a].url, buttonList[a])
66+
}
67+
commit('SET_BUTTON_MAP', map)
5868
commit('SET_MENU', data)
5969
resolve(response)
6070
}).catch(error => {

vue_mogu_admin/src/views/authority/admin.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
v-model="keyword"
1010
placeholder="请输入管理员名"
1111
></el-input>
12-
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="handleFind">查找</el-button>
13-
<el-button class="filter-item" type="primary" @click="handleAdd" icon="el-icon-edit">添加</el-button>
12+
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="handleFind" v-permission="'/admin/getList'">查找</el-button>
13+
<el-button class="filter-item" type="primary" @click="handleAdd" icon="el-icon-edit" v-permission="'/admin/add'">添加</el-button>
1414
</div>
1515

1616
<el-table :data="tableData" style="width: 100%">
@@ -85,9 +85,9 @@
8585

8686
<el-table-column label="操作" fixed="right" min-width="250" >
8787
<template slot-scope="scope">
88-
<el-button @click="handRest(scope.row)" type="warning" size="small">重置密码</el-button>
89-
<el-button @click="handleEdit(scope.row)" type="primary" size="small">编辑</el-button>
90-
<el-button @click="handleDelete(scope.row)" type="danger" size="small">删除</el-button>
88+
<el-button @click="handRest(scope.row)" type="warning" size="small" v-permission="'/admin/restPwd'">重置密码</el-button>
89+
<el-button @click="handleEdit(scope.row)" type="primary" size="small" v-permission="'/admin/edit'">编辑</el-button>
90+
<el-button @click="handleDelete(scope.row)" type="danger" size="small" v-permission="'/admin/delete'">删除</el-button>
9191
</template>
9292
</el-table-column>
9393
</el-table>

vue_mogu_admin/src/views/authority/button.vue

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
:props="{ checkStrictly: true }"
1111
clearable></el-cascader>
1212

13-
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="handleFind">查找</el-button>
14-
<el-button class="filter-item" type="primary" @click="handleAdd" icon="el-icon-edit">添加按钮</el-button>
13+
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="handleFind" v-permission="'/categoryMenu/getList'">查找</el-button>
14+
<el-button class="filter-item" type="primary" @click="handleAdd" icon="el-icon-edit" v-permission="'/categoryMenu/add'">添加按钮</el-button>
1515
</div>
1616

1717
<el-table :data="tableData" style="width: 100%">
@@ -91,9 +91,9 @@
9191

9292
<el-table-column fixed="right" min-width="230">
9393
<template slot-scope="scope_child">
94-
<el-button @click="handleStick(scope_child.row)" type="warning" size="small">置顶</el-button>
95-
<el-button @click="handleEdit(scope.row, scope_child.row)" type="primary" size="small">编辑</el-button>
96-
<el-button @click="handleDelete(scope_child.row)" type="danger" size="small">删除</el-button>
94+
<el-button @click="handleStick(scope_child.row)" type="warning" size="small" v-permission="'/categoryMenu/stick'">置顶</el-button>
95+
<el-button @click="handleEdit(scope.row, scope_child.row)" type="primary" size="small" v-permission="'/categoryMenu/edit'">编辑</el-button>
96+
<el-button @click="handleDelete(scope_child.row)" type="danger" size="small" v-permission="'/categoryMenu/delete'">删除</el-button>
9797
</template>
9898
</el-table-column>
9999
</el-table>

vue_mogu_admin/src/views/authority/categoryMenu.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<div class="app-container">
33
<!-- 查询和其他操作 -->
44
<div class="filter-container" style="margin: 10px 0 10px 0;">
5-
<el-button class="filter-item" type="primary" @click="handleAdd" icon="el-icon-edit">添加菜单</el-button>
5+
<el-button class="filter-item" type="primary" @click="handleAdd" icon="el-icon-edit" v-permission="'/categoryMenu/add'">添加菜单</el-button>
66
</div>
77

88
<el-table :data="tableData" style="width: 100%">
@@ -76,9 +76,9 @@
7676

7777
<el-table-column fixed="right" min-width="230">
7878
<template slot-scope="scope_child">
79-
<el-button @click="handleStick(scope_child.row)" type="warning" size="small">置顶</el-button>
80-
<el-button @click="handleEdit(scope_child.row)" type="primary" size="small">编辑</el-button>
81-
<el-button @click="handleDelete(scope_child.row)" type="danger" size="small">删除</el-button>
79+
<el-button @click="handleStick(scope_child.row)" type="warning" size="small" v-permission="'/categoryMenu/stick'">置顶</el-button>
80+
<el-button @click="handleEdit(scope_child.row)" type="primary" size="small" v-permission="'/categoryMenu/edit'">编辑</el-button>
81+
<el-button @click="handleDelete(scope_child.row)" type="danger" size="small" v-permission="'/categoryMenu/delete'">删除</el-button>
8282
</template>
8383
</el-table-column>
8484
</el-table>

vue_mogu_admin/src/views/authority/role.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
v-model="keyword"
1010
placeholder="请输入角色名称"
1111
></el-input>
12-
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="handleFind">查找</el-button>
13-
<el-button class="filter-item" type="primary" @click="handleAdd" icon="el-icon-edit">添加角色</el-button>
12+
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="handleFind" v-permission="'/role/getList'">查找</el-button>
13+
<el-button class="filter-item" type="primary" @click="handleAdd" icon="el-icon-edit" v-permission="'/role/add'">添加角色</el-button>
1414
</div>
1515

1616
<el-table :data="tableData" style="width: 100%">
@@ -55,8 +55,8 @@
5555

5656
<el-table-column label="操作" fixed="right" min-width="150">
5757
<template slot-scope="scope">
58-
<el-button @click="handleEdit(scope.row)" type="primary" size="small">编辑</el-button>
59-
<el-button @click="handleDelete(scope.row)" type="danger" size="small">删除</el-button>
58+
<el-button @click="handleEdit(scope.row)" type="primary" size="small" v-permission="'/role/edit'">编辑</el-button>
59+
<el-button @click="handleDelete(scope.row)" type="danger" size="small" v-permission="'/role/delete'">删除</el-button>
6060
</template>
6161
</el-table-column>
6262
</el-table>

vue_mogu_admin/src/views/blog/blog.vue

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<template>
22
<div class="app-container">
33
<!-- 查询和其他操作 -->
4-
<div class="filter-container" style="margin: 10px 0 10px 0;">
4+
<div class="filter-container" style="margin: 10px 0 10px 0;" v-permission="'/blog/getList'">
55
<el-input
66
clearable
77
class="filter-item"
@@ -78,10 +78,10 @@
7878
></el-option>
7979
</el-select>
8080

81-
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="handleFind">查找</el-button>
82-
<el-button class="filter-item" type="primary" @click="handleAdd" icon="el-icon-edit">添加博客</el-button>
83-
<el-button class="filter-item" type="warning" @click="handleUpload" icon="el-icon-star-on">本地上传</el-button>
84-
<el-button class="filter-item" type="danger" @click="handleDeleteBatch" icon="el-icon-delete">删除选中</el-button>
81+
<el-button class="filter-item" type="primary" icon="el-icon-search" @click="handleFind" v-permission="'/blog/getList'">查找</el-button>
82+
<el-button class="filter-item" type="primary" @click="handleAdd" icon="el-icon-edit" v-permission="'/blog/add'">添加博客</el-button>
83+
<el-button class="filter-item" type="warning" @click="handleUpload" icon="el-icon-star-on" v-permission="'/blog/uploadLocalBlog'">本地上传</el-button>
84+
<el-button class="filter-item" type="danger" @click="handleDeleteBatch" icon="el-icon-delete" v-permission="'/blog/deleteBatch'">删除选中</el-button>
8585
</div>
8686

8787
<el-table :data="tableData" style="width: 100%" @selection-change="handleSelectionChange">
@@ -184,10 +184,11 @@
184184

185185
<el-table-column label="操作" fixed="right" min-width="150">
186186
<template slot-scope="scope">
187-
<el-button @click="handleEdit(scope.row)" type="primary" size="small">编辑</el-button>
188-
<el-button @click="handleDelete(scope.row)" type="danger" size="small">删除</el-button>
187+
<el-button @click="handleEdit(scope.row)" type="primary" size="small" v-permission="'/blog/edit'">编辑</el-button>
188+
<el-button @click="handleDelete(scope.row)" type="danger" size="small" v-permission="'/blog/delete'">删除</el-button>
189189
</template>
190190
</el-table-column>
191+
191192
</el-table>
192193

193194
<!--分页-->

0 commit comments

Comments
 (0)