feat(role_per_20240628): 优化权限配置

1、修复首次打开权限配置,按钮小齿轮数据权限不显示bug
2、优化自定义数据权限:在input里面显示当前配置用户已有的权限
3、优化自定义数据权限:在树形选择器中,禁用掉当前登录用户没有权限的部门
This commit is contained in:
李小涛
2024-06-28 15:19:57 +08:00
parent 14640be036
commit 087d478094
4 changed files with 70 additions and 103 deletions

View File

@@ -256,86 +256,45 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet):
is_superuser = request.user.is_superuser is_superuser = request.user.is_superuser
if is_superuser: if is_superuser:
data = [ data = [
{ {"value": 0, "label": '仅本人数据权限'},
"value": 0, {"value": 1, "label": '本部门及以下数据权限'},
"label": '仅本人数据权限' {"value": 2, "label": '本部门数据权限'},
}, {"value": 3, "label": '全部数据权限'},
{ {"value": 4, "label": '自定义数据权限'}
"value": 1,
"label": '本部门及以下数据权限'
},
{
"value": 2,
"label": '本部门数据权限'
},
{
"value": 3,
"label": '全部数据权限'
},
{
"value": 4,
"label": '自定义数据权限'
}
] ]
return DetailResponse(data=data) return DetailResponse(data=data)
else: else:
data = [] params = request.query_params
data = [{"value": 0, "label": '仅本人数据权限'}]
role_list = request.user.role.values_list('id', flat=True) role_list = request.user.role.values_list('id', flat=True)
if params := request.query_params: # 权限页面进入初始化获取所有的数据权限范围
if menu_button_id := params.get('menu_button', None): role_queryset = RoleMenuButtonPermission.objects.filter(
role_queryset = RoleMenuButtonPermission.objects.filter( role__in=role_list
role__in=role_list, menu_button__id=menu_button_id ).values_list('data_range', flat=True)
).values_list('data_range', flat=True) # 通过按钮小齿轮获取指定按钮的权限
data_range_list = list(set(role_queryset)) if menu_button_id := params.get('menu_button', None):
for item in data_range_list: role_queryset = RoleMenuButtonPermission.objects.filter(
if item == 0: role__in=role_list, menu_button__id=menu_button_id
data = [{ ).values_list('data_range', flat=True)
"value": 0,
"label": '仅本人数据权限' data_range_list = list(set(role_queryset))
}] for item in data_range_list:
elif item == 1: if item == 0:
data = [{ data = data
"value": 0, elif item == 1:
"label": '仅本人数据权限' data.extend([
}, { {"value": 1, "label": '本部门及以下数据权限'},
"value": 1, {"value": 2, "label": '本部门数据权限'}
"label": '本部门及以下数据权限' ])
}, elif item == 2:
{ data.extend([{"value": 2, "label": '本部门数据权限'}])
"value": 2, elif item == 3:
"label": '本部门数据权限' data.extend([{"value": 3, "label": '全部数据权限'}])
}] elif item == 4:
elif item == 2: data.extend([{"value": 4, "label": '自定义数据权限'}])
data = [{ else:
"value": 0, data = []
"label": '仅本人数据权限' return DetailResponse(data=data)
},
{
"value": 2,
"label": '本部门数据权限'
}]
elif item == 3:
data = [{
"value": 0,
"label": '仅本人数据权限'
},
{
"value": 3,
"label": '全部数据权限'
}, ]
elif item == 4:
data = [{
"value": 0,
"label": '仅本人数据权限'
},
{
"value": 4,
"label": '自定义数据权限'
}]
else:
data = []
return DetailResponse(data=data)
return ErrorResponse(msg="参数错误")
@action(methods=['get'], detail=False, permission_classes=[IsAuthenticated]) @action(methods=['get'], detail=False, permission_classes=[IsAuthenticated])
def role_to_dept_all(self, request): def role_to_dept_all(self, request):
@@ -344,23 +303,22 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet):
:param request: :param request:
:return: :return:
""" """
params = request.query_params
is_superuser = request.user.is_superuser is_superuser = request.user.is_superuser
if is_superuser: params = request.query_params
queryset = Dept.objects.values('id', 'name', 'parent') role_id = params.get('role')
else: menu_button_id = params.get('menu_button')
if not params: dept_checked = RoleMenuButtonPermission.objects.filter(
return ErrorResponse(msg="参数错误") role_id=role_id, menu_button_id=menu_button_id
menu_button = params.get('menu_button') ).values_list('dept', flat=True)
if menu_button is None: dept_list = Dept.objects.values('id', 'name', 'parent')
return ErrorResponse(msg="参数错误") data = {
role_list = request.user.role.values_list('id', flat=True) 'depts': [],
queryset = RoleMenuButtonPermission.objects.filter(role__in=role_list, menu_button=None).values( 'dept_checked': dept_checked
dept_id=F('dept__id'), }
name=F('dept__name'), for dept in dept_list:
parent=F('dept__parent') dept["disabled"] = not (is_superuser | dept["id"] in dept_checked)
) data['depts'].append(dept)
return DetailResponse(data=queryset) return DetailResponse(data=data)
@action(methods=['get'], detail=False, permission_classes=[IsAuthenticated]) @action(methods=['get'], detail=False, permission_classes=[IsAuthenticated])
def menu_to_button(self, request): def menu_to_button(self, request):

