feat(role_menu_20240628): 优化权限配置
- 优化保存菜单按钮错误bug - 优化非管理员角色给其他角色分配列权限禁用逻辑 - 优化按钮自定义数据权限后端逻辑
This commit is contained in:
@@ -241,9 +241,11 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet):
|
|||||||
if rolemenubuttonpermission_queryset
|
if rolemenubuttonpermission_queryset
|
||||||
else None,
|
else None,
|
||||||
'isCheck': bool(rolemenubuttonpermission_queryset),
|
'isCheck': bool(rolemenubuttonpermission_queryset),
|
||||||
|
'dept': rolemenubuttonpermission_queryset.dept.all().values_list('id', flat=True)
|
||||||
|
if rolemenubuttonpermission_queryset
|
||||||
|
else [],
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
for column_item in menu_item.menufield_set.all():
|
for column_item in menu_item.menufield_set.all():
|
||||||
# 需要授权角色已拥有的列权限
|
# 需要授权角色已拥有的列权限
|
||||||
fieldpermission_queryset = column_item.menu_field.filter(role_id=current_role).first()
|
fieldpermission_queryset = column_item.menu_field.filter(role_id=current_role).first()
|
||||||
@@ -384,30 +386,20 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet):
|
|||||||
"""
|
"""
|
||||||
is_superuser = request.user.is_superuser
|
is_superuser = request.user.is_superuser
|
||||||
params = request.query_params
|
params = request.query_params
|
||||||
# 需要授权的角色信息
|
|
||||||
role_id = params.get('role', None)
|
|
||||||
# 当前登录用户的角色
|
# 当前登录用户的角色
|
||||||
role_list = request.user.role.values_list('id', flat=True)
|
role_list = request.user.role.values_list('id', flat=True)
|
||||||
|
|
||||||
menu_button_id = params.get('menu_button')
|
menu_button_id = params.get('menu_button')
|
||||||
# 当前授权的角色已有的自定义部门权限
|
|
||||||
dept_checked = RoleMenuButtonPermission.objects.filter(
|
|
||||||
role_id=role_id, menu_button_id=menu_button_id
|
|
||||||
).values_list('dept', flat=True)
|
|
||||||
# 当前登录用户角色可以分配的自定义部门权限
|
# 当前登录用户角色可以分配的自定义部门权限
|
||||||
dept_checked_disabled = RoleMenuButtonPermission.objects.filter(
|
dept_checked_disabled = RoleMenuButtonPermission.objects.filter(
|
||||||
role_id__in=role_list, menu_button_id=menu_button_id
|
role_id__in=role_list, menu_button_id=menu_button_id
|
||||||
).values_list('dept', flat=True)
|
).values_list('dept', flat=True)
|
||||||
|
|
||||||
dept_list = Dept.objects.values('id', 'name', 'parent')
|
dept_list = Dept.objects.values('id', 'name', 'parent')
|
||||||
data = {
|
|
||||||
'depts': [],
|
|
||||||
'dept_checked': [i for i in dept_checked if i is not None]
|
|
||||||
}
|
|
||||||
|
|
||||||
|
data = []
|
||||||
for dept in dept_list:
|
for dept in dept_list:
|
||||||
dept["disabled"] = False if is_superuser else dept["id"] not in dept_checked_disabled
|
dept["disabled"] = False if is_superuser else dept["id"] not in dept_checked_disabled
|
||||||
data['depts'].append(dept)
|
data.append(dept)
|
||||||
return DetailResponse(data=data)
|
return DetailResponse(data=data)
|
||||||
|
|
||||||
@action(methods=['get'], detail=False, permission_classes=[IsAuthenticated])
|
@action(methods=['get'], detail=False, permission_classes=[IsAuthenticated])
|
||||||
|
|||||||
@@ -46,7 +46,8 @@
|
|||||||
<span>字段</span>
|
<span>字段</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-for="(head, hIndex) in column.header" :key="hIndex" class="width-check">
|
<div v-for="(head, hIndex) in column.header" :key="hIndex" class="width-check">
|
||||||
<el-checkbox :label="head.value" @change="handleColumnChange($event, menu, head.value)">
|
<el-checkbox :label="head.value"
|
||||||
|
@change="handleColumnChange($event, menu, head.value, head.disabled)">
|
||||||
<span>{{ head.label }}</span>
|
<span>{{ head.label }}</span>
|
||||||
</el-checkbox>
|
</el-checkbox>
|
||||||
</div>
|
</div>
|
||||||
@@ -168,6 +169,10 @@ const getDataPermissionRangeLable = async () => {
|
|||||||
dataPermissionRangeLabel.value = resRange.data;
|
dataPermissionRangeLabel.value = resRange.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取按钮数据权限下拉选项
|
||||||
|
* @param btnId 按钮id
|
||||||
|
*/
|
||||||
const fetchData = async (btnId: number) => {
|
const fetchData = async (btnId: number) => {
|
||||||
try {
|
try {
|
||||||
const resRange = await getDataPermissionRange({ menu_button: btnId });
|
const resRange = await getDataPermissionRange({ menu_button: btnId });
|
||||||
@@ -197,18 +202,29 @@ const handleSettingClick = (record: MenuDataType, btn: MenuDataType['btns'][numb
|
|||||||
fetchData(btn.id)
|
fetchData(btn.id)
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleColumnChange = (val: boolean, record: MenuDataType, btnType: string) => {
|
/**
|
||||||
|
* 设置列权限
|
||||||
|
* @param val 是否选中
|
||||||
|
* @param record 当前菜单
|
||||||
|
* @param btnType 按钮类型
|
||||||
|
* @param disabledType 禁用类型
|
||||||
|
*/
|
||||||
|
const handleColumnChange = (val: boolean, record: MenuDataType, btnType: string, disabledType: string) => {
|
||||||
for (const iterator of record.columns) {
|
for (const iterator of record.columns) {
|
||||||
iterator[btnType] = val;
|
iterator[btnType] = iterator[disabledType] ? iterator[btnType] : val;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据权限设置
|
||||||
|
*/
|
||||||
const handlePermissionRangeChange = async (val: number) => {
|
const handlePermissionRangeChange = async (val: number) => {
|
||||||
if (val === 4) {
|
if (val === 4) {
|
||||||
const res = await getDataPermissionDept({ role: props.roleId, menu_button: menuBtnCurrent.value });
|
const res = await getDataPermissionDept({ role: props.roleId, menu_button: menuBtnCurrent.value });
|
||||||
const depts = XEUtils.toArrayTree(res.data.depts, { parentKey: 'parent', strict: false });
|
const depts = XEUtils.toArrayTree(res.data, { parentKey: 'parent', strict: false });
|
||||||
deptData.value = depts;
|
deptData.value = depts;
|
||||||
customDataPermission.value = res.data.dept_checked;
|
const btnObj = XEUtils.find(menuCurrent.value.btns, item => item.id === menuBtnCurrent.value)
|
||||||
|
customDataPermission.value = btnObj.dept;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -255,9 +271,9 @@ const handleSavePermission = () => {
|
|||||||
|
|
||||||
const column = reactive({
|
const column = reactive({
|
||||||
header: [
|
header: [
|
||||||
{ value: 'is_create', label: '新增可见',disabled:'disabled_create'},
|
{ value: 'is_create', label: '新增可见', disabled: 'disabled_create' },
|
||||||
{ value: 'is_update', label: '编辑可见' ,disabled:'disabled_update'},
|
{ value: 'is_update', label: '编辑可见', disabled: 'disabled_update' },
|
||||||
{ value: 'is_query', label: '列表可见',disabled:'disabled_query' }
|
{ value: 'is_query', label: '列表可见', disabled: 'disabled_query' }
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user