功能变化: 优化角色管理

pull/84/head
猿小天 2022-12-30 16:57:53 +08:00
parent 977e75dd50
commit 9f523f6eba
7 changed files with 52 additions and 16 deletions

View File

@ -156,14 +156,19 @@ class DeptViewSet(CustomModelViewSet):
def dept_lazy_tree(self, request, *args, **kwargs): def dept_lazy_tree(self, request, *args, **kwargs):
parent = self.request.query_params.get('parent') parent = self.request.query_params.get('parent')
queryset = self.filter_queryset(self.get_queryset()) is_superuser = request.user.is_superuser
if not parent: if is_superuser:
if self.request.user.is_superuser: if parent:
queryset = queryset.filter(parent__isnull=True) queryset = Dept.objects.filter(parent=parent).values('id', 'name', 'parent')
else: else:
queryset = queryset.filter(id=self.request.user.dept_id) queryset = Dept.objects.filter(parent__isnull=True).values('id', 'name', 'parent')
data = queryset.filter(status=True).order_by('sort').values('name', 'id', 'parent') else:
return DetailResponse(data=data, msg="获取成功") dept_list = request.user.role.values_list('dept', flat=True)
if parent:
queryset = Dept.objects.filter(id__in=dept_list,parent=parent).values('id', 'name', 'parent')
else:
queryset = Dept.objects.filter(id__in=dept_list,parent__isnull=True).values('id', 'name', 'parent')
return DetailResponse(data=queryset, msg="获取成功")
@action(methods=["GET"], detail=False, permission_classes=[AnonymousUserPermission]) @action(methods=["GET"], detail=False, permission_classes=[AnonymousUserPermission])

View File

@ -10,7 +10,7 @@ from rest_framework import serializers
from rest_framework.decorators import action from rest_framework.decorators import action
from rest_framework.permissions import IsAuthenticated from rest_framework.permissions import IsAuthenticated
from dvadmin.system.models import Role, Menu, MenuButton from dvadmin.system.models import Role, Menu, MenuButton, Dept
from dvadmin.system.views.dept import DeptSerializer from dvadmin.system.views.dept import DeptSerializer
from dvadmin.system.views.menu import MenuSerializer from dvadmin.system.views.menu import MenuSerializer
from dvadmin.system.views.menu_button import MenuButtonSerializer from dvadmin.system.views.menu_button import MenuButtonSerializer
@ -62,6 +62,9 @@ class RoleCreateUpdateSerializer(CustomModelSerializer):
return super().validate(attrs) return super().validate(attrs)
def save(self, **kwargs): def save(self, **kwargs):
is_superuser = self.request.user.is_superuser
if not is_superuser:
self.validated_data.pop('admin')
data = super().save(**kwargs) data = super().save(**kwargs)
data.dept.set(self.initial_data.get('dept', [])) data.dept.set(self.initial_data.get('dept', []))
data.menu.set(self.initial_data.get('menu', [])) data.menu.set(self.initial_data.get('menu', []))
@ -119,7 +122,7 @@ class RoleViewSet(CustomModelViewSet):
else: else:
menu_id_list = request.user.role.values_list('menu',flat=True) menu_id_list = request.user.role.values_list('menu',flat=True)
queryset = Menu.objects.filter(id__in=menu_id_list) queryset = Menu.objects.filter(id__in=menu_id_list)
queryset = self.filter_queryset(queryset) # queryset = self.filter_queryset(queryset)
serializer = MenuPermissonSerializer(queryset, many=True,request=request) serializer = MenuPermissonSerializer(queryset, many=True,request=request)
return DetailResponse(data=serializer.data) return DetailResponse(data=serializer.data)
@ -201,3 +204,14 @@ class RoleViewSet(CustomModelViewSet):
else: else:
data = [] data = []
return DetailResponse(data=data) return DetailResponse(data=data)
@action(methods=['GET'], detail=False, permission_classes=[IsAuthenticated])
def data_scope_dept(self,request):
"""根据当前角色获取部门信息"""
is_superuser = request.user.is_superuser
if is_superuser:
queryset = Dept.objects.values('id','name','parent')
else:
dept_list = request.user.role.values_list('dept',flat=True)
queryset = Dept.objects.filter(id__in=dept_list).values('id','name','parent')
return DetailResponse(data=queryset)

View File

@ -279,7 +279,6 @@ export default {
* @param file * @param file
*/ */
handleAvatarSuccess (res, file) { handleAvatarSuccess (res, file) {
console.log(11, res)
this.userInfo.avatar = res this.userInfo.avatar = res
} }
} }

View File

@ -156,7 +156,6 @@ export const crudOptions = (vm) => {
title: '是否管理员', title: '是否管理员',
key: 'admin', key: 'admin',
sortable: true, sortable: true,
type: 'radio', type: 'radio',
dict: { dict: {
data: vm.dictionary('button_whether_bool') data: vm.dictionary('button_whether_bool')
@ -164,11 +163,12 @@ export const crudOptions = (vm) => {
form: { form: {
value: false, value: false,
component: { component: {
placeholder: '请选择是否管理员' placeholder: '请选择是否管理员',
} show(context){
return vm.info.is_superuser?true:false}
},
} }
}, },
{ {
title: '状态', title: '状态',
key: 'status', key: 'status',

View File

@ -64,12 +64,17 @@ import * as api from './api'
import { crudOptions } from './crud' import { crudOptions } from './crud'
import { d2CrudPlus } from 'd2-crud-plus' import { d2CrudPlus } from 'd2-crud-plus'
import rolePermission from '../rolePermission' import rolePermission from '../rolePermission'
import { mapState } from 'vuex'
export default { export default {
name: 'role', name: 'role',
mixins: [d2CrudPlus.crud], mixins: [d2CrudPlus.crud],
components: { components: {
rolePermission rolePermission
}, },
computed: {
...mapState('d2admin/user', ['info'])
},
data () { data () {
return { return {
rolePermissionShow: false, rolePermissionShow: false,

View File

@ -47,7 +47,7 @@ export function DelObj (id) {
// 通过角色id,获取菜单数据 // 通过角色id,获取菜单数据
export function GetMenuData (obj) { export function GetMenuData (obj) {
return request({ return request({
url: '/api/system/role/' + obj.id + '/roleId_get_menu/', url: '/api/system/role/role_get_menu/',
method: 'get', method: 'get',
params: {} params: {}
}).then(res => { }).then(res => {
@ -69,3 +69,16 @@ export function GetDataScope () {
params: {} params: {}
}) })
} }
/**
* 获取角色部门
* @returns {*}
* @constructor
*/
export function GetDataScopeDept () {
return request({
url: '/api/system/role/data_scope_dept/',
method: 'get',
params: {}
})
}

View File

@ -215,7 +215,7 @@ export default {
}, },
// //
getDeptData () { getDeptData () {
deptApi.GetListAll().then(ret => { api.GetDataScopeDept().then(ret => {
this.deptOptions = XEUtils.toArrayTree(ret.data, { parentKey: 'parent', strict: false }) this.deptOptions = XEUtils.toArrayTree(ret.data, { parentKey: 'parent', strict: false })
}) })
}, },