bug修复: 修复权限不能传入数组问题
parent
815b8e956b
commit
fc74a3d8d9
|
@ -412,6 +412,7 @@ PLUGINS_URL_PATTERNS = []
|
||||||
# from dvadmin_ak_sk.settings import * # 秘钥管理管理
|
# from dvadmin_ak_sk.settings import * # 秘钥管理管理
|
||||||
# from dvadmin_tenants.settings import * # 租户管理
|
# from dvadmin_tenants.settings import * # 租户管理
|
||||||
# from dvadmin_cloud_storage.settings import * # 云存储
|
# from dvadmin_cloud_storage.settings import * # 云存储
|
||||||
|
from dvadmin_low_code_crud.settings import * # 低代码操作
|
||||||
# ...
|
# ...
|
||||||
|
|
||||||
# ********** 一键导入插件配置结束 **********
|
# ********** 一键导入插件配置结束 **********
|
||||||
|
|
|
@ -6,7 +6,12 @@
|
||||||
@Created on: 2021/6/3 003 0:30
|
@Created on: 2021/6/3 003 0:30
|
||||||
@Remark: 菜单按钮管理
|
@Remark: 菜单按钮管理
|
||||||
"""
|
"""
|
||||||
from dvadmin.system.models import MenuButton
|
from django.db.models import F, CharField, Value, ExpressionWrapper
|
||||||
|
from django.db.models.functions import Cast, Concat
|
||||||
|
from rest_framework.decorators import action
|
||||||
|
|
||||||
|
from dvadmin.system.models import MenuButton, Menu
|
||||||
|
from dvadmin.utils.json_response import DetailResponse
|
||||||
from dvadmin.utils.serializers import CustomModelSerializer
|
from dvadmin.utils.serializers import CustomModelSerializer
|
||||||
from dvadmin.utils.viewset import CustomModelViewSet
|
from dvadmin.utils.viewset import CustomModelViewSet
|
||||||
|
|
||||||
|
@ -58,3 +63,16 @@ class MenuButtonViewSet(CustomModelViewSet):
|
||||||
create_serializer_class = MenuButtonCreateUpdateSerializer
|
create_serializer_class = MenuButtonCreateUpdateSerializer
|
||||||
update_serializer_class = MenuButtonCreateUpdateSerializer
|
update_serializer_class = MenuButtonCreateUpdateSerializer
|
||||||
extra_filter_backends = []
|
extra_filter_backends = []
|
||||||
|
|
||||||
|
@action(methods=['get'], detail=False)
|
||||||
|
def get_btn_permission(self,request):
|
||||||
|
"""
|
||||||
|
获取当前用户的按钮权限
|
||||||
|
"""
|
||||||
|
user = request.user
|
||||||
|
if not user.is_superuser:
|
||||||
|
menuIds = user.role.values_list('menu__id', flat=True)
|
||||||
|
else:
|
||||||
|
menuIds = Menu.objects.filter(status=1)
|
||||||
|
queryset = MenuButton.objects.filter(menu__in=menuIds).annotate(permission=Concat('menu__web_path',Value(':'),'value',output_field=CharField())).values_list('permission',flat=True)
|
||||||
|
return DetailResponse(data=queryset)
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
"faker": "^4.1.0",
|
"faker": "^4.1.0",
|
||||||
"flex.css": "^1.1.7",
|
"flex.css": "^1.1.7",
|
||||||
"fuse.js": "^5.2.3",
|
"fuse.js": "^5.2.3",
|
||||||
|
"highlight.js": "^11.8.0",
|
||||||
"hotkeys-js": "^3.7.3",
|
"hotkeys-js": "^3.7.3",
|
||||||
"js-cookie": "^2.2.1",
|
"js-cookie": "^2.2.1",
|
||||||
"js-md5": "^0.7.3",
|
"js-md5": "^0.7.3",
|
||||||
|
|
|
@ -54,6 +54,7 @@ new Vue({
|
||||||
// 初始化配置
|
// 初始化配置
|
||||||
this.$store.dispatch('d2admin/settings/load')
|
this.$store.dispatch('d2admin/settings/load')
|
||||||
this.$store.dispatch('d2admin/dictionary/load')
|
this.$store.dispatch('d2admin/dictionary/load')
|
||||||
|
this.$store.dispatch('d2admin/permission/load')
|
||||||
},
|
},
|
||||||
created () {
|
created () {
|
||||||
|
|
||||||
|
|
|
@ -6,34 +6,25 @@
|
||||||
* 联系Qq:1638245306
|
* 联系Qq:1638245306
|
||||||
* @文件介绍: 权限控制
|
* @文件介绍: 权限控制
|
||||||
*/
|
*/
|
||||||
import XEUtils from 'xe-utils'
|
import store from '@/store'
|
||||||
import router from '@/router'
|
import router from '@/router'
|
||||||
export default {
|
export default {
|
||||||
hasPermissions (value) {
|
hasPermissions (value) {
|
||||||
if (process.env.VUE_APP_PM_ENABLED) {
|
if (process.env.VUE_APP_PM_ENABLED) {
|
||||||
const path = router.history.current.path// 当前路由
|
const path = router.history.current.path// 当前路由
|
||||||
let need = []
|
let needList = []
|
||||||
if (typeof value === 'string') {
|
if (typeof value === 'string') {
|
||||||
need.push(value)
|
needList.push(path + ':' + value)
|
||||||
} else if (value && value instanceof Array && value.length > 0) {
|
} else if (value && value instanceof Array && value.length > 0) {
|
||||||
need = need.concat(value)
|
needList = needList.concat(path + ':' + value)
|
||||||
}
|
}
|
||||||
if (need.length === 0) {
|
if (needList.length === 0) {
|
||||||
throw new Error('need permissions! Like v-permission="usersphere:user:view" ')
|
throw new Error('need permissions! Like v-permission="usersphere:user:view" ')
|
||||||
}
|
}
|
||||||
// 获取所有的菜单路由(包含权限)
|
const userPermissionList = store.getters['d2admin/permission/permissionList']
|
||||||
let menuTree = sessionStorage.getItem('menuData')
|
return userPermissionList.some(permission => {
|
||||||
menuTree = JSON.parse(menuTree)
|
return needList.includes(permission)
|
||||||
const userPermissionList = XEUtils.toTreeArray(menuTree)
|
})
|
||||||
const permissionList = []
|
|
||||||
for (const item of userPermissionList) {
|
|
||||||
if (item.menuPermission) {
|
|
||||||
for (const per of item.menuPermission) {
|
|
||||||
permissionList.push(item.path + ':' + per)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return permissionList.includes(path + ':' + value)
|
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,14 @@ const frameIn = [{
|
||||||
},
|
},
|
||||||
component: _import('dashboard/workbench/index')
|
component: _import('dashboard/workbench/index')
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'page1',
|
||||||
|
name: 'page1',
|
||||||
|
meta: {
|
||||||
|
auth: true
|
||||||
|
},
|
||||||
|
component: _import('demo/page1/index')
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: 'userInfo',
|
path: 'userInfo',
|
||||||
name: 'userInfo',
|
name: 'userInfo',
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
import { request } from '@/api/service'
|
||||||
|
const urlPrefix = '/api/system/menu_button/get_btn_permission/'
|
||||||
|
export default {
|
||||||
|
namespaced: true,
|
||||||
|
state: {
|
||||||
|
// 未读消息
|
||||||
|
data: []
|
||||||
|
},
|
||||||
|
getters: {
|
||||||
|
permissionList (state) {
|
||||||
|
return state.data
|
||||||
|
}
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
/**
|
||||||
|
* @description 获取数据
|
||||||
|
* @param {Object} context
|
||||||
|
* @param {String} param message {String} 信息
|
||||||
|
* @param {String} param type {String} 类型
|
||||||
|
* @param {Object} payload meta {Object} 附带的信息
|
||||||
|
*/
|
||||||
|
async load ({
|
||||||
|
state,
|
||||||
|
commit
|
||||||
|
}) {
|
||||||
|
request({
|
||||||
|
url: urlPrefix,
|
||||||
|
method: 'get',
|
||||||
|
params: {}
|
||||||
|
}).then(res => {
|
||||||
|
const { data } = res
|
||||||
|
commit('set', data)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mutations: {
|
||||||
|
/**
|
||||||
|
* 设置权限数据
|
||||||
|
* @param state
|
||||||
|
* @param number
|
||||||
|
*/
|
||||||
|
async set (state, data) {
|
||||||
|
state.data = data
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue