Merge remote-tracking branch 'origin/dev' into dev

pull/102/head
李强 2023-07-07 08:59:19 +08:00
commit 6a7f21ad39
8 changed files with 85 additions and 20 deletions

View File

@ -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 * # 低代码操作
# ...
# ********** 一键导入插件配置结束 **********

View File

@ -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)

View File

@ -6,7 +6,6 @@ VUE_APP_TITLE=DvAdmin
# 网络请求公用地址
VUE_APP_API=/api/
# 仓库地址
VUE_APP_REPO=https://github.com/d2-projects/d2-admin-start-kit

View File

@ -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",

View File

@ -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 () {

View File

@ -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
}

View File

@ -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',

View File

@ -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
}
}
}