View File

@@ -80,8 +80,8 @@ export default defineComponent({
const state = reactive({ const state = reactive({
isShowPassword: false, isShowPassword: false,
ruleForm: { ruleForm: {
username: '', username: 'superadmin',
password: '', password: 'admin123456',
captcha: '', captcha: '',
captchaKey: '', captchaKey: '',
captchaImgBase: '', captchaImgBase: '',

View File

@@ -40,10 +40,11 @@ export function getDataPermissionRangeAll() {
method: 'get', method: 'get',
}) })
} }
export function getDataPermissionDept() { export function getDataPermissionDept(query:object) {
return request({ return request({
url: '/api/system/role_menu_button_permission/role_to_dept_all/', url: '/api/system/role_menu_button_permission/role_to_dept_all/',
method: 'get' method: 'get',
params:query
}) })
} }

View File

@@ -124,6 +124,7 @@ watch(
(val) => { (val) => {
drawerVisible.value = val; drawerVisible.value = val;
getMenuBtnPermission() getMenuBtnPermission()
getDataPermissionRangeLable()
} }
); );
@@ -144,9 +145,10 @@ let menuCurrent = ref<Partial<MenuDataType>>({});
let menuBtnCurrent = ref<number>(-1); let menuBtnCurrent = ref<number>(-1);
let dialogVisible = ref(false); let dialogVisible = ref(false);
let dataPermissionRange = ref<DataPermissionRangeType[]>([]); let dataPermissionRange = ref<DataPermissionRangeType[]>([]);
let dataPermissionRangeLabel = ref<DataPermissionRangeType[]>([]);
const formatDataRange = computed(() => { const formatDataRange = computed(() => {
return function (datarange: number) { return function (datarange: number) {
const findItem = dataPermissionRange.value.find((i) => i.value === datarange); const findItem = dataPermissionRangeLabel.value.find((i) => i.value === datarange);
return findItem?.label || '' return findItem?.label || ''
} }
}) })
@@ -158,6 +160,11 @@ const getMenuBtnPermission = async () => {
const resMenu = await getRolePremission({ role: props.roleId }) const resMenu = await getRolePremission({ role: props.roleId })
menuData.value = resMenu.data menuData.value = resMenu.data
} }
// 获取按钮的数据权限下拉选项
const getDataPermissionRangeLable = async () => {
const resRange = await getDataPermissionRange({ role: props.roleId })
dataPermissionRangeLabel.value = resRange.data;
}
const fetchData = async (btnId) => { const fetchData = async (btnId) => {
try { try {
@@ -170,9 +177,9 @@ const fetchData = async (btnId) => {
} }
}; };
const handleCollapseChange = (val: number) => { // const handleCollapseChange = (val: number) => {
collapseCurrent.value = [val]; // collapseCurrent.value = [val];
}; // };
/** /**
* 设置按钮数据权限 * 设置按钮数据权限
@@ -194,9 +201,10 @@ const handleColumnChange = (val: boolean, record: MenusType, btnType: string) =>
const handlePermissionRangeChange = async (val: number) => { const handlePermissionRangeChange = async (val: number) => {
if (val === 4) { if (val === 4) {
const res = await getDataPermissionDept(); const res = await getDataPermissionDept({ role: props.roleId,menu_button:menuBtnCurrent.value });
const data = XEUtils.toArrayTree(res.data, { parentKey: 'parent', strict: false }); const depts = XEUtils.toArrayTree(res.data.depts, { parentKey: 'parent', strict: false });
deptData.value = data; deptData.value = depts;
customDataPermission.value = res.data.dept_checked;
} }
}; };