!47 优化权限配置

Merge pull request !47 from 木子-李/role_menu_20240628
This commit is contained in:
dvadmin
2024-06-29 05:40:48 +00:00
committed by Gitee
2 changed files with 54 additions and 27 deletions

View File

@@ -198,6 +198,8 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet):
params = request.query_params params = request.query_params
# 需要授权的角色信息 # 需要授权的角色信息
current_role = params.get('role', None) current_role = params.get('role', None)
# 当前登录用户的角色
role_list = request.user.role.values_list('id', flat=True)
if current_role is None: if current_role is None:
return ErrorResponse(msg='参数错误') return ErrorResponse(msg='参数错误')
is_superuser = request.user.is_superuser is_superuser = request.user.is_superuser
@@ -239,24 +241,33 @@ 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()
query = fieldpermission_queryset.is_query if fieldpermission_queryset else None is_query = fieldpermission_queryset.is_query if fieldpermission_queryset else None
create = fieldpermission_queryset.is_create if fieldpermission_queryset else None is_create = fieldpermission_queryset.is_create if fieldpermission_queryset else None
update = fieldpermission_queryset.is_update if fieldpermission_queryset else None is_update = fieldpermission_queryset.is_update if fieldpermission_queryset else None
# 当前登录用户角色可分配的列权限
fieldpermission_queryset_disabled = column_item.menu_field.filter(role_id__in=role_list).first()
disabled_query = fieldpermission_queryset_disabled.is_query if fieldpermission_queryset else None
disabled_create = fieldpermission_queryset_disabled.is_create if fieldpermission_queryset else None
disabled_update = fieldpermission_queryset_disabled.is_update if fieldpermission_queryset else None
dicts['columns'].append({ dicts['columns'].append({
'id': column_item.id, 'id': column_item.id,
'field_name': column_item.field_name, 'field_name': column_item.field_name,
'title': column_item.title, 'title': column_item.title,
'is_query': query, 'is_query': is_query,
'is_create': create, 'is_create': is_create,
'is_update': update, 'is_update': is_update,
'disabled_query': False if is_superuser else not query, 'disabled_query': False if is_superuser else not disabled_query,
'disabled_create': False if is_superuser else not create, 'disabled_create': False if is_superuser else not disabled_create,
'disabled_update': False if is_superuser else not update, 'disabled_update': False if is_superuser else not disabled_update,
}) })
result.append(dicts) result.append(dicts)
return DetailResponse(data=result) return DetailResponse(data=result)
@@ -375,20 +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') # 当前登录用户的角色
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 dept_checked_disabled = RoleMenuButtonPermission.objects.filter(
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 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])

View File

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