Merge remote-tracking branch 'origin/dev' into dev
commit
6a7f21ad39
|
@ -412,6 +412,7 @@ PLUGINS_URL_PATTERNS = []
|
|||
# from dvadmin_ak_sk.settings import * # 秘钥管理管理
|
||||
# from dvadmin_tenants.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
|
||||
@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.viewset import CustomModelViewSet
|
||||
|
||||
|
@ -58,3 +63,16 @@ class MenuButtonViewSet(CustomModelViewSet):
|
|||
create_serializer_class = MenuButtonCreateUpdateSerializer
|
||||
update_serializer_class = MenuButtonCreateUpdateSerializer
|
||||
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)
|
||||
|
|
1
web/.env
1
web/.env
|
@ -6,7 +6,6 @@ VUE_APP_TITLE=DvAdmin
|
|||
# 网络请求公用地址
|
||||
VUE_APP_API=/api/
|
||||
|
||||
|
||||
# 仓库地址
|
||||
VUE_APP_REPO=https://github.com/d2-projects/d2-admin-start-kit
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
"faker": "^4.1.0",
|
||||
"flex.css": "^1.1.7",
|
||||
"fuse.js": "^5.2.3",
|
||||
"highlight.js": "^11.8.0",
|
||||
"hotkeys-js": "^3.7.3",
|
||||
"js-cookie": "^2.2.1",
|
||||
"js-md5": "^0.7.3",
|
||||
|
|
|
@ -56,6 +56,7 @@ new Vue({
|
|||
// 初始化配置
|
||||
this.$store.dispatch('d2admin/settings/load')
|
||||
this.$store.dispatch('d2admin/dictionary/load')
|
||||
this.$store.dispatch('d2admin/permission/load')
|
||||
},
|
||||
created () {
|
||||
|
||||
|
|
|
@ -6,34 +6,25 @@
|
|||
* 联系Qq:1638245306
|
||||
* @文件介绍: 权限控制
|
||||
*/
|
||||
import XEUtils from 'xe-utils'
|
||||
import store from '@/store'
|
||||
import router from '@/router'
|
||||
export default {
|
||||
hasPermissions (value) {
|
||||
if (process.env.VUE_APP_PM_ENABLED) {
|
||||
const path = router.history.current.path// 当前路由
|
||||
let need = []
|
||||
let needList = []
|
||||
if (typeof value === 'string') {
|
||||
need.push(value)
|
||||
needList.push(path + ':' + value)
|
||||
} 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" ')
|
||||
}
|
||||
// 获取所有的菜单路由(包含权限)
|
||||
let menuTree = sessionStorage.getItem('menuData')
|
||||
menuTree = JSON.parse(menuTree)
|
||||
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)
|
||||
const userPermissionList = store.getters['d2admin/permission/permissionList']
|
||||
return userPermissionList.some(permission => {
|
||||
return needList.includes(permission)
|
||||
})
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
|
|
@ -20,6 +20,14 @@ const frameIn = [{
|
|||
},
|
||||
component: _import('dashboard/workbench/index')
|
||||
},
|
||||
{
|
||||
path: 'page1',
|
||||
name: 'page1',
|
||||
meta: {
|
||||
auth: true
|
||||
},
|
||||
component: _import('demo/page1/index')
|
||||
},
|
||||
{
|
||||
path: '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